[Bug 19157] New: CoGetContextToken and CoGetObjectContext need to take existing MTA into account

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Jul 2 16:21:34 CDT 2009


http://bugs.winehq.org/show_bug.cgi?id=19157

           Summary: CoGetContextToken and CoGetObjectContext need to take
                    existing MTA into account
           Product: Wine
           Version: 1.1.24
          Platform: PC
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ole32
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: focht at gmx.net


Hello,

since ole32.CoGetContextToken() is no longer a stub, debugging of managed code
(.NET) with cordbg/mdbg doesn't work anymore.

Main thread (tid=0009) creates MTA:

--- snip ---
...
0009:Call ole32.CoInitializeEx(00000000,00000000) ret=79ebfba8
...
0009:trace:ole:apartment_construct creating new apartment, model=0 
0009:trace:ole:apartment_construct Created apartment on OXID 80000cafe
...
0009:Ret  ole32.CoInitializeEx() retval=00000000 ret=79ebfba8
--- snip ---

Helper thread (tid=001f) explicitly demands MTA after CoGetContextToken()
failure:

--- snip ---
...
001f:Call ole32.CoGetContextToken(02c1e5f4) ret=79ee2b0f
...
001f:trace:ole:CoGetContextToken (0x2c1e5f4)
001f:Ret  ole32.CoGetContextToken() retval=800401f0 ret=79ee2b0f
...
001f:Call ole32.CoInitializeEx(00000000,00000000) ret=79ebfba8
...
001f:trace:ole:apartment_get_or_create entering the multithreaded apartment
80000cafe
...
001f:trace:ole:apartment_addref 80000cafe: before = 1 
...
--- snip ---

Another debugger helper/worker thread gets created (tid=0021) which *never*
initializes COM explicitly - unlike the other threads:

--- snip ---
...
0009:Call
KERNEL32.CreateThread(00000000,00000000,63ea71dc,00176a58,00000000,00176a68)
ret=63ea5b42
0009:Ret  KERNEL32.CreateThread() retval=0000018c ret=63ea5b42
0009:Call ole32.CoCreateInstance(63ea5bfc,00000000,00000001,63ea5c0c,001768e8)
ret=63ea5bda
0009:trace:ole:CoCreateInstance (rclsid={e5cb7a31-7512-11d2-89ce-0080c792e5d8},
pUnkOuter=(nil), dwClsContext=00000001,
riid={809c652e-7396-11d2-9771-00a0c9b4d50c}, ppv=0x1768e8) 
...
0021:Call ole32.CoGetContextToken(0319d730) ret=79ee2b0f
0021:trace:ole:CoGetContextToken (0x319d730)
0021:Ret  ole32.CoGetContextToken() retval=800401f0 ret=79ee2b0f
...
0021:Call ole32.CoGetObjectContext(79ee2a20,00173224) ret=79f82943
...
0021:trace:ole:CoGetObjectContext ({00000000-0000-0000-c000-000000000046},
0x173224)
0021:err:ole:CoGetObjectContext apartment not initialised
0021:Ret  ole32.CoGetObjectContext() retval=800401f0 ret=79f82943 
...
0021:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,0319d644)
ret=78158dd3
0021:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b842f46
ip=7b842f46 tid=0021
0021:trace:seh:raise_exception  info[0]=19930520
0021:trace:seh:raise_exception  info[1]=0319d6b8
0021:trace:seh:raise_exception  info[2]=79f9acc4
0021:trace:seh:raise_exception  eax=7b82ca8d ebx=7b8d1398 ecx=00000000
edx=0319d630 esi=0319d630 edi=0319d5b0
0021:trace:seh:raise_exception  ebp=0319d598 esp=0319d534 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00000246
...
<managed debugging hangs here>
--- snip ---

This is most likely same problem domain as bug 17902 (fixed by
http://source.winehq.org/git/wine.git/?a=commit;h=bd4975acb0b682bbf2b4934d12f942ea629f5bbb
- "ole32: Use existing MTA in CoGetClassObject and CoCreateInstance")

Since the thread in question doesn't initialize COM at all, CoGetContextToken
and CoGetObjectContext most likely need to look at existing MTA(s).

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list