about summary refs log tree commit diff
path: root/src/libmain/shared.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-12-11T10·49+0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-12-11T10·49+0100
commit772778c0eced8f8d63bfe6b1e9801ad6aada65bf (patch)
treeb93190ac1e556060923024d05cf79cfbf33a97f8 /src/libmain/shared.cc
parente087bfef5f36f309b1c8d01bfe297e4cf4decb34 (diff)
On SQLITE_BUSY, wait a random amount of time
If all contending processes wait a fixed amount of time (100 ms),
there is a good probability that they'll just collide again.
Diffstat (limited to 'src/libmain/shared.cc')
-rw-r--r--src/libmain/shared.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index ead3fc017ae2..e869ef0379ad 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -10,6 +10,7 @@
 #include <cctype>
 #include <exception>
 
+#include <sys/time.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
@@ -135,6 +136,11 @@ static void initAndRun(int argc, char * * argv)
        everybody. */
     umask(0022);
 
+    /* Initialise the PRNG. */
+    struct timeval tv;
+    gettimeofday(&tv, 0);
+    srandom(tv.tv_usec);
+
     /* Process the NIX_LOG_TYPE environment variable. */
     string lt = getEnv("NIX_LOG_TYPE");
     if (lt != "") setLogType(lt);