[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

AW: AW: Commit dialogue freezes sometimes on Win10

From: Jens Geyer <jgx_at_vsx.net>
Date: Wed, 2 Sep 2015 13:09:55 +0000

It loops forever in the PeekMessage() loop within this piece of code:

/////////////////////////////////////////////////////////////////////////////
// COleMessageFilter standard implementation of callbacks

BOOL COleMessageFilter::OnMessagePending(const MSG* /*pMsg*/)
{
        // By default we rely on OLE's default message handling for every message
        // except WM_PAINT messages. WM_PAINT messages should not generate
        // out-going calls.

        BOOL bEatMessage = FALSE;
        MSG msg;
        while (::PeekMessage(&msg, NULL, WM_PAINT, WM_PAINT, PM_REMOVE|PM_NOYIELD))
        {
                bEatMessage = TRUE;
                DispatchMessage(&msg);
        }
        return bEatMessage;
}

As one would expect, the contents of msg is always the same = WM_PAINT, but with a different time field, so Windows seems to continue to generate WM_PAINTs for some reason. I tried manually setting the EIP to the "return bEatMessage;" statement, hit "continue execution" and that seemed to do the trick. The UI is responsive again, and subsequent calls of that method (I left a breakpoint at the entrance) no longer get stuck.

Here's the stack, just tell me when you need sth. else:

> mfc140u.dll!COleMessageFilter::OnMessagePending(const tagMSG * __formal) Zeile 113 C++
         mfc140u.dll!COleMessageFilter::XMessageFilter::MessagePending(HTASK__ * htaskCallee, unsigned long dwTickCount, unsigned long __formal) Zeile 312 C++
         combase.dll!CCliModalLoop::HandlePendingMessage() Zeile 2861 C++
         combase.dll!CCliModalLoop::HandleWakeForMsg() Zeile 2389 C++
         combase.dll!CCliModalLoop::BlockFn(void * * ahEvent, unsigned long cEvents, unsigned long * lpdwSignaled) Zeile 2291 C++
         combase.dll!ThreadSendReceive(tagRPCOLEMESSAGE * pOriginalMessage, CSyncClientCall * pClientCall, const _GUID & rmoid) Zeile 7174 C++
         combase.dll!CSyncClientCall::SendReceive2(tagRPCOLEMESSAGE * pMessage, unsigned long * pstatus) Zeile 5731 C++
         combase.dll!CSyncClientCall::SendReceive(tagRPCOLEMESSAGE * pMessage, unsigned long * pulStatus) Zeile 847 C++
         combase.dll!NdrExtpProxySendReceive(void * pThis, _MIDL_STUB_MESSAGE * pStubMsg) Zeile 2039 C++
         rpcrt4.dll!NdrpClientCall3() Unbekannt
         combase.dll!ObjectStublessClient(void * ParamAddress, __int64 * FloatRegisters, long Method) Zeile 296 C++
         combase.dll!ObjectStubless() Zeile 176 Unbekannt
         combase.dll!CRpcResolver::CreateInstance(IActivationPropertiesIn * pInActivationProperties, IActivationPropertiesOut * * ppActOut) Zeile 2635 C++
         combase.dll!CClientContextActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) Zeile 584 C++
         combase.dll!ActivationPropertiesIn::DelegateCreateInstance(IUnknown * pUnkOuter, IActivationPropertiesOut * * ppActPropsOut) Zeile 1975 C++
         combase.dll!ICoCreateInstanceEx(const _GUID & OriginalClsid, IUnknown * punkOuter, unsigned long dwClsCtx, _COSERVERINFO * pServerInfo, unsigned long dwCount, unsigned long dwActvFlags, tagMULTI_QI * pResults, ActivationPropertiesIn * pActIn) Zeile 1817 C++
         combase.dll!CComActivator::DoCreateInstance(const _GUID & Clsid, IUnknown * punkOuter, unsigned long dwClsCtx, _COSERVERINFO * pServerInfo, unsigned long dwCount, tagMULTI_QI * pResults, ActivationPropertiesIn * pActIn) Zeile 376 C++
         combase.dll!CoCreateInstance(const _GUID & rclsid, IUnknown * pUnkOuter, unsigned long dwContext, const _GUID & riid, void * * ppv) Zeile 120 C++
         thumbcache.dll!CThumbnailCache::_GetSurrogate(enum WTS_FLAGS,struct ICreateObject * *) Unbekannt
         thumbcache.dll!CThumbnailCache::_PerformFullExtractionCore(struct IShellItem *,unsigned int,unsigned int,enum WTS_FLAGS,enum WTS_PRIV_FLAGS,struct IBitmapResult * *,int *,enum WTS_ALPHATYPE *,unsigned long *) Unbekannt
         thumbcache.dll!CThumbnailCache::_PerformFullExtraction(struct IShellItem *,unsigned int,unsigned int,enum WTS_FLAGS,enum WTS_PRIV_FLAGS,struct IBitmapResult * *,int *,enum WTS_ALPHATYPE *) Unbekannt
         thumbcache.dll!CThumbnailCache::_GetThumbnailImpl(class CThumbnailMoniker &,struct IShellItem *,unsigned int,enum WTS_FLAGS,enum WTS_PRIV_FLAGS,int,struct IBitmapResult * *,int *,int *) Unbekannt
         thumbcache.dll!CThumbnailCache::_GetThumbnailInternal(struct IShellItem *,unsigned int,enum WTS_FLAGS,enum WTS_PRIV_FLAGS,struct IBitmapResult * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *) Unbekannt
         thumbcache.dll!CThumbnailCache::GetThumbnailPrivate(struct IShellItem *,unsigned int,enum WTS_FLAGS,enum WTS_PRIV_FLAGS,struct ISharedBitmap * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *) Unbekannt
         thumbcache.dll!CThumbnailCacheAPI::GetThumbnailPrivate(struct IShellItem *,unsigned int,enum WTS_FLAGS,enum WTS_PRIV_FLAGS,struct ISharedBitmap * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *) Unbekannt
         thumbcache.dll!CThumbnailCacheAPI::GetThumbnail(struct IShellItem *,unsigned int,enum WTS_FLAGS,struct ISharedBitmap * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *) Unbekannt
         windows.storage.dll!CShellItem::_GetThumbnail(struct tagSIZE,int,struct ISharedBitmap * *) Unbekannt
         windows.storage.dll!CShellItem::GetSharedBitmap(struct tagSIZE,int,struct ISharedBitmap * *) Unbekannt
         windows.storage.dll!CShellItem::GetImage(struct tagSIZE,int,struct HBITMAP__ * *) Unbekannt
         shell32.dll!_ExtactIconFromImage(unsigned short const *,int,struct HICON__ * *) Unbekannt
         shell32.dll!_ExtractIconsFromImage(unsigned short const *,int,unsigned int,struct HICON__ * *) Unbekannt
         shell32.dll!ExtractIconsUsingResourceManager(unsigned short const *,int,int,unsigned int,unsigned int,struct HICON__ * *) Unbekannt
         shell32.dll!SHDefExtractIconW() Unbekannt
         shell32.dll!CIconCache::ExtractIconW(int,int,int,struct HICON__ * *) Unbekannt
         shell32.dll!CSparseCallback::ForceImagePresent(struct IImageList2 *,int) Unbekannt
         comctl32.dll!CSparseImageList::_Callback_ForceImagePresent(int) Unbekannt
         comctl32.dll!CSparseImageList::_Virt2Real(int,int *,unsigned long) Unbekannt
         comctl32.dll!CSparseImageList::GetOriginalSize(int,unsigned long,int *,int *) Unbekannt
         comctl32.dll!CLVImageListManager::_PositionImageWithOriginalSize(struct LVDRAWASYNCPARAMS *) Unbekannt
         comctl32.dll!CLVImageListManager::DrawAsync(struct LVDRAWASYNCPARAMS *,int) Unbekannt
         comctl32.dll!CLVImageListManager::DrawImageEx2(struct tagLVITEMW const *,struct HDC__ *,int,int,unsigned long,unsigned int,int,int,int) Unbekannt
         comctl32.dll!CLVReportView::v_DrawItem(struct LVDRAWITEM *) Unbekannt
         comctl32.dll!CLVDrawItemManager::DrawItem(struct LVDRAWITEM *) Unbekannt
         comctl32.dll!CListGroup::_PaintItems(struct HDC__ *,int,struct tagRECT const *) Unbekannt
         comctl32.dll!CListGroup::Paint(struct HDC__ *,int,struct tagRECT const *) Unbekannt
         comctl32.dll!CLVGroupManager::Paint(struct HDC__ *,struct tagRECT const *) Unbekannt
         comctl32.dll!`DuiTelemetry::Instance(void)'::`2'::`dynamic atexit destructor for 'wrapper''(void) Unbekannt
         comctl32.dll!CLVDrawManager::_PaintWorkArea(struct HDC__ *,struct tagRECT const *) Unbekannt
         comctl32.dll!CLVDrawManager::_OnPaintWorkAreas(struct HDC__ *,struct tagRECT const *) Unbekannt
         comctl32.dll!CLVDrawManager::_OnPaint(struct HDC__ *) Unbekannt
         comctl32.dll!CLVDrawManager::OnPaint(struct HDC__ *) Unbekannt
         comctl32.dll!CListView::WndProc(struct HWND__ *,unsigned int,unsigned __int64,__int64) Unbekannt
         comctl32.dll!CListView::s_WndProc(struct HWND__ *,unsigned int,unsigned __int64,__int64) Unbekannt
         user32.dll!UserCallWinProcCheckWow() Unbekannt
         user32.dll!CallWindowProcW() Unbekannt
         comctl32.dll!CallNextSubclassProc() Unbekannt
         comctl32.dll!CallNextSubclassProc() Unbekannt
         comctl32.dll!MasterSubclassProc() Unbekannt
         user32.dll!UserCallWinProcCheckWow() Unbekannt
         user32.dll!CallWindowProcW() Unbekannt
         mfc140u.dll!CWnd::DefWindowProcW(unsigned int nMsg, unsigned __int64 wParam, __int64 lParam) Zeile 1101 C++
         TortoiseProc.exe!CSVNStatusListCtrl::OnPaint() Zeile 5377 C++
         mfc140u.dll!CWnd::OnWndMsg(unsigned int message, unsigned __int64 wParam, __int64 lParam, __int64 * pResult) Zeile 2444 C++
         TortoiseProc.exe!CSVNStatusListCtrl::OnWndMsg(unsigned int message, unsigned __int64 wParam, __int64 lParam, __int64 * pResult) Zeile 6900 C++
         mfc140u.dll!CWnd::WindowProc(unsigned int message, unsigned __int64 wParam, __int64 lParam) Zeile 2078 C++
         mfc140u.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned __int64 wParam, __int64 lParam) Zeile 265 C++
         mfc140u.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned __int64 wParam, __int64 lParam) Zeile 417 C++
         mfc140u.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned __int64 wParam, __int64 lParam) Zeile 299 C++
         user32.dll!UserCallWinProcCheckWow() Unbekannt
         user32.dll!DispatchClientMessage() Unbekannt
         user32.dll!__fnDWORD() Unbekannt
         ntdll.dll!KiUserCallbackDispatcherContinue() Unbekannt
         user32.dll!NtUserDispatchMessage() Unbekannt
         user32.dll!DispatchMessageWorker() Unbekannt
         mfc140u.dll!AfxInternalPumpMessage() Zeile 183 C++
         mfc140u.dll!CWnd::RunModalLoop(unsigned long dwFlags) Zeile 4640 C++
         mfc140u.dll!CWnd::CreateRunDlgIndirect(const DLGTEMPLATE * lpDialogTemplate, CWnd * pParentWnd, HINSTANCE__ * hInst) Zeile 474 C++
         mfc140u.dll!CDialog::DoModal() Zeile 633 C++
         TortoiseProc.exe!CommitCommand::Execute() Zeile 122 C++
         TortoiseProc.exe!CTortoiseProcApp::InitInstance() Zeile 470 C++
         mfc140u.dll!AfxWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow) Zeile 37 C++
         TortoiseProc.exe!__scrt_common_main_seh() Zeile 264 C++
         kernel32.dll!BaseThreadInitThunk() Unbekannt
         ntdll.dll!RtlUserThreadStart() Unbekannt

-----Ursprüngliche Nachricht-----
Von: Stefan Küng [mailto:tortoisesvn_at_gmail.com]
Gesendet: Dienstag, 11. August 2015 19:59
An: dev_at_tortoisesvn.tigris.org
Betreff: Re: AW: Commit dialogue freezes sometimes on Win10

On 11.08.2015 12:01, Jens Geyer wrote:
> Looks very much like this:
>
> https://groups.google.com/forum/#!topic/tortoisesvn/oOzbLfSiDUw
>
> Again, if I can do anything to help you tracking down that issue, just
> ask. Whatever the issue is, TSVN should not just hang.

I'm sure you know your way around a debugger, so you could attach a
debugger to the TortoiseProc.exe process and find out where/why it hangs.
The debug symbols can be set up with this url:
http://www.crash-server.com:8080/public/tsvn/71040F62-F78A-4953-B5B3-5C148349FED7/symsrv

And if you have the debugger set up right, it will also automatically
check out the TSVN source files if necessary.

I haven't seen that problem on my machines yet, so I can't really help
in narrowing the problem down :(

Stefan

-- 
        ___
   oo  // \\      "De Chelonian Mobile"
  (_,\/ \_/ \     TortoiseSVN
    \ \_/_\_/>    The coolest interface to (Sub)version control
    /_/   \_\     http://tortoisesvn.net
------------------------------------------------------
http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=3131380
To unsubscribe from this discussion, e-mail: [dev-unsubscribe_at_tortoisesvn.tigris.org].
------------------------------------------------------
http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=3135474
To unsubscribe from this discussion, e-mail: [dev-unsubscribe_at_tortoisesvn.tigris.org].
Received on 2015-09-02 15:10:12 CEST

This is an archived mail posted to the TortoiseSVN Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.