From 8b8eeb79df98f63829c528ef772bc86c780bfa69 Mon Sep 17 00:00:00 2001 From: lateralusX Date: Fri, 3 Sep 2021 11:54:00 +0200 Subject: [PATCH] Make sure EventPipe streaming thread won't write session->streaming_thread after session free. In case where ep_disable is called by a different thread (close IPC command) there was a race between streaming threads setting session->streaming_thread to NULL and IPC command triggering a call to disable_holding_lock and freeing session. Resetting the streaming_thread in streaming thread must happens before it signals its shutdown event to prevent the race. --- src/native/eventpipe/ep-session.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/native/eventpipe/ep-session.c b/src/native/eventpipe/ep-session.c index 60a5fe0cb2583..dc3a259cae28e 100644 --- a/src/native/eventpipe/ep-session.c +++ b/src/native/eventpipe/ep-session.c @@ -68,11 +68,10 @@ EP_RT_DEFINE_THREAD_FUNC (streaming_thread) ep_rt_thread_sleep (timeout_ns); } + session->streaming_thread = NULL; ep_rt_wait_event_set (&session->rt_thread_shutdown_event); EP_GCX_PREEMP_EXIT - session->streaming_thread = NULL; - if (!success) ep_disable ((EventPipeSessionID)session);