From: Rémi Bernon rbernon@codeweavers.com
--- server/debugger.c | 3 ++- server/event.c | 11 +++++++++++ server/object.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/server/debugger.c b/server/debugger.c index 31ce91a36a8..094614a6a6a 100644 --- a/server/debugger.c +++ b/server/debugger.c @@ -451,7 +451,8 @@ static struct debug_event *alloc_debug_event( struct thread *thread, int code, c fill_debug_event[code - DbgCreateThreadStateChange]( event, arg ); event->data.code = code;
- if (!(event->sync = create_internal_sync( 1, 0 ))) + /* create a server-side sync here, as send_debug_event still uses server_select to pass contexts around */ + if (!(event->sync = create_server_internal_sync( 1, 0 ))) { release_object( event ); return NULL; diff --git a/server/event.c b/server/event.c index cb9fe49460e..3bbf92f18e5 100644 --- a/server/event.c +++ b/server/event.c @@ -98,6 +98,17 @@ static struct event_sync *create_event_sync( int manual, int signaled ) return event; }
+struct event_sync *create_server_internal_sync( int manual, int signaled ) +{ + struct event_sync *event; + + if (!(event = alloc_object( &event_sync_ops ))) return NULL; + event->manual = manual; + event->signaled = signaled; + + return event; +} + struct event_sync *create_internal_sync( int manual, int signaled ) { return create_event_sync( manual, signaled ); diff --git a/server/object.h b/server/object.h index 0a7b5bf7c84..d604f70d100 100644 --- a/server/object.h +++ b/server/object.h @@ -222,6 +222,7 @@ struct event_sync; struct event; struct keyed_event;
+extern struct event_sync *create_server_internal_sync( int manual, int signaled ); extern struct event_sync *create_internal_sync( int manual, int signaled ); extern void signal_sync( struct event_sync *sync ); extern void reset_sync( struct event_sync *sync );