Re: COM initialization in TortoiseProc

Stefan Küng <[email protected]>
Newsgroups gmane.comp.version-control.subversion.tortoisesvn.devel
Message-ID <[email protected]>
On 07.01.2016 21:29, Ivan Zhakov wrote:
> On 7 January 2016 at 12:12, Ivan Zhakov <[email protected]> wrote:
>> I'm currently looking to drdump problem 178870 [1]. Crash happens in
>> internals of SHGetFileInfoW which called from CTortoiseProcApp
>> constructor:
>> [[[
>> ole32!OXIDEntry::InitRundown+0xd
>> ole32!CComApartment::InitRemoting+0x1d3
>> ole32!CComApartment::StartServer+0x13
>> [...]
>> ole32!CoCreateInstanceEx+0x38
>> ole32!CoCreateInstance+0x37
>> [...]
>> shell32!SHGetFileInfoW+0x18f
>> tortoiseproc!CSysImageList::CSysImageList+0xb7
>> tortoiseproc!CTortoiseProcApp::CTortoiseProcApp+0x9a
>> ]]]
>>
>> Looking to the code I noticed that SHGetFileInfoW called without prior
>> COM initialization while it's explicitly required by MSDN [2]:
>> [[[
>> You must initialize Component Object Model (COM) with CoInitialize or
>> OleInitialize prior to calling SHGetFileInfo.
>> ]]]
>>
>> So I suspect that this is the reason of this crash.
>>
>> I wanted to add COM initialization to CTortoiseProcApp constructor,
>> but I noticed that TortoiseSVN code uses pattern to initialize COM
>> only when needed instead of application start. Is it intentional? Are
>> any known problems to initialize COM on TortoiseProc startup?
>>
> My bad: I added breakpoint to CoInitalize(), but I forgot about
> CoInitializeEx(). COM is initialized at TortoiseProc startup in
> CTortoiseProcApp::InitInistance(). So I've moved CSysImageList
> initizilization here (and cleanup to ExitInstance) in r27133.

Sorry for the late reply:
Yes, TortoiseProc initializes COM at startup. Other calls to 
CoInitialize/CoInitializeEx are there for thread reasons (COM has to be 
initialized for each thread separately if needed).

I'll merge your changes to the stable branch soon...

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=3154169

To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.