[PATCH] [Server]: when getting the status of an exception, ensure the debugger continue information is not erased when releasing objects
Eric Pouech
eric.pouech at orange.fr
Mon Nov 30 14:14:28 CST 2009
Alexandre Julliard a écrit :
> Eric Pouech <eric.pouech at orange.fr> writes:
>
>
>> diff --git a/server/debugger.c b/server/debugger.c
>> index 795a24a..4458a3b 100644
>> --- a/server/debugger.c
>> +++ b/server/debugger.c
>> @@ -677,6 +677,8 @@ DECL_HANDLER(get_exception_status)
>> if ((event = (struct debug_event *)get_handle_obj( current->process, req->handle,
>> 0, &debug_event_ops )))
>> {
>> + NTSTATUS status = STATUS_PENDING;
>> +
>> close_handle( current->process, req->handle );
>> if (event->state == EVENT_CONTINUED)
>> {
>> @@ -686,10 +688,10 @@ DECL_HANDLER(get_exception_status)
>> set_reply_data( &event->context, size );
>> current->context = NULL;
>> }
>> - set_error( event->status );
>> + status = event->status;
>> }
>> - else set_error( STATUS_PENDING );
>> release_object( event );
>> + set_error( status );
>>
>
> Releasing an object should never change the error code. Where do you see
> that happening?
>
>
what happens is something like:
process P being debugged by D
- while processing a debug event (fetched in P, P calls
ntdll at send_debug_event, and waits for the debugger to process the event)
- D gets the event, and the user asks for quit in D. D sends back to
wineserver a DBG_CONTINUE response to the event
- D then dies before P runs again
- P then calls server at get_exception_status, where when getting the
status from the debugger, (which should be DBG_CONTINUE, and it is
before releasing the debug event). but while releasing the debug event,
someone clears the status, and we get 0 from the get_exception_status event
I didn't check in details which clear_error() is to blame in server, but
close_thread_desktop (from a cursory look) could be to blame
A+
--
Eric Pouech
"The problem with designing something completely foolproof is to underestimate the ingenuity of a complete idiot." (Douglas Adams)
More information about the wine-devel
mailing list