Proper finalization in StartServiceW.

diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 5e1c79b..80af1f6 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -876,6 +876,8 @@
     HANDLE data,wait;
     PROCESS_INFORMATION procinfo;
     STARTUPINFOW startupinfo;
+    BOOL ret = FALSE;
+
     TRACE("(%p,%ld,%p)\n",hService,dwNumServiceArgs,
           lpServiceArgVectors);
 
@@ -934,19 +936,27 @@
     if(r == FALSE)
     {
         ERR("Couldn't start process\n");
-        /* ReleaseSemaphore(data, 1, NULL);
-        return FALSE; */
+        goto done;
     }
+    CloseHandle( procinfo.hThread );
 
     /* docs for StartServiceCtrlDispatcher say this should be 30 sec */
     r = WaitForSingleObject(wait,30000);
+    if( WAIT_FAILED == r )
+    {
+        CloseHandle( procinfo.hProcess );
+        goto done;
+    }
 
+    /* allright */
+    CloseHandle( procinfo.hProcess );
+    ret = TRUE;
+
+done:
+    CloseHandle( wait );
     ReleaseSemaphore(data, 1, NULL);
-
-    if( r == WAIT_FAILED)
-        return FALSE;
-
-    return TRUE;
+    CloseHandle( data );
+    return ret;
 }
 
 /******************************************************************************