]> xenbits.xensource.com Git - people/pauldu/xeniface.git/commitdiff
Ensure session stays locked...
authorBen Chalmers <ben.chalmers@citrix.com>
Wed, 9 Nov 2016 11:58:18 +0000 (11:58 +0000)
committerPaul Durrant <paul.durrant@citrix.com>
Wed, 9 Nov 2016 11:59:06 +0000 (11:59 +0000)
...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 <ben.chalmers@citrix.com>
src/xeniface/wmi.c

index b3e4c5506c128b430659dd7dc010ef4b1b3134fc..65d31c92c94c2e818ef821b5797a8d0c9623b009 100644 (file)
@@ -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;
 }