From: Ben Chalmers Date: Wed, 9 Nov 2016 11:58:18 +0000 (+0000) Subject: Ensure session stays locked... X-Git-Tag: 8.2.0-rc1~4 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d29a424db3016891a45873058cd0ccf98f896eab;p=pvdrivers%2Fwin%2Fxeniface.git Ensure session stays locked... ...until the reference to WatchThread is stored in it. This prevents us trying to dispose of an uniintialised WatchThread if a session is removed (by the driver being removed) while the session is still being created Signed-off-by: Ben Chalmers --- diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c index b3e4c55..65d31c9 100644 --- a/src/xeniface/wmi.c +++ b/src/xeniface/wmi.c @@ -1160,7 +1160,6 @@ CreateNewSession(XENIFACE_FDO *fdoData, session->suspended=TRUE; } fdoData->Sessions++; - UnlockSessions(fdoData); InitializeObjectAttributes(&oa, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); status = PsCreateSystemThread(&hthread, THREAD_ALL_ACCESS, &oa, NULL, NULL, WatchCallbackThread, session); @@ -1170,6 +1169,7 @@ CreateNewSession(XENIFACE_FDO *fdoData, return status; } ObReferenceObjectByHandle(hthread, THREAD_ALL_ACCESS, NULL, KernelMode, &session->WatchThread, NULL); + UnlockSessions(fdoData); RtlFreeAnsiString(&ansi); return STATUS_SUCCESS; }