about summary refs log tree commit homepage
path: root/lib/rainbows/xepoll_thread_spawn
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2012-06-30 19:57:08 +0000
committerEric Wong <normalperson@yhbt.net>2012-07-01 01:14:46 +0000
commit36ce10c49ce7aa0df9d47f5a5f870c23c1891258 (patch)
treee294b2af13568f21172b2286d7e0af5372bcbbcf /lib/rainbows/xepoll_thread_spawn
parenta5b987619f4b793203f6a50e424fe98c5b0794ba (diff)
downloadrainbows-36ce10c49ce7aa0df9d47f5a5f870c23c1891258.tar.gz
Triggering Errno::EBADF is tricky in multithreaded situations
due to possible race conditions and yet-to-be discovered bugs.
shutdown(2) is also safe against apps the fork() internally but
do not execve(2) nor set FD_CLOEXEC.

n.b. calling fork() after pthreads are spawned may not be safe
on all platforms w.r.t. malloc, but /is/ the case for glibc on
GNU/Linux.

Follow-up-to: commit a5b987619f4b793203f6a50e424fe98c5b0794ba
Diffstat (limited to 'lib/rainbows/xepoll_thread_spawn')
-rw-r--r--lib/rainbows/xepoll_thread_spawn/client.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/rainbows/xepoll_thread_spawn/client.rb b/lib/rainbows/xepoll_thread_spawn/client.rb
index 1d3a280..6c07b92 100644
--- a/lib/rainbows/xepoll_thread_spawn/client.rb
+++ b/lib/rainbows/xepoll_thread_spawn/client.rb
@@ -33,7 +33,7 @@ module Rainbows::XEpollThreadSpawn::Client
   Rainbows.at_quit do
     clients = nil
     LOCK.synchronize { clients = KATO.keys; KATO.clear }
-    clients.each { |io| io.closed? or io.close }
+    clients.each { |io| io.closed? or io.shutdown }
   end
   @@last_expire = Time.now