diff options
author | Robin Watts <robin.watts@artifex.com> | 2012-01-18 15:49:09 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2012-01-19 12:40:24 +0000 |
commit | 40f4ed22806b88ba0e26c458915d4695f1f7c201 (patch) | |
tree | bacdebee1932d294f8233a8fb14cb86383e5f107 /pdf/pdf_cmap.c | |
parent | 2c836b57d5295b47655988cf8deaffda731e1c3c (diff) | |
download | mupdf-40f4ed22806b88ba0e26c458915d4695f1f7c201.tar.xz |
Multi-threading support for MuPDF
When we moved over to a context based system, we laid the foundation
for a thread-safe mupdf. This commit should complete that process.
Firstly, fz_clone_context is properly implemented so that it
makes a new context, but shares certain sections (currently
just the allocator, and the store).
Secondly, we add locking (to parts of the code that have
previously just had placeholder LOCK/UNLOCK comments). Functions
to lock and unlock a mutex are added to the allocator structure;
omit these (as is the case today) and no multithreading is
(safely) possible. The context will refuse to clone if these are
not provided.
Finally we flesh out the LOCK/UNLOCK comments to be real calls of
the functions - unfortunately this requires us to plumb fz_context
into the fz_keep_storable function (and all the fz_keep_xxx
functions that call it). This is the largest section of the patch.
No changes expected to any test files.
Diffstat (limited to 'pdf/pdf_cmap.c')
-rw-r--r-- | pdf/pdf_cmap.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/pdf/pdf_cmap.c b/pdf/pdf_cmap.c index bb1c1ea0..4430979c 100644 --- a/pdf/pdf_cmap.c +++ b/pdf/pdf_cmap.c @@ -68,9 +68,9 @@ pdf_new_cmap(fz_context *ctx) /* Could be a macro for speed */ pdf_cmap * -pdf_keep_cmap(pdf_cmap *cmap) +pdf_keep_cmap(fz_context *ctx, pdf_cmap *cmap) { - return (pdf_cmap *)fz_keep_storable(&cmap->storable); + return (pdf_cmap *)fz_keep_storable(ctx, &cmap->storable); } /* Could be a macro for speed */ @@ -87,7 +87,7 @@ pdf_set_usecmap(fz_context *ctx, pdf_cmap *cmap, pdf_cmap *usecmap) if (cmap->usecmap) pdf_drop_cmap(ctx, cmap->usecmap); - cmap->usecmap = pdf_keep_cmap(usecmap); + cmap->usecmap = pdf_keep_cmap(ctx, usecmap); if (cmap->codespace_len == 0) { |