about summary refs log tree commit homepage
path: root/lib/unicorn/worker.rb
diff options
authorEric Wong <e@80x24.org>2019-07-03 23:34:31 +0000
committerEric Wong <e@80x24.org>2019-07-03 23:34:31 +0000
commit5e3d05997769dd270123b9c2479938704de078de (patch)
tree8692b46b89a0e1481703c6a1c6b0c8b5b8182f57 /lib/unicorn/worker.rb
parent2ea6af4ed1ce5f3a34bdfd32b9e54a67fabcff26 (diff)
It's racy otherwise when starting simultaneous instanced units.
Without specifying NonBlocking=true, systemd will clear the
O_NONBLOCK flag every time it starts a new service instance.
There's a small window where systemd can clear O_NONBLOCK
immediately after it's set by Ruby (or kgio):

unicorn@1                  |systemd         |unicorn@2
F_SETFL, O_NONBLOCK|O_RDWR |                | (not running, yet)
                           |F_SETFL, O_RDWR |
                           |fork            |
			   | exec unicorn@2 |
accept4(...)    # blocks!  |                | (now started by systemd)
                           |                |F_SETFL,O_NONBLOCK|O_RDWR
                           |                |accept4(...) non-blocking
Diffstat (limited to 'lib/unicorn/worker.rb')
0 files changed, 0 insertions, 0 deletions