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);