The following reply was made to PR mod_jserv/5755; it has been noted by GNATS.
From: Vladislav Malyshkin <[EMAIL PROTECTED]>
To: Ed Korthof <[EMAIL PROTECTED]>, [EMAIL PROTECTED]
Cc:
Subject: Re: mod_jserv/5755: mod_jserv and httpd -HUP restarting problem
Date: Tue, 15 Feb 2000 12:01:39 -0500
Hi Ed,
There is another strange thing with jserw wrapper,
how it apache sets signal handlers.
For debugging I added printing to int wrapper_destroy(wrapper_config *cfg)
jserv_error(JSERV_LOG_INFO,wrapper_data->config,
"WRAPPER_DESTROY CALLED WRAPPER PID=%d",
wrapper_pid);
I start httpd, httpd starts wrapper,
and I do
kill -TERM wrapper_process_number
I see messages in log that everything is processed fine.
[Tue Feb 15 11:33:15 2000] [info] JServ: WRAPPER_DESTROY CALLED WRAPPER
PID=19316
[Tue Feb 15 11:33:15 2000] [info] JServ: Apache Module was cleaned-up
[Tue Feb 15 11:33:15 2000] [notice] Digest: generating secret for digest
authentication ...
[Tue Feb 15 11:33:15 2000] [notice] Digest: done
[Tue Feb 15 11:33:15 2000] [info] created shared memory segment #11393
[Tue Feb 15 11:33:15 2000] [notice] Apache/1.3.11 (Unix) ApacheJServ/1.1
configured -- resuming normal operations
[Tue Feb 15 11:33:15 2000] [info] Server built: Feb 15 2000 11:13:18
[Tue Feb 15 11:33:18 2000] [info] JServ: wrapper classpath:
/home/apache/installation/libexec/ApacheJServ.jar:/home/apache/sources/JSDK2.0/lib/jsdk.jar:/home/apache/sources/mm.mysql.jdbc/mysql_uncomp.jar
[Tue Feb 15 11:33:18 2000] [info] JServ: wrapper: Java VM spawned (PID=19324,
PPID=19318)
[Tue Feb 15 11:33:28 2000] [info] JServ: wrapper: watching processes
(PID=19318,PPID=19317,JVM PID=19324)
here I do kill -TERM 19318 command
[Tue Feb 15 11:34:03 2000] [info] JServ: WRAPPER SHUTDOWN CALLED PID=19318
SIGNAL=15
[Tue Feb 15 11:34:03 2000] [info] JServ: Wrapper: Shutting down JServ
(PID=19318) (sig 15) JVM pid=19324
[Tue Feb 15 11:34:03 2000] [info] JServ: wrapper: Terminating JServ
(PID=19318, VM PID=19324)
[Tue Feb 15 11:34:03 2000] [info] JServ: ajp12: sending shutdown signal
Then I do same thing, but with -HUP process kill -HUP wrapper_process_number
[Tue Feb 15 11:36:15 2000] [info] JServ: WRAPPER_DESTROY CALLED WRAPPER
PID=19366
[Tue Feb 15 11:36:15 2000] [info] JServ: Apache Module was cleaned-up
[Tue Feb 15 11:36:15 2000] [notice] Digest: generating secret for digest
authentication ...
[Tue Feb 15 11:36:15 2000] [notice] Digest: done
[Tue Feb 15 11:36:15 2000] [info] created shared memory segment #11521
[Tue Feb 15 11:36:15 2000] [notice] Apache/1.3.11 (Unix) ApacheJServ/1.1
configured -- resuming normal operations
[Tue Feb 15 11:36:15 2000] [info] Server built: Feb 15 2000 11:13:18
[Tue Feb 15 11:36:18 2000] [info] JServ: wrapper classpath:
/home/apache/installation/libexec/ApacheJServ.jar:/home/apache/sources/JSDK2.0/lib/jsdk.jar:/home/apache/sources/mm.mysql.jdbc/mysql_uncomp.jar
[Tue Feb 15 11:36:18 2000] [info] JServ: wrapper: Java VM spawned (PID=19374,
PPID=19368)
[Tue Feb 15 11:36:28 2000] [info] JServ: wrapper: watching processes
(PID=19368,PPID=19367,JVM PID=19374)
kill -HUP 19368
and nothing in log. The process is just killed
It should print at least
"WRAPPER_DESTROY CALLED WRAPPER PID=%d",
which I added to wrapper_destroy.
But as you wrote to me before -HUP signal is handled by apache.
wrapper_detroy is called on process cleanup?
Is everything fine with ap_register_cleanup in mod_jserv?
May be I am wrong, but what I see the -HUP signal
is not handled and cleanup routines of jserv_ module are never called.
(at least with wrapper_destroy this is definitely the case.
It should be called by wrapper_cleanup)
Vladislav
Ed Korthof wrote:
> On Tue, 15 Feb 2000, Vladislav Malyshkin wrote:
>
> > > Apache sets up its own signal handler for SIGHUP -- and I'm a little
> > > hesitant to mess with that. When that handler recieved a SIGHUP, it
> > > starts the standard Apache cleanup -- I don't think this cleanup is
> > > needed
> > > or even appropriate w/in the wrapper process (which isn't like a normal
> > > httpd child)
> >
> > I think that wrapper needs this cleanup function and first thing which
> > wrapper must do
> > on cleanup is to stop JVM. Otherwise you may easily get a runaway JVM
> > which will create a serious problem:
> > the only way to start new apache process will be to kill runaway JVM
> > manually
> > and then start apache.
> > So I think instead of adding SIGHUP handler it will be better to implement
> > this cleanup function which will call
> > wrapper_shutdown(0);
>
> grep for 'ap_register_cleanup' within the c source files (particularly
> mod_jserv.c). Unfortunately, you'll have to follow several layers of
> indirection, but this eventually leads to a call to wrapper_destroy, which
> (under Unix) issues a SIGTERM to the watcher process.
>
> Hmm. Actually, looking at that again -- I guess you're right that the
> wrapper process should never recieve SIGHUP -- which is exactly what
> happens when you use killall. It gets SIGTERM through the cleanup process
> in the parent httpd ... so my diagrams were bogus.
>
> But I'll stand by my statement that using killall is simply broken, and
> not (imnsho) worth working around.
>
> good luck --
>
> Ed
> --
> See you at ApacheCon 2000 in Orlanda, Florida, March 8-10, 2000.
> http://www.Apachecon.com/