2006.09.22 14:20 "[Tiff] libjpeg", by Philip Watkinson

2006.09.22 16:42 "Re: [Tiff] libjpeg", by Bob Friesenhahn

Is libjpeg thread safe?

I believe it is. Of course, 'thread safe' is a misleading classification, in that it seems to indicate calling threads can do

Libtiff's tif_jpeg.c and tif_ojpeg.c are not thread safe due their use of setjmp()/longjmp(). These C APIs were defined long before programs used threads, and saving context may just plain not work. The assembly code used to save context can be quite arcane. For example, the referenced context (which also preserves all necessary CPU registers, including private ones) may be rendered incorrect due to operation of the thread scheduler. The CPU (or hardware thread context) used to throw the exception (via longjmp()) may not be the same as was used to save the context using setjmp(). As processor hardware continues to move forward toward multi-core/multi-thread the problem will just get worse.

Of course if one assumes that there is never an error, then you are blissfully ok. :-)

Bob Friesenhahn
bfriesen@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer, http://www.GraphicsMagick.org/