[ros-dev] [ros-diffs] [dchapyshev] 42012: - Samplify SwitchToThread and QueueUserWorkItem - Remove unneeded InternalWorkItemTrampoline function and QUEUE_USER_WORKITEM_CONTEXT structure - Other small changes
Alex Ionescu
ionucu at videotron.ca
Tue Jul 21 21:42:23 CEST 2009
I have no idea why typecasting would make it "crash" on another
architecture...
On 21-Jul-09, at 4:02 AM, Ged wrote:
> Dmitry do you have a reply for this?
> I worry that you're simply copying Windows internals without
> thinking about
> it.
>
> I agree with Thomas on this, if we can do something better then we
> should.
> There's no reason to do everything in exactly the same manner just
> to for
> the sake of copying. In fact, I would actually advise we do things
> slightly
> differently whenever possible.
>
> Ged.
>
>
> -----Original Message-----
> From: ros-dev-bounces at reactos.org [mailto:ros-dev-
> bounces at reactos.org] On
> Behalf Of Thomas Bluemel
> Sent: 17 July 2009 22:53
> To: ReactOS Development List
> Subject: Re: [ros-dev] [ros-diffs] [dchapyshev] 42012: - Samplify
> SwitchToThread and QueueUserWorkItem - Remove unneeded
> InternalWorkItemTrampoline function and QUEUE_USER_WORKITEM_CONTEXT
> structure - Other small changes
>
> Just because Wine and Windows do it that way doesn't make it any more
> correct or portable.
>
> RtlQueueWorkItem expects a function of this type:
> typedef VOID (NTAPI *WORKERCALLBACKFUNC)(IN PVOID Context);
>
> The supplied function is of this type:
> typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(PVOID Parameter);
>
> This doesn't crash on x86 and "works" because the return value is
> simply
> ignored, but it's definitely not portable and MAY crash on another
> architecture where it does make a difference. I don't know if it
> would
> matter on ARM/PPC/... but the old code at least implemented it
> correctly/portable. It's not really an issue but IMO a bad hack.
> Typecasting a function pointer to a function with a different
> signature
> is hardly ever good practice.
>
> - Thomas
>
> Dmitry Chapyshev wrote:
>> On Fri, 17 Jul 2009 23:03:18 +0400, Thomas Bluemel <thomas at reactsoft.com
>> >
>
>> wrote:
>>
>>> This explains why we are using a trampoline function and not just
>>> typecast there... Is there a reason you changed this?
>>>
>>> - Thomas
>>>
>>> dchapyshev at svn.reactos.org wrote:
>>>> - /* NOTE: Don't use Function directly since the callback
>>>> signature
>>>> - differs. This might cause problems on certain
>>>> platforms... */
>>>> - Status = RtlQueueWorkItem(InternalWorkItemTrampoline,
>>>> - WorkItemContext,
>>> _______________________________________________
>>> Ros-dev mailing list
>>> Ros-dev at reactos.org
>>> http://www.reactos.org/mailman/listinfo/ros-dev
>>
>>
>>
>> Wine and Windows do so. Why we should do in another way? Other
>> reasons are
>
>> necessary?
>>
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
Best regards,
Alex Ionescu
More information about the Ros-dev
mailing list