From 23ca7e8f9302e0ae283da87c249f8d39071f284e Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 21 May 2005 01:59:40 +0000 Subject: [PATCH] fix crash if Close times out: if DoRequest returns false, it's the thread's job to clean up. comment excpetional case in REQ_CLOSE --- stepmania/src/RageFileDriverTimeout.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stepmania/src/RageFileDriverTimeout.cpp b/stepmania/src/RageFileDriverTimeout.cpp index 4bc64018ff..f3e44523c1 100644 --- a/stepmania/src/RageFileDriverTimeout.cpp +++ b/stepmania/src/RageFileDriverTimeout.cpp @@ -210,6 +210,8 @@ void ThreadedFileWorker::HandleRequest( int iRequest ) case REQ_CLOSE: ASSERT( m_pRequestFile != NULL ); delete m_pRequestFile; + + /* Clear m_pRequestFile, so RequestTimedOut doesn't double-delete. */ m_pRequestFile = NULL; break; @@ -322,7 +324,8 @@ void ThreadedFileWorker::Close( RageFileBasic *pFile ) /* If we're not in a timed-out state, try to wait for the deletion to complete * before continuing. */ m_pRequestFile = pFile; - DoRequest( REQ_CLOSE ); + if( !DoRequest(REQ_CLOSE) ) + return; m_pRequestFile = NULL; } else