Author: mturk
Date: Fri Nov  4 13:03:52 2011
New Revision: 1197544

URL: http://svn.apache.org/viewvc?rev=1197544&view=rev
Log:
Check for serviceMain exit code

Modified:
    commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c

Modified: commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c
URL: 
http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c?rev=1197544&r1=1197543&r2=1197544&view=diff
==============================================================================
--- commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c 
(original)
+++ commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c Fri 
Nov  4 13:03:52 2011
@@ -220,6 +220,7 @@ static BOOL                  _java_shutd
 static APXHANDLE    gPool;
 static APXHANDLE    gWorker;
 static APX_STDWRAP  gStdwrap;           /* stdio/stderr redirection */
+static int          gExitval;
 
 static LPWSTR   _jni_jvmpath              = NULL;   /* Path to jvm dll */
 static LPSTR    _jni_jvmoptions           = NULL;   /* Path to jvm options */
@@ -1268,7 +1269,7 @@ BOOL WINAPI console_handler(DWORD dwCtrl
 /* Main service execution loop */
 void WINAPI serviceMain(DWORD argc, LPTSTR *argv)
 {
-    DWORD rc;
+    DWORD rc = 0;
     _service_status.dwServiceType      = SERVICE_WIN32_OWN_PROCESS;
     _service_status.dwCurrentState     = SERVICE_START_PENDING;
     _service_status.dwControlsAccepted = SERVICE_ACCEPT_STOP |
@@ -1428,13 +1429,12 @@ void WINAPI serviceMain(DWORD argc, LPTS
     reportServiceStatus(SERVICE_START_PENDING, NO_ERROR, 3000);
     if ((rc = serviceStart()) == 0) {
         /* Service is started */
-        DWORD rv;
         reportServiceStatus(SERVICE_RUNNING, NO_ERROR, 0);
         apxLogWrite(APXLOG_MARK_DEBUG "Waiting for worker to finish...");
         /* Set console handler to capture CTRL events */
         SetConsoleCtrlHandler((PHANDLER_ROUTINE)console_handler, TRUE);
 
-        rv = apxHandleWait(gWorker, INFINITE, FALSE);
+        apxHandleWait(gWorker, INFINITE, FALSE);
         apxLogWrite(APXLOG_MARK_DEBUG "Worker finished.");
     }
     else {
@@ -1468,7 +1468,8 @@ void WINAPI serviceMain(DWORD argc, LPTS
     return;
 cleanup:
     /* Cleanup */
-    reportServiceStatus(SERVICE_STOPPED, ERROR_SERVICE_SPECIFIC_ERROR, 0);
+    reportServiceStatus(SERVICE_STOPPED, ERROR_SERVICE_SPECIFIC_ERROR, rc);
+    gExitval = rc;
     return;
 }
 
@@ -1476,15 +1477,13 @@ cleanup:
 /* Run the service in the debug mode */
 BOOL docmdDebugService(LPAPXCMDLINE lpCmdline)
 {
-    BOOL rv = TRUE;
-
     _service_mode = FALSE;
     _service_name = lpCmdline->szApplication;
     apxLogWrite(APXLOG_MARK_INFO "Debugging '%S' Service...", _service_name);
     serviceMain(0, NULL);
-    apxLogWrite(APXLOG_MARK_INFO "Debug service finished.");
+    apxLogWrite(APXLOG_MARK_INFO "Debug service finished with exit code %d", 
gExitval);
     SAFE_CLOSE_HANDLE(gPidfileHandle);
-    return rv;
+    return gExitval == 0 ? TRUE : FALSE;
 }
 
 BOOL docmdRunService(LPAPXCMDLINE lpCmdline)


Reply via email to