[fpc-pascal] AllocateThreadVars ?

Adriaan van Os adriaan at adriaan.biz
Thu Oct 10 14:35:43 CEST 2024


Sven Barth via fpc-pascal wrote:
> Adriaan van Os via fpc-pascal <fpc-pascal at lists.freepascal.org 
> <mailto:fpc-pascal at lists.freepascal.org>> schrieb am Mi., 9. Okt. 2024, 
> 16:44:
> 
>     I have a program on MacOS that calls CoreAudio which calls the
>     application back in a so-called
>     AURendererCallback in a separate (com.apple.audio.IOThread.client)
>     thread. This is a pthread
>     created by the system software, not by the FreePascal RTL.
> 
>     In that thread, a FreePascal try except block doesn't catch an
>     exception. A globally installed
>     TExceptProc does. if I look in the RTL code, it looks like a thread
>     created with BeginThread does
>     some extra things, like calling SysAllocateThreadVars. A comment
>     notes that exception handling
>     depends on it.
> 
>     So, it seems plausible that SysAllocateThreadVars (or the
>     AllocateThreadVars method of the current
>     TThreadManager) must be called once for  pthreads created by the
>     system software ? How ? Obviously
>     I couldn't use a threadvar that tells me whether AllocateThreadVars
>     has been called already ?
> 
> 
> You already wrote that you might have found a different cause, but 
> nevertheless to clarify: the RTL initialization for the thread (which 
> includes AllocateThreadVars) should already be done transparently by the 
> RTL through hooks provided by pthread. 

Yes, I found the hook in cthreads.pp. Thanks for the reply.

In a small test program, exception handling works, in the main thread, with BeginThread as well as 
with pthread_create. In the big program, it doesn't. So the mystery still to solve, is why ....

Regards,

Adriaan van Os



More information about the fpc-pascal mailing list