Forum: Ruby-core [ruby-trunk - Bug #7648][Open] GServer does not close cleanly from signal interrupt context

Posted by Joe L. (joe_l)
on 2013-01-03 02:39
(Received via mailing list)
Issue #7648 has been reported by jleo3 (Joe Leo).

----------------------------------------
Bug #7648: GServer does not close cleanly from signal interrupt context
https://bugs.ruby-lang.org/issues/7648

Author: jleo3 (Joe Leo)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0dev (2013-01-02 trunk 38676) [i686-linux]


SUMMARY:
When a signal interrupt is trapped, we can no longer call #close on 
GServer without it throwing a ThreadError.

STEPS TO REPEAT:
1) Run the following code:

    require 'gserver'

    server = GServer.new 8080
    server.start
    trap("SIGINT") { server.stop }
    gets # or any command that keeps the process running

2) Hit CTRL+C or whichever command will send the interrupt signal to 
this program.

WHAT I EXPECTED: In version 1.9.3, CTRL+C sends an interrupt signal and 
the program exits cleanly.

WHAT HAPPENED: When running the version from trunk the following stack 
trace is thrown.

^C/home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`synchronize': can't be called from trap context (ThreadError)
  from /home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`stop'
  from gserver_bug.rb:5:in `block in <main>'
  from gserver_bug.rb:6:in `call'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `<main>'

POSSIBLY RELEVANT: https://bugs.ruby-lang.org/issues/6416

NOTE: This was tried with AND without RVM with the same results.
Posted by Joe L. (joe_l)
on 2013-01-13 17:00
(Received via mailing list)
Issue #7648 has been updated by jleo3 (Joe Leo).


Confirming that this is still an issue on RC1:

ruby -v
ruby 2.0.0dev (2013-01-07 trunk 38733) [i686-linux]


/home/joe/lib/lib/ruby/2.0.0/gserver.rb:116:in `synchronize': can't be 
called from trap context (ThreadError)
  from /home/joe/lib/lib/ruby/2.0.0/gserver.rb:116:in `stop'
  from /home/joe/dev/bane/lib/bane/launcher.rb:19:in `block in stop'
  from /home/joe/dev/bane/lib/bane/launcher.rb:19:in `each'
  from /home/joe/dev/bane/lib/bane/launcher.rb:19:in `stop'
  from ./bin/bane:22:in `block in <main>'
  from /home/joe/lib/lib/ruby/2.0.0/gserver.rb:140:in `call'
  from /home/joe/lib/lib/ruby/2.0.0/gserver.rb:140:in `join'
  from /home/joe/lib/lib/ruby/2.0.0/gserver.rb:140:in `join'
  from /home/joe/dev/bane/lib/bane/launcher.rb:15:in `block in join'
  from /home/joe/dev/bane/lib/bane/launcher.rb:15:in `each'
  from /home/joe/dev/bane/lib/bane/launcher.rb:15:in `join'
  from ./bin/bane:23:in `<main>'


----------------------------------------
Bug #7648: GServer does not close cleanly from signal interrupt context
https://bugs.ruby-lang.org/issues/7648#change-35384

Author: jleo3 (Joe Leo)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0dev (2013-01-02 trunk 38676) [i686-linux]


SUMMARY:
When a signal interrupt is trapped, we can no longer call #close on 
GServer without it throwing a ThreadError.

STEPS TO REPEAT:
1) Run the following code:

    require 'gserver'

    server = GServer.new 8080
    server.start
    trap("SIGINT") { server.stop }
    gets # or any command that keeps the process running

2) Hit CTRL+C or whichever command will send the interrupt signal to 
this program.

WHAT I EXPECTED: In version 1.9.3, CTRL+C sends an interrupt signal and 
the program exits cleanly.

WHAT HAPPENED: When running the version from trunk the following stack 
trace is thrown.

^C/home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`synchronize': can't be called from trap context (ThreadError)
  from /home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`stop'
  from gserver_bug.rb:5:in `block in <main>'
  from gserver_bug.rb:6:in `call'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `<main>'

POSSIBLY RELEVANT: https://bugs.ruby-lang.org/issues/6416

NOTE: This was tried with AND without RVM with the same results.
Posted by ko1 (Koichi Sasada) (Guest)
on 2013-01-25 04:16
(Received via mailing list)
Issue #7648 has been updated by ko1 (Koichi Sasada).

Category set to lib
Target version set to 2.0.0

Who can check it?
----------------------------------------
Bug #7648: GServer does not close cleanly from signal interrupt context
https://bugs.ruby-lang.org/issues/7648#change-35602

Author: jleo3 (Joe Leo)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2013-01-02 trunk 38676) [i686-linux]


SUMMARY:
When a signal interrupt is trapped, we can no longer call #close on 
GServer without it throwing a ThreadError.

STEPS TO REPEAT:
1) Run the following code:

    require 'gserver'

    server = GServer.new 8080
    server.start
    trap("SIGINT") { server.stop }
    gets # or any command that keeps the process running

2) Hit CTRL+C or whichever command will send the interrupt signal to 
this program.

WHAT I EXPECTED: In version 1.9.3, CTRL+C sends an interrupt signal and 
the program exits cleanly.

WHAT HAPPENED: When running the version from trunk the following stack 
trace is thrown.

^C/home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`synchronize': can't be called from trap context (ThreadError)
  from /home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`stop'
  from gserver_bug.rb:5:in `block in <main>'
  from gserver_bug.rb:6:in `call'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `<main>'

POSSIBLY RELEVANT: https://bugs.ruby-lang.org/issues/6416

NOTE: This was tried with AND without RVM with the same results.
Posted by ko1 (Koichi Sasada) (Guest)
on 2013-02-17 05:51
(Received via mailing list)
Issue #7648 has been updated by ko1 (Koichi Sasada).

Assignee set to mame (Yusuke Endoh)

No response here.

----------------------------------------
Bug #7648: GServer does not close cleanly from signal interrupt context
https://bugs.ruby-lang.org/issues/7648#change-36361

Author: jleo3 (Joe Leo)
Status: Open
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category: lib
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2013-01-02 trunk 38676) [i686-linux]


SUMMARY:
When a signal interrupt is trapped, we can no longer call #close on 
GServer without it throwing a ThreadError.

STEPS TO REPEAT:
1) Run the following code:

    require 'gserver'

    server = GServer.new 8080
    server.start
    trap("SIGINT") { server.stop }
    gets # or any command that keeps the process running

2) Hit CTRL+C or whichever command will send the interrupt signal to 
this program.

WHAT I EXPECTED: In version 1.9.3, CTRL+C sends an interrupt signal and 
the program exits cleanly.

WHAT HAPPENED: When running the version from trunk the following stack 
trace is thrown.

^C/home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`synchronize': can't be called from trap context (ThreadError)
  from /home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`stop'
  from gserver_bug.rb:5:in `block in <main>'
  from gserver_bug.rb:6:in `call'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `<main>'

POSSIBLY RELEVANT: https://bugs.ruby-lang.org/issues/6416

NOTE: This was tried with AND without RVM with the same results.
Posted by mame (Yusuke Endoh) (Guest)
on 2013-02-17 06:49
(Received via mailing list)
Issue #7648 has been updated by mame (Yusuke Endoh).

Target version changed from 2.0.0 to next minor


----------------------------------------
Bug #7648: GServer does not close cleanly from signal interrupt context
https://bugs.ruby-lang.org/issues/7648#change-36390

Author: jleo3 (Joe Leo)
Status: Open
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category: lib
Target version: next minor
ruby -v: ruby 2.0.0dev (2013-01-02 trunk 38676) [i686-linux]


SUMMARY:
When a signal interrupt is trapped, we can no longer call #close on 
GServer without it throwing a ThreadError.

STEPS TO REPEAT:
1) Run the following code:

    require 'gserver'

    server = GServer.new 8080
    server.start
    trap("SIGINT") { server.stop }
    gets # or any command that keeps the process running

2) Hit CTRL+C or whichever command will send the interrupt signal to 
this program.

WHAT I EXPECTED: In version 1.9.3, CTRL+C sends an interrupt signal and 
the program exits cleanly.

WHAT HAPPENED: When running the version from trunk the following stack 
trace is thrown.

^C/home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`synchronize': can't be called from trap context (ThreadError)
  from /home/joe/.rvm/rubies/ruby-head/lib/ruby/2.0.0/gserver.rb:116:in 
`stop'
  from gserver_bug.rb:5:in `block in <main>'
  from gserver_bug.rb:6:in `call'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `gets'
  from gserver_bug.rb:6:in `<main>'

POSSIBLY RELEVANT: https://bugs.ruby-lang.org/issues/6416

NOTE: This was tried with AND without RVM with the same results.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.