commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Konstantin Kolinko (JIRA)" <>
Subject [jira] Commented: (DAEMON-195) "net stop serviceName" prints "Error 109: The pipe has been ended." Stopping via Windows Control Panel hangs.
Date Tue, 01 Feb 2011 17:42:29 GMT


Konstantin Kolinko commented on DAEMON-195:

Looking at the logs (see Description above) and at the source code, it looks that
  apxJavaWait(hWorker, INFINITE, FALSE);
call in prunsrv.c line 873 (in serviceStop(LPVOID)) never returns and the prunsrv process
just disappears.

1. There is no "Java Worker thread finished %s:%s with status=%d" message from the worker
thread ({{javajni.c method __apxJavaWorkerThread(LPVOID)}})
2. There is no "Java jni stop worker finished." message from thread executing serviceStop()
call ({{prunsrv.c method serviceStop(LPVOID))}}

Tomcat 7.0.6 and recent versions of Tomcat 6.0 (6.0.30+) when being run as a service terminate
themselves by calling System.exit(0).

The lines are, in {{org.apache.catalina.startup.Catalina#stopServer(String[])}}
            // Server object already present. Must be running as a service
            // Shutdown hook will take care of clean-up

I see that prunsrv has special support for calling System.exit as the stop method. Thus here
is a *workaround*:

1. Open the _Configure Tomcat_ dialog (the prunmgr application, aka tomcat7w.exe, aka tomcat6w.exe)
2. Configure the following settings on the *Shutdown* tab:

*Class*: {{java.lang.System}}
*Method*: {{exit}}
*Arguments*: _remove any text from this field_

With the above configuration the service stops successfully.

_PS_: some thoughts when investigating this (may be not so useful):
1. In prunsrv.c in method serviceStop(LPVOID) there is the following call: {{_onexit(onExitHook);}}
 This is executed only if the class name is "java/lang/System". I wonder whether it were better
if the hook was installed unconditionally. Its job is to report {{reportServiceStatus(SERVICE_STOPPED,
NO_ERROR, 0);}} back to the service management. Maybe that is not enough, because there are
also other places where "java/lang/System" processing differs from executing any other Java

2. If java.lang.System.exit() resulted in a call to ExitProcess (I do not actually know. Just
speculating), I would expect from [1] that the thread calling this method was continuing to
run. In our case the call was done by the worker thread ({{__apxJavaWorkerThread(LPVOID)}}
method). But, as there was no "Java Worker thread finished %s:%s with status=%d" message,
it means that the thread was abruptly terminated, just like any other.


> "net stop serviceName" prints "Error 109: The pipe has been ended." Stopping via Windows
Control Panel hangs.
> -------------------------------------------------------------------------------------------------------------
>                 Key: DAEMON-195
>                 URL:
>             Project: Commons Daemon
>          Issue Type: Bug
>          Components: Procrun
>    Affects Versions: 1.0.5
>         Environment: WinXP SP3 32-bit
>            Reporter: Konstantin Kolinko
>            Priority: Minor
> This issue was reported for Tomcat 7.0.6:
> To reproduce:
> 1. Install apache-tomcat-7.0.6.exe   I am installing with default options. I am not starting
Tomcat after installation.
> 2. Launch the command prompt window.
> 3. The following command succeeds:
> net stop Tomcat7
> It prints two localized messages that can be translated as
> The "Apache Tomcat 7" service is being started.
> The "Apache Tomcat 7" service started successfully.p
> 4. The following command apparently fails, but actually it succeeds:
> net stop Tomcat7
> It prints two localized messages that are, citing from BZ 50673:
> System error 109.
> The pipe has been ended.
> Note that "The service being stopped" message is not printed.
> 5. Repeating the command shows that the service has been stopped:
> net stop Tomcat7
> The "Apache Tomcat 7" service has not been started.
> The commons-daemon.<date>.log contains only the following four lines when stopping
the service with Debug logging enabled:
> [2011-01-27 20:18:59] [info]  (          :0   ) Stopping service...
> [2011-01-27 20:18:59] [debug] ( javajni.c:844 ) argv[0] = stop
> [2011-01-27 20:18:59] [debug] ( javajni.c:891 ) Java Worker thread started org/apache/catalina/startup/Bootstrap:main
> [2011-01-27 20:19:00] [debug] ( prunsrv.c:871 ) Waiting for java jni stop worker to finish...
> Stopping the service with Stop button in prunmgr app succeeds without any messages.
> Stopping the service from the Services list in the Control Panel quickly goes to 50%
of progress but then continues to wait forever, without any changes on the screen.

This message is automatically generated by JIRA.
For more information on JIRA, see:


View raw message