summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2021-01-08 17:54:30 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2021-01-08 17:56:15 -0800
commitb0ebaf83a49fe4a895a78ddf5b0c4a029e34c566 (patch)
tree0228a5829c4bc06f28b1995f5d9c97870f33bbd8 /lib
parent551b70f4d0a975f3fa7b91bd2a040e71797d8c9d (diff)
downloadgnulib-b0ebaf83a49fe4a895a78ddf5b0c4a029e34c566.tar.gz
tempname: don’t block for minutes
Derived from a patch proposed by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2021-January/121302.html * lib/tempname.c (random_bits): Use GRND_NONBLOCK.
Diffstat (limited to 'lib')
-rw-r--r--lib/tempname.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/tempname.c b/lib/tempname.c
index f196b98622..f199b25a7a 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -80,10 +80,11 @@ static random_value
random_bits (random_value var)
{
random_value r;
- if (__getrandom (&r, sizeof r, 0) == sizeof r)
+ /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */
+ if (__getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r)
return r;
#if _LIBC || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME)
- /* Add entropy if getrandom is not supported. */
+ /* Add entropy if getrandom did not work. */
struct __timespec64 tv;
__clock_gettime64 (CLOCK_MONOTONIC, &tv);
var ^= tv.tv_nsec;