From 34f7dbd1b7e087bc8c86029496fd8daa7dc58441 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 26 Apr 2011 16:01:31 -0700 Subject: properly reseed OpenSSL::Random after forking Using the return value of Kernel#srand actually made the problem worse. Using the value of Kernel#rand is required to actually get a random value to seed the OpenSSL PRNG. Thanks to ghazel for the bug report! --- lib/unicorn/http_server.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/unicorn/http_server.rb b/lib/unicorn/http_server.rb index d70de45..3077b95 100644 --- a/lib/unicorn/http_server.rb +++ b/lib/unicorn/http_server.rb @@ -492,11 +492,11 @@ class Unicorn::HttpServer def after_fork_internal @ready_pipe.close if @ready_pipe self.ready_pipe = nil # XXX Rainbows! compat, change for Unicorn 4.x - tmp = srand # http://redmine.ruby-lang.org/issues/4338 + srand # http://redmine.ruby-lang.org/issues/4338 # The OpenSSL PRNG is seeded with only the pid, and apps with frequently # dying workers can recycle pids - OpenSSL::Random.seed(tmp.to_s) if defined?(OpenSSL::Random) + OpenSSL::Random.seed(rand.to_s) if defined?(OpenSSL::Random) end def spawn_missing_workers -- cgit v1.2.3-24-ge0c7