1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
https://bugzilla.redhat.com/show_bug.cgi?id=1690364
diff --git a/rngd_jitter.c b/rngd_jitter.c
index 23d96b3..43a13e0 100644
--- a/rngd_jitter.c
+++ b/rngd_jitter.c
@@ -473,26 +473,22 @@ void close_jitter_entropy_source(struct rng *ent_src)
for (i=0; i < num_threads; i++)
tdata[i].active = 0;
- flags = fcntl(pipefds[1], F_GETFL, 0);
- flags |= O_NONBLOCK;
- fcntl(pipefds[1], F_SETFL, &flags);
+ close(pipefds[1]);
/* And wait for completion of each thread */
for (i=0; i < num_threads; i++) {
message(LOG_DAEMON|LOG_DEBUG, "Checking on done for thread %d\n", i);
while (!tdata[i].done)
+ pthread_kill(threads[i], SIGINT);
if(tdata[i].done) {
message(LOG_DAEMON|LOG_INFO, "Closing thread %d\n", tdata[i].core_id);
pthread_join(threads[i], NULL);
jent_entropy_collector_free(tdata[i].ec);
- } else {
- read(pipefds[0], tmpbuf, 1024);
+ } else
sched_yield();
- }
}
- close(pipefds[2]);
- close(pipefds[1]);
+ close(pipefds[0]);
free(tdata);
free(threads);
return;
|