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

Reply via email to