The information in this article applies to:
SYMPTOMSPassing the address of a CCriticalSection object to the constructor of a CSingleLock object causes an assertion in the mtex.cpp file at line 97. This line is in the constructor for CSingleLock. CAUSE
A Critical Section object cannot be passed to ::WaitForSingleObject. This
is because Critical Section objects do not have a corresponding kernel
object. Because CSingleLock::Lock calls CSyncObject::Lock, which calls
::WaitForSingleObject, the ASSERT tries to catch the case when a Critical
Section object is incorrectly passed to ::WaitForSingleObject. RESOLUTION
The assert can be safely ignored. ASSERT statements are only evaluated in
debug builds, so this is not a problem with release builds. To get rid of
the assert, remove the assert from the MFC source and rebuild the debug
version of the MFC library. For details on rebuilding the MFC libraries,
please see the Readme.txt file located in the <msdev>\Mfc\Src directory. STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ 4.1. MORE INFORMATIONBecause the call to CMultiLock::Lock always calls ::WaitForMultipleObjects or ::MsgWaitForMultipleObjects, you must make sure that none of the synchronization objects passed to CMultiLock constructor are of type CCriticalSection. This means that a similar assertion in the constructor for CMultiLock in the mtex.cpp file at line 163 is valid. REFERENCESCCriticalSection in the Help file. Additional query words: kbVC400bug 4.00 4.10 assertion mtex.cpp 97 assert Windows 95
Keywords : kbMFC kbThread kbVC kbVC410fix |
Last Reviewed: July 29, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |