apps/speed.c: limit loop counters to 2^31 in order to avoid overflows
in performance calculations. For the moment there is only one code
fast enough to suffer from this: Intel AES-NI engine.
PR: 2096
diff --git a/apps/speed.c b/apps/speed.c
index cf5b8b7..67a8167 100644
--- a/apps/speed.c
+++ b/apps/speed.c
@@ -277,9 +277,11 @@
static double Time_F(int s)
{
+ double ret;
+ static HANDLE thr;
+
if (s == START)
{
- HANDLE thr;
schlock = 0;
thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL);
if (thr==NULL)
@@ -288,17 +290,25 @@
BIO_printf(bio_err,"unable to CreateThread (%d)",ret);
ExitProcess(ret);
}
- CloseHandle(thr); /* detach the thread */
while (!schlock) Sleep(0); /* scheduler spinlock */
+ ret = app_tminterval(s,usertime);
+ }
+ else
+ {
+ ret = app_tminterval(s,usertime);
+ if (run) TerminateThread(thr,0);
+ CloseHandle(thr);
}
- return app_tminterval(s,usertime);
+ return ret;
}
#else
static double Time_F(int s)
{
- return app_tminterval(s,usertime);
+ double ret = app_tminterval(s,usertime);
+ if (s == STOP) alarm(0);
+ return ret;
}
#endif
@@ -1454,7 +1464,7 @@
# error "You cannot disable DES on systems without SIGALRM."
#endif /* OPENSSL_NO_DES */
#else
-#define COND(c) (run)
+#define COND(c) (run && count<0x7fffffff)
#define COUNT(d) (count)
#ifndef _WIN32
signal(SIGALRM,sig_done);