add neug_flush
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 6 Oct 2011 02:03:20 +0000 (11:03 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 6 Oct 2011 02:03:20 +0000 (11:03 +0900)
ChangeLog
src/neug.h
src/random.c

index 51ba714..073b70b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-10-06  NIIBE Yutaka  <gniibe@fsij.org>
+
+       * src/random.c (neug_flush): New.
+       (neug_prng_reseed): Call neug_flush.
+
 2011-10-05  NIIBE Yutaka  <gniibe@fsij.org>
 
        * boards/common/board-common.c (__early_init): Set MSP register
index c24e844..16b7c0f 100644 (file)
@@ -7,3 +7,4 @@ void neug_init (uint32_t *buf, uint8_t size);
 void neug_prng_reseed (void);
 uint32_t neug_get (int kick);
 void neug_kick_filling (void);
+void neug_flush (void);
index 77b45c4..4a7532f 100644 (file)
@@ -387,6 +387,19 @@ neug_init (uint32_t *buf, uint8_t size)
   chThdCreateStatic (wa_rng, sizeof (wa_rng), NORMALPRIO, rng, rb);
 }
 
+/**
+ * @breif Flush random bytes.
+ */
+void
+neug_flush (void)
+{
+  chMtxLock (&rb->m);
+  while (!rb->empty)
+    (void)rb_del (rb);
+  chCondSignal (&rb->space_available);
+  chMtxUnlock ();
+}
+
 /**
  * @breif Set seed to PRNG
  */
@@ -396,6 +409,7 @@ neug_prng_reseed (void)
   uint32_t seed = ep_output ();
 
   tmt_init (seed);
+  neug_flush ();
 }
 
 /**
@@ -415,7 +429,7 @@ neug_kick_filling (void)
 /**
  * @brief  Get random word (32-bit) from NeuG.
  * @detail With NEUG_KICK_FILLING, it wakes up RNG thread.
- *         With NEUG_NO_KICK, it doesn't wake up automatically,
+ *         With NEUG_NO_KICK, it doesn't wake up RNG thread automatically,
  *         it is needed to call neug_kick_filling later.
  */
 uint32_t