Assertion failures in wincvsView.cpp (Trunk / 2.0.3)?
"Arthur Barrett" <[email protected]> Mon, 6 Feb 2006 10:01:44 +1100
| Newsgroups | gmane.comp.version-control.cvs.gui.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi all!
Just having a look at the code on the trunk (2.0.3 I think) and I think
I've found problem with the use of CSingleLock and CCriticalSection -
basically the code is passing a timeout which is not permitted in that
context - so in debug mode I get a lot of assertion failure in
afx(blah-blah-blah)dot(blah). The same problem seems to be discussed
here (warning - lots of adverts and you can only visit this page once
per day without registering):
http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_
21711876.html
The MSDN documentation is clear as mud on this issue - there certainly
is a lot of "suggestion" that non-infiinite numbers with a
CriticalSection do not make sense, but nothing in black and white - and
in non-debug mode there is no evidence that the call actually fails...
The closest is here (because CSingleLock on a CCriticalSection will
ultimately call CCriticalSection:Lock() anyway - but I'd hardly call
this proof:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/h
tml/_mfc_ccriticalsection.asp
"If timed waits are necessary, you can use a CMutex
<http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_cmutex.asp>
object instead of a CCriticalSection object."
Provided that the speed of wincvsView() is not critical then I suggest
that my mods are probably a better way to handle sync (see attached
context diff - also pasted below).
Regards,
Arthur
Index: wincvsView.cpp
===================================================================
RCS file: /cvsroot/cvsgui/cvsgui/WinCvs/wincvsView.cpp,v
retrieving revision 1.24
diff -c -r1.24 wincvsView.cpp
*** wincvsView.cpp 19 Dec 2004 14:39:32 -0000 1.24
--- wincvsView.cpp 5 Feb 2006 21:58:58 -0000
***************
*** 72,77 ****
--- 72,80 ----
CWincvsView::CWincvsView()
{
m_fRtfFormat = ::RegisterClipboardFormat(_T("Rich Text Format"));
+ #ifdef MARCH_HARE_MODS
+ m_pMutex = new CMutex(FALSE);
+ #endif /* MARCH_HARE_MODS */
m_sbuf = 0L;
m_snumbuf = 0;
***************
*** 91,96 ****
--- 94,102 ----
{
app->StopScriptEngine();
}
+ #ifdef MARCH_HARE_MODS
+ delete m_pMutex;
+ #endif /* MARCH_HARE_MODS */
}
/// PreCreateWindow virtual override, modify the window style
***************
*** 352,358 ****
--- 358,368 ----
void CWincvsView::OutColor(const char* txt, long len)
{
// Synchronize
+ #ifdef MARCH_HARE_MODS
+ CSingleLock lock(m_pMutex);
+ #else
CSingleLock lock(&m_syncObject);
+ #endif /* MARCH_HARE_MODS */
if( !lock.Lock(20000) )
{
ASSERT(FALSE); // Lock failed
***************
*** 389,395 ****
--- 399,409 ----
void CWincvsView::OutColor(kConsoleColor color)
{
// Synchronize
+ #ifdef MARCH_HARE_MODS
+ CSingleLock lock(m_pMutex);
+ #else
CSingleLock lock(&m_syncObject);
+ #endif /* MARCH_HARE_MODS */
if( !lock.Lock(20000) )
{
ASSERT(FALSE); // Lock failed
***************
*** 450,456 ****
--- 464,474 ----
void CWincvsView::OutColor(WCHARFORMAT& format)
{
// Synchronize
+ #ifdef MARCH_HARE_MODS
+ CSingleLock lock(m_pMutex);
+ #else
CSingleLock lock(&m_syncObject);
+ #endif /* MARCH_HARE_MODS */
if( !lock.Lock(20000) )
{
ASSERT(FALSE); // Lock failed
***************
*** 470,476 ****
--- 488,498 ----
void CWincvsView::OutConsole(const char* txt, long len, bool isStderr
/*= false*/)
{
// Synchronize
+ #ifdef MARCH_HARE_MODS
+ CSingleLock lock(m_pMutex);
+ #else
CSingleLock lock(&m_syncObject);
+ #endif /* MARCH_HARE_MODS */
if( !lock.Lock(20000) )
{
ASSERT(FALSE); // Lock failed
Index: wincvsView.h
===================================================================
RCS file: /cvsroot/cvsgui/cvsgui/WinCvs/wincvsView.h,v
retrieving revision 1.12
diff -c -r1.12 wincvsView.h
*** wincvsView.h 2 Jan 2004 01:42:39 -0000 1.12
--- wincvsView.h 5 Feb 2006 21:58:58 -0000
***************
*** 144,150 ****
--- 144,154 ----
int m_snumbuf; /*!< Print buffer size */
UINT m_fRtfFormat; /*!< Clipboard format */
+ #ifdef MARCH_HARE_MODS
+ CMutex* m_pMutex; /*!< A better output synchronization object ? */
+ #else
CCriticalSection m_syncObject; /*!< Output synchronization object */
+ #endif /* MARCH_HARE_MODS */
// Methods
virtual HRESULT QueryAcceptData(LPDATAOBJECT, CLIPFORMAT*, DWORD,
BOOL, HGLOBAL);
[Non-text portions of this message have been removed]
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/cvsgui-dev/
<*> To unsubscribe from this group, send an email to:
[email protected]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/