On 03 Aug 2009, at 08:49, Wimpie Nortje wrote:
The FPC thread setup code (CAllocateThreadVars, InitThread) happens
inside the newly created thread before the user's thread function
starts.
The only viable way I see to get support from the C library is for
it to inform FPC about a new thread after creation, but this means
that the C user's thread function has already started executing when
FPC gets the new ID. Is it possible to do the FPC thread setup from
outside the new thread?
No, because those functions need the thread ID. And e.g.
CAllocateThreadVars calls pthread_setspecific(), which is defined as
associating a value with the current thread.
I think the "easiest" way for you to do this would be to do something
similar to what the FPC rtl does: write your own function that does
all of this initialisation, and pass that one to pthread_create as the
function to run in the new thread. Then from this function perform all
initialisation, and finally call the original function.
Suppose this setup can be completed before the library starts
calling FPC callbacks, would all the current memory problems then be
solved?
Only if you can also guarantee that all thread exits can be hooked by
your library (so no direct pthread_exit() calls from the user
function) and that you then call FPC's DoneThread.
Jonas
___
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal