Fix warnings from mingw64 in timing.c

Backport from dda52139 from the 1.3 branch
This commit is contained in:
Manuel Pégourié-Gonnard 2015-04-10 17:30:46 +02:00
parent 64f65e84bc
commit a9553a8c49
3 changed files with 17 additions and 8 deletions

View file

@ -7,6 +7,7 @@ Security
crash it remotely (found by Caj Larsson). crash it remotely (found by Caj Larsson).
Bugfix Bugfix
* Fix warnings from mingw64 in timing.c (found by kxjklele).
* Fix potential unintended sign extension in asn1_get_len() on 64-bit * Fix potential unintended sign extension in asn1_get_len() on 64-bit
platforms (found with Coverity Scan). platforms (found with Coverity Scan).

View file

@ -55,6 +55,10 @@ unsigned long get_timer( struct hr_time *val, int reset );
* \brief Setup an alarm clock * \brief Setup an alarm clock
* *
* \param seconds delay before the "alarmed" flag is set * \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 ); void set_alarm( int seconds );

View file

@ -229,20 +229,24 @@ unsigned long get_timer( struct hr_time *val, int reset )
return( delta ); return( delta );
} }
DWORD WINAPI TimerProc( LPVOID uElapse ) /* It's OK to use a global because alarm() is supposed to be global anyway */
{ static DWORD alarmMs;
Sleep( (DWORD) uElapse );
alarmed = 1; static DWORD WINAPI TimerProc( LPVOID TimerContext )
{
((void) TimerContext);
Sleep( alarmMs );
alarmed = 1;
return( TRUE ); return( TRUE );
} }
void set_alarm( int seconds ) void set_alarm( int seconds )
{ {
DWORD ThreadId; DWORD ThreadId;
alarmed = 0; alarmed = 0;
CloseHandle( CreateThread( NULL, 0, TimerProc, alarmMs = seconds * 1000;
(LPVOID) ( seconds * 1000 ), 0, &ThreadId ) ); CloseHandle( CreateThread( NULL, 0, TimerProc, NULL, 0, &ThreadId ) );
} }
void m_sleep( int milliseconds ) void m_sleep( int milliseconds )