Sven Barth via fpc-pascal wrote:
Adriaan van Os via fpc-pascal <fpc-pascal@lists.freepascal.org
<mailto:fpc-pascal@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
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal