On 16 December 2015 at 22:14, Stefan Kueng <tortoisesvn_at_gmail.com> wrote:
>
>
> On 16.12.2015 17:11, Ivan Zhakov wrote:
>>
>> Hi,
>>
>> The most often reported crash in TortoiseSVN 1.9.3 is problem 175094
>> [1, 2]: it's reported 152 times just in the first day of release. The
>> crash happens in
>> CStandAloneDialogTmpl<CResizableDialog>::OnEraseBkgnd(CDC * pDC)
>> because pDC == NULL. It could not happen according MSDN documentation
>> for WM_ERASEBKGND. But WM_ERASEBKGND passes through CLinkControl which
>> is actually subclasses parent windows of control using some custom
>> code.
>
>
> The problem here is simple exhaustion of GDI handles. That's why the DC is
> NULL: Windows won't create a new DC if there are no more GDI handles
> available.
> See the "GDI Resource" count in the crash xml file of a full dump zip.
>
Heh, I forgot about crash xml file.
> I found the real problem and fixed it in r27056.
>
Great! Btw I noticed that CSysImageList::GetFileIcon() has the same
resource leak. There is also discrepancy between
CSysImageList::GetPathIconIndex() and
CSysImageList::EnsureFileIconIsLoaded():
- GetPathIconIndex() uses by m_indexCache(), while
EnsureFileIconIsLoaded() does not.
- CSysImageList::GetFileIcon() asks for SHGFI_SYSICONINDEX, while
EnsureFileIconIsLoaded() uses SHGFI_ICON.
I think EnsureFileIconIsLoaded() should use SHGFI_SYSICONINDEX for
consistency, otherwise may return HICON without adding icon to
imagelist.
>> Attached patch converts CLinkControl to be normal control. It could
>> resolve these crashes, but I think this patch makes sense anyway.
>>
>> [1] https://drdump.com/Bug.aspx?ProblemID=175094
>> [2] https://drdump.com/Problem.aspx?ProblemID=175094
>
>
> Thanks for the patch. Committed in r27057.
>
Thanks!
--
Ivan Zhakov
------------------------------------------------------
http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=3151219
To unsubscribe from this discussion, e-mail: [dev-unsubscribe_at_tortoisesvn.tigris.org].
Received on 2015-12-17 18:55:43 CET