|
mupdf
|
#include <context.h>
Public Attributes | |
| void * | user |
| void(* | lock )(void *user, int lock) |
| void(* | unlock )(void *user, int lock) |
Locking functions
MuPDF is kept deliberately free of any knowledge of particular threading systems. As such, in order for safe multi-threaded operation, we rely on callbacks to client provided functions.
A client is expected to provide FZ_LOCK_MAX number of mutexes, and a function to lock/unlock each of them. These may be recursive mutexes, but do not have to be.
If a client does not intend to use multiple threads, then it may pass NULL instead of a lock structure.
In order to avoid deadlocks, we have one simple rule internally as to how we use locks: We can never take lock n when we already hold any lock i, where 0 <= i <= n. In order to verify this, we have some debugging code, that can be enabled by defining FITZ_DEBUG_LOCKING.
| void(* fz_locks_context::lock) (void *user, int lock) |
| void* fz_locks_context::user |