Hi, As the subject says I am looking for some info about wine.
1) I am trying to understand how wine implements COM objects. I have read the wiki pages on COM and DCOM objects but I am interested in some further assistance.
Whats the easiest way to spot a function implementing part of an interface? Is there some kind of name scheme I can follow?
I can find the interface definitions easily enough in the header files or the idl files. I am having a little more trouble about the implementation.
About the IDL files: is every interface supposed to be defined in an IDL? Or only certain ones? And how would i know the difference? For instance I found the IQueryInfo interface which is only defined in an header file without any association to a CLSID nor does there seem to be an implementation.
2) I am trying to debug a deadlock of the x11 driver in Icewind Dale 1.
From the +relay,+opengl log it looks like one thread(#28) that deadlocks
calls SuspendThread with a HANDLE maybe to itself. #28 isn't suspended though and the only other thread(#9) running is interrupted within the x11 critical section doing an opengl call. When #28 wants to do an opengl call himself, it deadlocks. So maybe its #9 which is supposed to be suspended. Can it happen that the wine server suspends a thread in a critical section?
How can I get the thread id from that HANDLE? if i try to run with the +server debug channel enabled the problem will go away and my log output will be seriously garbled with half the chars at the beginning of a line missing sometimes.
Another problem will show up though that is when i run a debugger and do a bt the app seems to hang showing a message box. Unfortunately I am running in full screen mode in a virtual desktop and see no possibility to get to that message box. It seems to be hidden behind the full screen'd Icewind Dale. Is that a bug or working as intended?
Any ideas how I could debug this further?
Sorry for the Wall of Text(TM)
Thank you for your assistance