On Mon, 5 Jun 2023, Beauregard,Christophe (ECCC) wrote:
> FWIW, I think I may have figured out what's happening. It's probably
> something to note in the
http://www.graphicsmagick.org/OpenMP.html
> documentation.
>
> In a nutshell, my understanding is that libgomp keeps track of its
> thread pool in thread local storage. When that thread local storage
> happens to be in the main process, all is well, everything works
> fine, etc. When that thread local storage is in a transient pthread
> (and, apparently, you're running on a certain class memory/CPU
> configuration) and your transient thread terminates, that thread
> local storage doesn't (always) get cleaned up.
This is very unfortunate and seems like a serious bug.
> I suspect this isn't a particularly desirable situation, as
> GraphicsMagick appears to have put at least some effort into making
> the API thread-safe.
Considerable effort has been put into making the API as thread-safe as
possible, but invoking OpenMP code from a POSIX thread (or other sort
of thread) has not been significantly tested.
It would be good to write a bug report against gomp (it seems to still
be a GCC product) so that there is hope to get this fixed, or be
informed of a work-around.