]> Savannah Git Hosting - gnulib.git/commitdiff
tempname: don’t block for minutes
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Jan 2021 01:54:30 +0000 (17:54 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Jan 2021 01:56:15 +0000 (17:56 -0800)
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.

ChangeLog
lib/tempname.c

index 812888f8e5b0c20ea62c9d951d63dd9cd1cbc5a2..b76330e5b6b2cfa404ac159fe3396558bff8395d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2021-01-08  Paul Eggert  <eggert@cs.ucla.edu>
 
+       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.
+
        tempname: sync with proposed glibc patch
        This is from Adhemerval Zanella in:
        https://sourceware.org/pipermail/libc-alpha/2021-January/121301.html
index f196b98622e2e247fc09afaacd70dacb91da8224..f199b25a7a22775155272cec19327f3eca7fb29c 100644 (file)
@@ -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;