Blame rngd-shutdown.patch
|
Neil Horman |
ee4a52c |
diff --git a/rngd_jitter.c b/rngd_jitter.c
|
|
Neil Horman |
ee4a52c |
index 23d96b3..43a13e0 100644
|
|
Neil Horman |
ee4a52c |
--- a/rngd_jitter.c
|
|
Neil Horman |
ee4a52c |
+++ b/rngd_jitter.c
|
|
Neil Horman |
ee4a52c |
@@ -473,26 +473,22 @@ void close_jitter_entropy_source(struct rng *ent_src)
|
|
Neil Horman |
ee4a52c |
for (i=0; i < num_threads; i++)
|
|
Neil Horman |
ee4a52c |
tdata[i].active = 0;
|
|
Neil Horman |
ee4a52c |
|
|
Neil Horman |
ee4a52c |
- flags = fcntl(pipefds[1], F_GETFL, 0);
|
|
Neil Horman |
ee4a52c |
- flags |= O_NONBLOCK;
|
|
Neil Horman |
ee4a52c |
- fcntl(pipefds[1], F_SETFL, &flags);
|
|
Neil Horman |
ee4a52c |
+ close(pipefds[1]);
|
|
Neil Horman |
ee4a52c |
|
|
Neil Horman |
ee4a52c |
/* And wait for completion of each thread */
|
|
Neil Horman |
ee4a52c |
for (i=0; i < num_threads; i++) {
|
|
Neil Horman |
ee4a52c |
message(LOG_DAEMON|LOG_DEBUG, "Checking on done for thread %d\n", i);
|
|
Neil Horman |
ee4a52c |
while (!tdata[i].done)
|
|
Neil Horman |
ee4a52c |
+ pthread_kill(threads[i], SIGINT);
|
|
Neil Horman |
ee4a52c |
if(tdata[i].done) {
|
|
Neil Horman |
ee4a52c |
message(LOG_DAEMON|LOG_INFO, "Closing thread %d\n", tdata[i].core_id);
|
|
Neil Horman |
ee4a52c |
pthread_join(threads[i], NULL);
|
|
Neil Horman |
ee4a52c |
jent_entropy_collector_free(tdata[i].ec);
|
|
Neil Horman |
ee4a52c |
- } else {
|
|
Neil Horman |
ee4a52c |
- read(pipefds[0], tmpbuf, 1024);
|
|
Neil Horman |
ee4a52c |
+ } else
|
|
Neil Horman |
ee4a52c |
sched_yield();
|
|
Neil Horman |
ee4a52c |
- }
|
|
Neil Horman |
ee4a52c |
}
|
|
Neil Horman |
ee4a52c |
|
|
Neil Horman |
ee4a52c |
- close(pipefds[2]);
|
|
Neil Horman |
ee4a52c |
- close(pipefds[1]);
|
|
Neil Horman |
ee4a52c |
+ close(pipefds[0]);
|
|
Neil Horman |
ee4a52c |
free(tdata);
|
|
Neil Horman |
ee4a52c |
free(threads);
|
|
Neil Horman |
ee4a52c |
return;
|