Details
Description
Due to the fact that in the function service_ctrl_handler, from http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c, the timeout for the case SERVICE_STOP_TIMEOUT is hardcoded to 3 seconds ( 3 * 1000 ms), which in the case of servers with big and multiple deployed application, the actual stopping time of the server might take for sure longer that 3 seconds, and in this case the Windows service will crash with an exception, because it's unable to wait enough so that the server is stopped.
The resolution is rather simple, just use SO_STOPTIMEOUT * 1000 if SO_STOPTIMEOUT > 0. This way the user that creates the service with procrun/prunsrv can configure the timeout with --StopTimeout=xxx seconds.