2017.03.17 14:29 "[Tiff] TIFFSetErrorHandler vs TIFFSetErrorHandlerExt", by Dinesh Iyer

2017.03.17 17:02 "Re: [Tiff] TIFFSetErrorHandler vs TIFFSetErrorHandlerExt", by Bob Friesenhahn

Thanks Bob.

If I understand you correctly, I cannot have multiple threads each with its own handler throwing errors/warnings. i need to ensure that only one thread does the error handling, am I correct?

You can only register one error handling function at a time. The function will be called under the same context as the thread which encountered the problem. Knowing that it is called under the same execution context can be very useful.

As a follow up, do i have to set the client_data field with a pointer to my class such that it is accessible in the callbacks?

The client_data is for you. If you use TIFFClientOpen() then it is provided so that you can use it has a handle for I/O or other purposes (e.g. also for errors).

In GraphicsMagick I use TIFFSetErrorHandler()/TIFFSetWarningHandler() and I use thread-specific data (POSIX or Windows) to reconcile between the error callback data and what the thread was working on. I don't use client_data for that purpose. This approach works if there is just one thread which ever does libtiff operations for a given handle.

The reason for the approach in GraphicsMagick is that the implementation pre-dates the addition of TIFFSetErrorHandlerExt() and it also works for older libtiff.

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