From 1467b280268d6e57979988f2495e9c9cb84de3c9 Mon Sep 17 00:00:00 2001 From: Nikolay Vashchenko Date: Wed, 28 Jun 2017 19:54:19 +0300 Subject: [PATCH] Mri gli pipe bug (#1347) * Handling race condition, caused by MRI global interpretation lock on threads, that make system calls. * improving exception message handling * adding comment --- lib/puma/server.rb | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/lib/puma/server.rb b/lib/puma/server.rb index 8516463988..7ef517c1ba 100644 --- a/lib/puma/server.rb +++ b/lib/puma/server.rb @@ -892,35 +892,34 @@ def graceful_shutdown end end - # Stops the acceptor thread and then causes the worker threads to finish - # off the request queue before finally exiting. - # - def stop(sync=false) + def notify_safely(message) begin - @notify << STOP_COMMAND + @notify << message rescue IOError # The server, in another thread, is shutting down + rescue RuntimeError => e + # The server, in another thread, has been shut down during the system call + # https://github.com/puma/puma/pull/1206 + raise e unless e.message.include?('IOError') end + end + private :notify_safely + # Stops the acceptor thread and then causes the worker threads to finish + # off the request queue before finally exiting. + + def stop(sync=false) + notify_safely(STOP_COMMAND) @thread.join if @thread && sync end def halt(sync=false) - begin - @notify << HALT_COMMAND - rescue IOError - # The server, in another thread, is shutting down - end - + notify_safely(HALT_COMMAND) @thread.join if @thread && sync end def begin_restart - begin - @notify << RESTART_COMMAND - rescue IOError - # The server, in another thread, is shutting down - end + notify_safely(RESTART_COMMAND) end def fast_write(io, str)