Author: jfclere Date: Sat Apr 23 07:36:26 2005 New Revision: 164389 URL: http://svn.apache.org/viewcvs?rev=164389&view=rev Log: Get -wait option working correctly.
Modified: jakarta/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c Modified: jakarta/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c?rev=164389&r1=164388&r2=164389&view=diff ============================================================================== --- jakarta/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c (original) +++ jakarta/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c Sat Apr 23 07:36:26 2005 @@ -269,7 +269,7 @@ buff[i] = '\0'; pid = atoi(buff); if (kill(pid, 0)==0) { - log_error("Still running according to PID file %s, PID is %d",args->pidf,pidn); + log_error("Still running according to PID file %s, PID is %d",args->pidf,pid); lockf(fd,F_ULOCK,0); close(fd); return(122); @@ -322,6 +322,10 @@ /* * Check temporatory file created by controller * /tmp/pid.jsvc_up + * Notes: + * we fork several times + * 1 - to be a daemon before the setsid(), the son is the controler process. + * 2 - to start the JVM in the son process. (whose pid is stored in pidfile). */ static int check_tmp_file(arg_data *args) { int pid; @@ -364,12 +368,18 @@ bool havejvm=false; int fd; char buff[80]; - int i; + int i, status; log_debug("wait_child %d", pid); while (count>0) { + sleep(1); /* check if the controler is still running */ - if (kill(pid, 0)!=0) - return(1); + if (waitpid(pid,&status,WNOHANG)==pid) { + if (WIFEXITED(status)) + return(WEXITSTATUS(status)); + else + return(1); + } + /* check if the pid file process exists */ fd = open(args->pidf, O_RDONLY); if (fd<0 && havejvm) @@ -384,14 +394,22 @@ if (kill(i, 0)==0) { /* the JVM process has started */ havejvm=true; - if (check_tmp_file(args)==0) + if (check_tmp_file(args)==0) { + /* the JVM is started */ + if (waitpid(pid,&status,WNOHANG)==pid) { + if (WIFEXITED(status)) + return(WEXITSTATUS(status)); + else + return(1); + } return(0); /* ready JVM started */ + } } } - sleep(6); + sleep(5); count--; } - return(1); + return(1); /* It takes more than a minute to start, something must be wrong */ } /* --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]