RE: Re: Assertion failures in wincvsView.cpp (Trunk / 2.0.3)?
"Arthur Barrett" <[email protected]> Mon, 6 Feb 2006 13:25:56 +1100
| Newsgroups | gmane.comp.version-control.cvs.gui.devel |
|---|---|
| Message-ID | <[email protected]> |
Jerzy, That'd work too I guess... As I mentioned in my post - it all depends on how time critical that routine is... Regards, Arthur -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of kaczoroj Sent: 06 February 2006 12:12 To: [email protected] Subject: [cvsgui-dev] Re: Assertion failures in wincvsView.cpp (Trunk / 2.0.3)? Arthur, Critical section is supposed to be much faster than Mutex, perhaps better to just do Lock() instead. Best Regards, Jerzy --- In [email protected], "Arthur Barrett" <arthur.barrett@. ..> wrote: > > > 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 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/