#include <sys/time.h>
#include <fcntl.h>
#include <locks.h>
+#include <unistd.h> /* getpid */
#ifdef HAVE_GETRUSAGE
#include <sys/resource.h>
#endif
static int
do_device_source (int init)
{
+ static pid_t pid; /* detect fork() */
int ret;
static int (*do_source) (int init) = NULL;
/* using static var here is ok since we are
if (init == 1)
{
+ pid = getpid();
+
do_source = do_device_source_urandom;
ret = do_source (init);
if (ret < 0)
}
else
{
+ if (getpid() != pid)
+ { /* fork() detected */
+ device_last_read = 0;
+ pid = getpid();
+ }
+
return do_source (init);
}
}