PR: 2100
authorDr. Stephen Henson <steve@openssl.org>
Wed, 17 Feb 2010 14:32:25 +0000 (14:32 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 17 Feb 2010 14:32:25 +0000 (14:32 +0000)
Submitted by: James Baker <jbaker@tableausoftware.com> et al.

Workaround for slow Heap32Next on some versions of Windows.

CHANGES
crypto/rand/rand_win.c

diff --git a/CHANGES b/CHANGES
index 2e093c110ccc8ee14a6f9c54f289365ef6452e0a..6ffa4d83a4c909efd0758d361e8ed443e3f6daeb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
  Changes between 0.9.8l (?) and 0.9.8m (?)  [xx XXX xxxx]
 
+  *) On some versions of WIN32 Heap32Next is very slow. This can cause
+     excessive delays in the RAND_poll(): over a minute. As a workaround
+     include a time check in the inner Heap32Next loop too.
+     [Steve Henson]
+
   *) The code that handled flushing of data in SSL/TLS originally used the
      BIO_CTRL_INFO ctrl to see if any data was pending first. This caused
      the problem outlined in PR#1949. The fix suggested there however can
index 9bad067f43202540c7b79d71713c258f7d1e9061..5198351cf34ea99b562c146ad040eb9f7215ff69 100644 (file)
@@ -527,6 +527,7 @@ int RAND_poll(void)
                                                        RAND_add(&hentry,
                                                                hentry.dwSize, 5);
                                                while (heap_next(&hentry)
+                                               && (!good || (GetTickCount()-starttime)<MAXDELAY)
                                                        && --entrycnt > 0);
                                                }
                                                }