[webkit-help] Exceptions in WinCairo XP

Anthony Johnson anthony.johnson at flexsim.com
Fri Jan 20 22:41:11 PST 2012


Regarding my last post, here's what I've found since then. The code is
actually getting into lookup_composite_function(), but it's throwing the
exception on the first statement inside lookup_composite_function(), at
line 367 in pixman.c:

/* Check cache for fast paths */
cache = PIXMAN_GET_THREAD_LOCAL (fast_path_cache);

The exception happens because the variable fast_path_cache is declared as
__declspec(thread), i.e. thread local storage, and also because WinLauncher
was fairly recently changed to delay load the Webkit dll. According to
MSDN<http://msdn.microsoft.com/en-us/library/9w1sdazb(v=vs.80).aspx>,
"The use of the *thread* attribute may interfere with delay loading of DLL
imports." It goes on to describe this issue in more detail in the
documentation for delay loading
dlls<http://msdn.microsoft.com/en-us/library/yx1x886y.aspx>.
As to why it actually works in Win7 and Vista, I have no idea. Maybe
they've done some fixes in LoadLibrary() that initializes the thread local
storage properly. Anyway, by changing WinLauncher back to not being
delay-loaded, I was able to fix the problem in XP.

So apparently the solution for getting it to work in XP is that WinLauncher
(and our own implementations) should not delay load Webkit. I would like to
have the option of delay loading, however. It seems that there are options
for defining these variables differently when compiling pixman (in
pixman-compiler.h where PIXMAN_GET_THREAD_LOCAL() is defined). It looks
like if you define PIXMAN_NO_TLS, then the variables will just be static,
not thread local. Or if you define __MINGW32__ it will use windows mutexes
and the TLS commands to access them. Anyway, it seems like it's possible to
do; I just don't know the other implications that those definitions would
have. Anyway, my thoughts. Experts, any advice?

Anthony Johnson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-help/attachments/20120120/f919d1dd/attachment.html>


More information about the webkit-help mailing list