vlc | branch: master | Erwan Tulou <erwa...@videolan.org> | Tue Jan 23 01:46:30 2018 +0100| [90cb142cb5d58ab0d0917bf54499b585e15675b6] | committer: Erwan Tulou
skins2(Win): fix sporadic crash Timer messages may be pending and must be explicitely discarded when calling the destructor of a timer. Otherwise, the callback function is called after the object is destroyed leading to crash. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=90cb142cb5d58ab0d0917bf54499b585e15675b6 --- modules/gui/skins2/win32/win32_timer.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/gui/skins2/win32/win32_timer.cpp b/modules/gui/skins2/win32/win32_timer.cpp index afe1550955..c499348716 100644 --- a/modules/gui/skins2/win32/win32_timer.cpp +++ b/modules/gui/skins2/win32/win32_timer.cpp @@ -33,10 +33,7 @@ void CALLBACK CallbackTimer( HWND hwnd, UINT uMsg, { (void)hwnd; (void)uMsg; (void)dwTime; Win32Timer *pTimer = (Win32Timer*)idEvent; - if( pTimer != NULL ) - { - pTimer->execute(); - } + pTimer->execute(); } @@ -49,6 +46,15 @@ Win32Timer::Win32Timer( intf_thread_t *pIntf, CmdGeneric &rCmd, HWND hWnd ): Win32Timer::~Win32Timer() { stop(); + + // discard possible WM_TIMER messages for this timer + // already in the message queue and not yet dispatched + MSG msg; + while( !PeekMessage( &msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE ) ) + { + if( (Win32Timer*)msg.wParam != this ) + PostMessage( m_hWnd, WM_TIMER, msg.wParam, msg.lParam ); + } } _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits