You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bi...@apache.org on 2004/06/17 04:23:10 UTC

cvs commit: jakarta-commons/daemon/src/native/nt/procrun/apps/prunsrv prunsrv.c

billbarker    2004/06/16 19:23:10

  Modified:    daemon/src/native/nt/procrun/apps/prunsrv prunsrv.c
  Log:
  Wait to give the worker a chance to die normally.
  
  Also, added support for --StopMode=java (or, at least as well as it is supported).
  
  Fix for Bug #29521
  Reported By: Johan Philippe johan.philippe@skynet.be
  
  Revision  Changes    Path
  1.3       +62 -8     jakarta-commons/daemon/src/native/nt/procrun/apps/prunsrv/prunsrv.c
  
  Index: prunsrv.c
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/daemon/src/native/nt/procrun/apps/prunsrv/prunsrv.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- prunsrv.c	8 Apr 2004 07:41:33 -0000	1.2
  +++ prunsrv.c	17 Jun 2004 02:23:10 -0000	1.3
  @@ -695,7 +695,7 @@
       APXHANDLE hJava = NULL;
       DWORD  rv = 0;
   
  -    apxLogWrite(APXLOG_MARK_INFO "Stopoping service...");
  +    apxLogWrite(APXLOG_MARK_INFO "Stopping service...");
   
       if (IS_INVALID_HANDLE(gWorker)) {
           apxLogWrite(APXLOG_MARK_INFO "Worker is not defined");
  @@ -724,10 +724,59 @@
               rv = 3;
           }
           else {
  -            apxLogWrite(APXLOG_MARK_DEBUG "Waitning java stop worker to finish...");
  +            apxLogWrite(APXLOG_MARK_DEBUG "Waiting for java stop worker to finish...");
               apxJavaWait(hJava, INFINITE, FALSE);        
               apxLogWrite(APXLOG_MARK_DEBUG "Java stop worker finished.");
           }
  +    } else {
  +        DWORD nArgs;
  +        LPWSTR *pArgs;
  +        /* Redirect process */
  +        hJava = apxCreateProcessW(gPool, 
  +                                    0,
  +                                    child_callback,
  +                                    SO_USER,
  +                                    SO_PASSWORD,
  +                                    FALSE);
  +        if (IS_INVALID_HANDLE(hJava)) {
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed creating process");
  +            return 1;
  +        }
  +        if (!apxProcessSetExecutableW(hJava, SO_STARTIMAGE)) {
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed setting process executable %S",
  +                        SO_STARTIMAGE);
  +            rv = 2;
  +            goto cleanup;
  +        }
  +        /* Assemble the command line */
  +        nArgs = apxMultiSzToArrayW(gPool, SO_STARTPARAMS, &pArgs);
  +        /* Pass the argv to child process */
  +        if (!apxProcessSetCommandArgsW(hJava, SO_STARTIMAGE,
  +                                       nArgs, pArgs)) {
  +            rv = 3;
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed setting process arguments (argc=%d)",
  +                        nArgs);
  +            goto cleanup;
  +        }
  +        /* Set the working path */
  +        if (!apxProcessSetWorkingPathW(hJava, SO_STARTPATH)) {
  +            rv = 4;
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed setting process working path to %S",
  +                        SO_STARTPATH);
  +            goto cleanup;
  +        }
  +        /* Finally execute the child process 
  +         */
  +        if (!apxProcessExecute(hJava)) {
  +            rv = 5;
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed executing process");
  +            goto cleanup;
  +        } else {
  +            apxLogWrite(APXLOG_MARK_DEBUG "Waiting java stop worker to finish...");
  +            apxHandleWait(hJava, INFINITE, FALSE);        
  +            apxLogWrite(APXLOG_MARK_DEBUG "Java stop worker finished.");
  +        }
  +
       }
   cleanup:
       /* Close Java JNI handle
  @@ -737,9 +786,14 @@
        */
       if (!IS_INVALID_HANDLE(hJava))
           apxCloseHandle(hJava);
  -    /* Simply send the WM_CLOSE to the worker */
  -    apxLogWrite(APXLOG_MARK_DEBUG "Sending WM_CLOSE to worker");
  -    apxHandleSendMessage(gWorker, WM_CLOSE, 0, 0);
  +    if(rv) {
  +      /* Simply send the WM_CLOSE to the worker */
  +      apxLogWrite(APXLOG_MARK_DEBUG "Sending WM_CLOSE to worker");
  +      apxHandleSendMessage(gWorker, WM_CLOSE, 0, 0);
  +    } else {
  +      /* Wait to give it a chance to die naturally, then kill it. */
  +      apxHandleWait(gWorker, 600000, TRUE);
  +    }
       apxLogWrite(APXLOG_MARK_INFO "Service stopped.");
   
       return rv;
  @@ -797,7 +851,7 @@
               return 1;
           }
           if (!apxProcessSetExecutableW(gWorker, SO_STARTIMAGE)) {
  -            apxLogWrite(APXLOG_MARK_ERROR "Failed seting process executable %S",
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed setting process executable %S",
                           SO_STARTIMAGE);
               rv = 2;
               goto cleanup;
  @@ -808,14 +862,14 @@
           if (!apxProcessSetCommandArgsW(gWorker, SO_STARTIMAGE,
                                          nArgs, pArgs)) {
               rv = 3;
  -            apxLogWrite(APXLOG_MARK_ERROR "Failed seting process arguments (argc=%d)",
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed setting process arguments (argc=%d)",
                           nArgs);
               goto cleanup;
           }
           /* Set the working path */
           if (!apxProcessSetWorkingPathW(gWorker, SO_STARTPATH)) {
               rv = 4;
  -            apxLogWrite(APXLOG_MARK_ERROR "Failed seting process working path to %S",
  +            apxLogWrite(APXLOG_MARK_ERROR "Failed setting process working path to %S",
                           SO_STARTPATH);
               goto cleanup;
           }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org