[ros-dev] [ros-diffs] [gedmurphy] 69650: The c++ bool is 1 byte, not 4. Thanks Thomas

Timo Kreuzer timo.kreuzer at web.de
Tue Nov 3 21:02:38 UTC 2015


m_RefreshPending is a 32 bit BOOL and the constructor will initialize it completely with 0.
If it was initializing only the 1st byte, the new code would still be wrong, since it makes no difference.
InterlockedCompareExchange will exchange 32 bit, no matter whether you pass a bool or a BOOL.


Am 03.11.2015 um 10:00 schrieb Thomas Faber:
> It makes a difference because m_RefreshPending was initialized to 0 by
> the constructor, but the three bytes behind it were not, so the first
> cmpxchg could fail.
> Plus of course if someone decided to add another bool or a char array
> or whatever at the end, that would get overwritten.
>
>
> On 2015-11-03 00:21, Timo Kreuzer wrote:
>> In fact in this case it wouldn't make a difference, since the bool would
>> be converted to a LONG. But using TRUE/FALSE seems to be appropriate here.
>>
>> Am 22.10.2015 um 19:37 schrieb gedmurphy at svn.reactos.org:
>>> Author: gedmurphy
>>> Date: Thu Oct 22 17:37:51 2015
>>> New Revision: 69650
>>>
>>> URL: http://svn.reactos.org/svn/reactos?rev=69650&view=rev
>>> Log:
>>> The c++ bool is 1 byte, not 4. Thanks Thomas
>>>
>>> Modified:
>>>       trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp
>>>       trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.h
>>>
>>> Modified: trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp
>>> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp?rev=69650&r1=69649&r2=69650&view=diff
>>> ==============================================================================
>>> --- trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp	[iso-8859-1] (original)
>>> +++ trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.cpp	[iso-8859-1] Thu Oct 22 17:37:51 2015
>>> @@ -786,7 +786,7 @@
>>>                    // we set a timer to run in 500ms, which should leave enough time for all
>>>                    // the messages to come through. Wrap so we don't set multiple timers
>>>                    //
>>> -                if (InterlockedCompareExchange((LONG *)&This->m_RefreshPending, true, false) == false)
>>> +                if (InterlockedCompareExchange((LONG *)&This->m_RefreshPending, TRUE, FALSE) == FALSE)
>>>                    {
>>>                        SetTimer(hwnd, REFRESH_TIMER, 500, NULL);
>>>                    }
>>> @@ -807,7 +807,7 @@
>>>                    KillTimer(hwnd, REFRESH_TIMER);
>>>    
>>>                    // Allow more change notifications
>>> -                InterlockedExchange((LONG *)&This->m_RefreshPending, false);
>>> +                InterlockedExchange((LONG *)&This->m_RefreshPending, FALSE);
>>>                }
>>>                break;
>>>            }
>>>
>>> Modified: trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.h
>>> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.h?rev=69650&r1=69649&r2=69650&view=diff
>>> ==============================================================================
>>> --- trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.h	[iso-8859-1] (original)
>>> +++ trunk/reactos/dll/win32/devmgr/devmgmt/MainWindow.h	[iso-8859-1] Thu Oct 22 17:37:51 2015
>>> @@ -17,7 +17,7 @@
>>>        HMENU m_hMenu;
>>>        HMENU m_hActionMenu;
>>>        int m_CmdShow;
>>> -    bool m_RefreshPending;
>>> +    BOOL m_RefreshPending;
>>>    
>>>    public:
>>>        CDeviceManager(void);
>>>
>>>
>>>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3703 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20151103/d23cf03f/attachment.bin>


More information about the Ros-dev mailing list