Oh man Phil, you're getting yourself into quite the rabbit hole here. Windows threading is not fun or easy. I seem to recall you saying something about the Factor sources using Boost? If that is the case, I would definitely just use the Boost threading library. Windows threading is a can of worms that you might not want to open. Good luck with it, though :)
Cheers, Tim On Mon, Jul 27, 2009 at 4:54 AM, Phil Dawes <[email protected]> wrote: > Hi All, > > Quick update: > > Last night I managed to get win32 factor to bootstrap and run on my > linux laptop using wine and mingw32 so I can now do some windows > portability coding. Unfortunately I'm having some problems with the > reentrancy code, which I guess are also problems on 'real' win32 > platforms too. > > After some limited testing my best guess is that thread-local-storage is > causing problems with LoadLibrary (dlsym) loaded symbols. Internal > variables are fine but those externally referenced in factor code > indirectly using the rel-dlsym word (e.g. words in x86.factor) seem to > crash the vm. > > I found this on the msdn site: > http://msdn.microsoft.com/en-us/library/2s9wt68x.aspx > > "If a DLL declares any nonlocal data or object as __declspec( thread > ), it can cause a protection fault if dynamically loaded. After the DLL > is loaded with LoadLibrary, it causes system failure whenever the code > references the nonlocal __declspec( thread ) data. Because the global > variable space for a thread is allocated at run time, the size of this > space is based on a calculation of the requirements of the application > plus the requirements of all the DLLs that are statically linked. When > you use LoadLibrary, there is no way to extend this space to allow for > the thread local variables declared with __declspec( thread ). Use the > TLS APIs, such as TlsAlloc, in your DLL to allocate TLS if the DLL might > be loaded with LoadLibrary. " > > So now I don't know whether to dick around with TlsAlloc or to wrap this > state up in functions (which I guess would pose a performance penalty). > > Also I don't know much at all about win32 programming, bit it looks like > using TlsAlloc involves using functions (TlsSetValue, TlsGetValue) to > get and set TLS variables, which is a bit shite: > > http://msdn.microsoft.com/en-us/library/ms686997%28VS.85%29.aspx > > Have I got the wrong end of the stick here? Does anybody here understand > win32 threading a bit better than me? > > Any help or ideas much appreciated, > > Cheers, > > Phil > > > > > ------------------------------------------------------------------------------ > _______________________________________________ > Factor-talk mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/factor-talk >
------------------------------------------------------------------------------
_______________________________________________ Factor-talk mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/factor-talk
