summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2008-09-26 07:59:47 -0700
committerAllan Saddi <allan@saddi.com>2008-09-26 07:59:47 -0700
commit19b0128e11df9f08d287ea44eb4fde4cbb4521e1 (patch)
treec20794301907d5970c4dfc83da2d77a523ee7f4c
parent10493143c392bbab43bca56bb13942230e298e9d (diff)
downloadflup-19b0128e11df9f08d287ea44eb4fde4cbb4521e1.tar.gz
Re-seed random module after each fork.
-rw-r--r--flup/server/preforkserver.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/flup/server/preforkserver.py b/flup/server/preforkserver.py
index 449284c..128293b 100644
--- a/flup/server/preforkserver.py
+++ b/flup/server/preforkserver.py
@@ -33,6 +33,8 @@ import socket
import select
import errno
import signal
+import random
+import time
try:
import fcntl
@@ -310,7 +312,19 @@ class PreforkServer(object):
def _child(self, sock, parent):
"""Main loop for children."""
requestCount = 0
-
+
+ # Re-seed random module
+ preseed = ''
+ # urandom only exists in Python >= 2.4
+ if hasattr(os, 'urandom'):
+ try:
+ preseed = os.urandom(16)
+ except NotImplementedError:
+ pass
+ # Have doubts about this. random.seed will just hash the string
+ random.seed('%s%s%s' % (preseed, os.getpid(), time.time()))
+ del preseed
+
while True:
# Wait for any activity on the main socket or parent socket.
r, w, e = select.select([sock, parent], [], [])