Fix warnings from mingw64 in timing.c
Backport from dda52139 from the 1.3 branch
diff --git a/ChangeLog b/ChangeLog
index 7ee4050..69ecd60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,7 @@
crash it remotely (found by Caj Larsson).
Bugfix
+ * Fix warnings from mingw64 in timing.c (found by kxjklele).
* Fix potential unintended sign extension in asn1_get_len() on 64-bit
platforms (found with Coverity Scan).
diff --git a/include/polarssl/timing.h b/include/polarssl/timing.h
index 1634774..2f59f0c 100644
--- a/include/polarssl/timing.h
+++ b/include/polarssl/timing.h
@@ -55,6 +55,10 @@
* \brief Setup an alarm clock
*
* \param seconds delay before the "alarmed" flag is set
+ *
+ * \warning Only one alarm at a time is supported. In a threaded
+ * context, this means one for the whole process, not one per
+ * thread.
*/
void set_alarm( int seconds );
diff --git a/library/timing.c b/library/timing.c
index 13dc924..1ba02fe 100644
--- a/library/timing.c
+++ b/library/timing.c
@@ -229,20 +229,24 @@
return( delta );
}
-DWORD WINAPI TimerProc( LPVOID uElapse )
-{
- Sleep( (DWORD) uElapse );
- alarmed = 1;
+/* It's OK to use a global because alarm() is supposed to be global anyway */
+static DWORD alarmMs;
+
+static DWORD WINAPI TimerProc( LPVOID TimerContext )
+{
+ ((void) TimerContext);
+ Sleep( alarmMs );
+ alarmed = 1;
return( TRUE );
}
void set_alarm( int seconds )
-{
+{
DWORD ThreadId;
- alarmed = 0;
- CloseHandle( CreateThread( NULL, 0, TimerProc,
- (LPVOID) ( seconds * 1000 ), 0, &ThreadId ) );
+ alarmed = 0;
+ alarmMs = seconds * 1000;
+ CloseHandle( CreateThread( NULL, 0, TimerProc, NULL, 0, &ThreadId ) );
}
void m_sleep( int milliseconds )