Forum: Ruby Signals and Restarting Syscalls

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9eb71600b418cfc18f496b5840ca7e1a?d=identicon&s=25 Curt Sampson (Guest)
on 2007-01-07 16:03
(Received via mailing list)
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
This topic is locked and can not be replied to.