Signals and Restarting Syscalls

C

Curt Sampson

I'm using fcgi.rb ruby-fcgi (0.8.7, according to the tarfile name, 0.8.5
according to the comment in the source) and lighttpd. Unfortunately, lighttpd
can't seem to shut down the ruby FastCGI servers:

25457 1 lighttpd CALL kill(0x2095, SIGTERM)
25457 1 lighttpd RET kill 0
8341 1 ruby18 RET accept RESTART
8341 1 ruby18 PSIG SIGTERM caught handler=0xbbbabdfc mask=())
8341 1 ruby18 CALL setcontext(0xbfbe7df4)
8341 1 ruby18 RET setcontext JUSTRETURN
8341 1 ruby18 CALL accept(0,0xbfbe8190,0xbfbe818c)
25457 1 lighttpd CALL unlink(0x806e800)
25457 1 lighttpd NAMI "/u/cjs/co/dcity/instance.31041/sock/fastcgi-root-0"

It appears that the ruby interpreter, in ruby_signal() in signal.c, goes
and sets the SA_RESTART flag in the structure it passes to sigaction().
So, the accept syscall that it's sitting in won't be returned from until
the socket gets a connection, which is never going to happen because the
socket file is gone.

Anybody have any thoughts on what I can do about this silliness, short of
modifying the Ruby interpreter?

And why does Ruby do this, anyway?

cjs
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top