chiark / gitweb /
noise: Fix freewheel generator's use of setitimer(2).
authorMark Wooding <mdw@ncipher.com>
Wed, 20 Sep 2006 15:20:23 +0000 (16:20 +0100)
committerMark Wooding <mdw@ncipher.com>
Wed, 20 Sep 2006 15:20:23 +0000 (16:20 +0100)
If the old timer was turned off, don't accidentally turn it on.  While
on some Linux versions, this seems harmless enough, on others it causes
spurious SIGALRM signals to be sent to the process, which is terribly
unhelpful.

noise.c

diff --git a/noise.c b/noise.c
index 908893065e8f124ee1bccb2e2a91da77a5d95822..c122506f2271cb91d56be0a67540b68bfd51c1d5 100644 (file)
--- a/noise.c
+++ b/noise.c
@@ -390,7 +390,8 @@ int noise_freewheel(rand_pool *r)
 
 done:
   signal(SIGALRM, sigal);
-  TV_SUB(&oitv.it_value, &oitv.it_value, &itv.it_value);
+  if (oitv.it_value.tv_sec || oitv.it_value.tv_usec)
+    TV_SUB(&oitv.it_value, &oitv.it_value, &itv.it_value);
   setitimer(ITIMER_REAL, &oitv, 0);
   return (rc);
 }