diff --git a/goo/GooMutex.h b/goo/GooMutex.h index fbef476..bce2498 100644 --- a/goo/GooMutex.h +++ b/goo/GooMutex.h @@ -60,20 +60,19 @@ typedef pthread_mutex_t GooMutex; #endif -namespace Poppler { - enum LockMode { - DoNotLock, // for conditional locks: do not lock - DoLock // for conditional locks: do lock - }; - - class Lock { - public: - Lock(GooMutex *mutexA) : mutex(mutexA) { mode = DoLock; gLockMutex(mutex); } - Lock(GooMutex *mutexA, LockMode modeA) : mutex(mutexA) { mode = modeA; if (mode == DoLock) gLockMutex(mutex); } - ~Lock() { if (mode == DoLock) gUnlockMutex(mutex); } - private: - GooMutex *mutex; - LockMode mode; - }; -} +enum MutexLockMode { + DoNotLockMutex, // for conditional locks: do not lock + DoLockMutex // for conditional locks: do lock +}; + +class MutexLocker { +public: + MutexLocker(GooMutex *mutexA, MutexLockMode modeA = DoLockMutex) : mutex(mutexA), mode(modeA) { if (mode == DoLockMutex) gLockMutex(mutex); } + ~MutexLocker() { if (mode == DoLockMutex) gUnlockMutex(mutex); } + +private: + GooMutex *mutex; + const MutexLockMode mode; +}; + #endif diff --git a/poppler/Annot.cc b/poppler/Annot.cc index 0356d8e..247919f 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -68,11 +68,11 @@ #include #if MULTITHREADED -# define lockAnnot() Poppler::Lock lock(&mutex) -# define condLockAnnot(X) Poppler::Lock condlock(&mutex, (X)) +# define annotLocker() MutexLocker locker(&mutex) +# define annotCondLocker(X) MutexLocker locker(&mutex, (X)) #else -# define lockAnnot() -# define condLockAnnot(X) +# define annotLocker() +# define annotCondLocker(X) #endif #define fieldFlagReadOnly 0x00000001 @@ -1213,7 +1213,7 @@ void Annot::initialize(PDFDoc *docA, Dict *dict) { if (dict->lookupNF("P", &obj1)->isRef()) { Ref ref = obj1.getRef(); - page = doc->getCatalog()->findPage (ref.num, ref.gen, Poppler::DoNotLock); + page = doc->getCatalog()->findPage (ref.num, ref.gen, DoNotLockMutex); } else { page = 0; } @@ -1350,8 +1350,8 @@ GBool Annot::inRect(double x, double y) const { return rect->contains(x, y); } -void Annot::update(const char *key, Object *value, Poppler::LockMode lock) { - condLockAnnot(lock); +void Annot::update(const char *key, Object *value, MutexLockMode lock) { + annotCondLocker(lock); /* Set M to current time, unless we are updating M itself */ if (strcmp(key, "M") != 0) { delete modified; @@ -1368,7 +1368,7 @@ void Annot::update(const char *key, Object *value, Poppler::LockMode lock) { } void Annot::setContents(GooString *new_content) { - lockAnnot(); + annotLocker(); delete contents; if (new_content) { @@ -1384,11 +1384,11 @@ void Annot::setContents(GooString *new_content) { Object obj1; obj1.initString(contents->copy()); - update ("Contents", &obj1, Poppler::DoNotLock); + update ("Contents", &obj1, DoNotLockMutex); } void Annot::setName(GooString *new_name) { - lockAnnot(); + annotLocker(); delete name; if (new_name) { @@ -1399,11 +1399,11 @@ void Annot::setName(GooString *new_name) { Object obj1; obj1.initString(name->copy()); - update ("NM", &obj1, Poppler::DoNotLock); + update ("NM", &obj1, DoNotLockMutex); } void Annot::setModified(GooString *new_modified) { - lockAnnot(); + annotLocker(); delete modified; if (new_modified) @@ -1413,25 +1413,25 @@ void Annot::setModified(GooString *new_modified) { Object obj1; obj1.initString(modified->copy()); - update ("M", &obj1, Poppler::DoNotLock); + update ("M", &obj1, DoNotLockMutex); } void Annot::setFlags(Guint new_flags) { - lockAnnot(); + annotLocker(); Object obj1; flags = new_flags; obj1.initInt(flags); - update ("F", &obj1, Poppler::DoNotLock); + update ("F", &obj1, DoNotLockMutex); } void Annot::setBorder(AnnotBorderArray *new_border) { - lockAnnot(); + annotLocker(); delete border; if (new_border) { Object obj1; new_border->writeToObject(xref, &obj1); - update ("Border", &obj1, Poppler::DoNotLock); + update ("Border", &obj1, DoNotLockMutex); border = new_border; } else { border = NULL; @@ -1439,13 +1439,13 @@ void Annot::setBorder(AnnotBorderArray *new_border) { } void Annot::setColor(AnnotColor *new_color) { - lockAnnot(); + annotLocker(); delete color; if (new_color) { Object obj1; new_color->writeToObject(xref, &obj1); - update ("C", &obj1, Poppler::DoNotLock); + update ("C", &obj1, DoNotLockMutex); color = new_color; } else { color = NULL; @@ -1453,7 +1453,7 @@ void Annot::setColor(AnnotColor *new_color) { } void Annot::setPage(int pageIndex, GBool updateP) { - lockAnnot(); + annotLocker(); Page *pageobj = doc->getPage(pageIndex); Object obj1; @@ -1467,12 +1467,12 @@ void Annot::setPage(int pageIndex, GBool updateP) { } if (updateP) { - update("P", &obj1, Poppler::DoNotLock); + update("P", &obj1, DoNotLockMutex); } } -void Annot::setAppearanceState(const char *state, Poppler::LockMode lock) { - condLockAnnot(lock); +void Annot::setAppearanceState(const char *state, MutexLockMode lock) { + annotCondLocker(lock); if (!state) return; @@ -1484,7 +1484,7 @@ void Annot::setAppearanceState(const char *state, Poppler::LockMode lock) { Object obj1; obj1.initName(state); - update ("AS", &obj1, Poppler::DoNotLock); + update ("AS", &obj1, DoNotLockMutex); // The appearance state determines the current appearance stream appearance.free(); @@ -1496,19 +1496,19 @@ void Annot::setAppearanceState(const char *state, Poppler::LockMode lock) { } void Annot::invalidateAppearance() { - lockAnnot(); + annotLocker(); if (appearStreams) { // Remove existing appearance streams appearStreams->removeAllStreams(); } delete appearStreams; appearStreams = NULL; - setAppearanceState("Off", Poppler::DoNotLock); // Default appearance state + setAppearanceState("Off", DoNotLockMutex); // Default appearance state Object obj1; obj1.initNull(); - update ("AP", &obj1, Poppler::DoNotLock); // Remove AP - update ("AS", &obj1, Poppler::DoNotLock); // Remove AS + update ("AP", &obj1, DoNotLockMutex); // Remove AP + update ("AS", &obj1, DoNotLockMutex); // Remove AS } double Annot::getXMin() { @@ -1538,16 +1538,18 @@ void Annot::removeReferencedObjects() { } void Annot::incRefCnt() { - lockAnnot(); + annotLocker(); refCnt++; } void Annot::decRefCnt() { - lockAnnot(); + gLockMutex(&mutex); if (--refCnt == 0) { + gUnlockMutex(&mutex); delete this; return; } + gUnlockMutex(&mutex); } Annot::~Annot() { @@ -1774,7 +1776,7 @@ GBool Annot::isVisible(GBool printing) { void Annot::draw(Gfx *gfx, GBool printing) { Object obj; - lockAnnot(); + annotLocker(); if (!isVisible (printing)) return; @@ -2392,7 +2394,7 @@ void AnnotText::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { ca = opacity; @@ -2542,7 +2544,7 @@ void AnnotLink::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); // draw the appearance stream appearance.fetch(gfx->getXRef(), &obj); gfx->drawAnnot(&obj, border, color, @@ -2972,7 +2974,7 @@ void AnnotFreeText::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { generateFreeTextAppearance(); } @@ -3445,7 +3447,7 @@ void AnnotLine::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { generateLineAppearance(); } @@ -3611,7 +3613,7 @@ void AnnotTextMarkup::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull() || type == typeHighlight) { GBool blendMultiply = gTrue; ca = opacity; @@ -3811,7 +3813,7 @@ AnnotWidget::~AnnotWidget() { void AnnotWidget::initialize(PDFDoc *docA, Dict *dict) { Object obj1; - form = doc->getCatalog()->getForm(Poppler::DoNotLock); + form = doc->getCatalog()->getForm(DoNotLockMutex); if(dict->lookup("H", &obj1)->isName()) { const char *modeName = obj1.getName(); @@ -4997,7 +4999,7 @@ void AnnotWidget::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); addDingbatsResource = gFalse; // Only construct the appearance stream when @@ -5110,7 +5112,7 @@ void AnnotMovie::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull() && movie->getShowPoster()) { int width, height; Object poster; @@ -5419,7 +5421,7 @@ void AnnotGeometry::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { ca = opacity; @@ -5741,7 +5743,7 @@ void AnnotPolygon::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { appearBBox = new AnnotAppearanceBBox(rect); ca = opacity; @@ -5979,7 +5981,7 @@ void AnnotInk::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { appearBBox = new AnnotAppearanceBBox(rect); ca = opacity; @@ -6212,7 +6214,7 @@ void AnnotFileAttachment::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { ca = opacity; @@ -6379,7 +6381,7 @@ void AnnotSound::draw(Gfx *gfx, GBool printing) { if (!isVisible (printing)) return; - lockAnnot(); + annotLocker(); if (appearance.isNull()) { ca = opacity; diff --git a/poppler/Annot.h b/poppler/Annot.h index 806d813..d6c4771 100644 --- a/poppler/Annot.h +++ b/poppler/Annot.h @@ -572,7 +572,7 @@ public: // new_color. void setColor(AnnotColor *new_color); - void setAppearanceState(const char *state, Poppler::LockMode lock = Poppler::DoLock); + void setAppearanceState(const char *state, MutexLockMode lock = DoLockMutex); // Delete appearance streams and reset appearance state void invalidateAppearance(); @@ -627,7 +627,7 @@ protected: // Updates the field key of the annotation dictionary // and sets M to the current time - void update(const char *key, Object *value, Poppler::LockMode lock = Poppler::DoLock); + void update(const char *key, Object *value, MutexLockMode lock = DoLockMutex); int refCnt; diff --git a/poppler/Array.cc b/poppler/Array.cc index 142dafc..0583091 100644 --- a/poppler/Array.cc +++ b/poppler/Array.cc @@ -35,9 +35,9 @@ #include "Array.h" #if MULTITHREADED -# define lockArray() Poppler::Lock lock(&mutex) +# define arrayLocker() MutexLocker locker(&mutex) #else -# define lockArray() +# define arrayLocker() #endif //------------------------------------------------------------------------ // Array @@ -65,7 +65,7 @@ Array::~Array() { } Object *Array::copy(XRef *xrefA, Object *obj) { - lockArray(); + arrayLocker(); obj->initArray(xrefA); for (int i = 0; i < length; ++i) { Object obj1; @@ -75,19 +75,19 @@ Object *Array::copy(XRef *xrefA, Object *obj) { } int Array::incRef() { - lockArray(); + arrayLocker(); ++ref; return ref; } int Array::decRef() { - lockArray(); + arrayLocker(); --ref; return ref; } void Array::add(Object *elem) { - lockArray(); + arrayLocker(); if (length == size) { if (length == 0) { size = 8; @@ -101,7 +101,7 @@ void Array::add(Object *elem) { } void Array::remove(int i) { - lockArray(); + arrayLocker(); if (i < 0 || i >= length) { #ifdef DEBUG_MEM abort(); diff --git a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc index 6f99ace..8ca5abb 100644 --- a/poppler/CairoFontEngine.cc +++ b/poppler/CairoFontEngine.cc @@ -60,9 +60,9 @@ #endif #if MULTITHREADED -# define lockFontEngine() Poppler::Lock lock(&mutex) +# define fontEngineLocker() MutexLocker locker(&mutex) #else -# define lockFontEngine() +# define fontEngineLocker() #endif //------------------------------------------------------------------------ @@ -787,7 +787,7 @@ CairoFontEngine::getFont(GfxFont *gfxFont, PDFDoc *doc, GBool printing, XRef *xr CairoFont *font; GfxFontType fontType; - lockFontEngine(); + fontEngineLocker(); ref = *gfxFont->getID(); for (i = 0; i < cairoFontCacheSize; ++i) { diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc index d9fa229..7f513c6 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -57,11 +57,11 @@ #include "FileSpec.h" #if MULTITHREADED -# define lockCatalog() Poppler::Lock lock(&mutex) -# define condLockCatalog(X) Poppler::Lock condlock(&mutex, (X)) +# define catalogLocker() MutexLocker locker(&mutex) +# define catalogCondLocker(X) MutexLocker locker(&mutex, (X)) #else -# define lockCatalog() -# define condLockCatalog(X) +# define catalogLocker() +# define catalogCondLocker(X) #endif //------------------------------------------------------------------------ // Catalog @@ -191,7 +191,7 @@ GooString *Catalog::readMetadata() { Dict *dict; Object obj; - lockCatalog(); + catalogLocker(); if (metadata.isNone()) { Object catDict; @@ -224,7 +224,7 @@ Page *Catalog::getPage(int i) { if (i < 1) return NULL; - lockCatalog(); + catalogLocker(); if (i > lastCachedPage) { GBool cached = cachePageTree(i); if ( cached == gFalse) { @@ -234,11 +234,11 @@ Page *Catalog::getPage(int i) return pages[i-1]; } -Ref *Catalog::getPageRef(int i, Poppler::LockMode lock) +Ref *Catalog::getPageRef(int i, MutexLockMode lock) { if (i < 1) return NULL; - condLockCatalog(lock); + catalogCondLocker(lock); if (i > lastCachedPage) { GBool cached = cachePageTree(i); if ( cached == gFalse) { @@ -294,7 +294,7 @@ GBool Catalog::cachePageTree(int page) return gFalse; } - pagesSize = getNumPages(Poppler::DoNotLock); + pagesSize = getNumPages(DoNotLockMutex); pages = (Page **)gmallocn(pagesSize, sizeof(Page *)); pageRefs = (Ref *)gmallocn(pagesSize, sizeof(Ref)); for (int i = 0; i < pagesSize; ++i) { @@ -421,7 +421,7 @@ GBool Catalog::cachePageTree(int page) return gFalse; } -int Catalog::findPage(int num, int gen, Poppler::LockMode lock) { +int Catalog::findPage(int num, int gen, MutexLockMode lock) { int i; for (i = 0; i < getNumPages(lock); ++i) { @@ -446,7 +446,7 @@ LinkDest *Catalog::findDest(GooString *name) { obj1.free(); } if (!found) { - lockCatalog(); + catalogLocker(); if (getDestNameTree()->lookup(name, &obj1)) found = gTrue; else @@ -481,7 +481,7 @@ FileSpec *Catalog::embeddedFile(int i) { Object efDict; Object obj; - lockCatalog(); + catalogLocker(); obj = getEmbeddedFileNameTree()->getValue(i); FileSpec *embeddedFile = 0; if (obj.isRef()) { @@ -502,7 +502,7 @@ GooString *Catalog::getJS(int i) Object obj; // getJSNameTree()->getValue(i) returns a shallow copy of the object so we // do not need to free it - lockCatalog(); + catalogLocker(); getJSNameTree()->getValue(i).fetch(xref, &obj); if (!obj.isDict()) { @@ -538,7 +538,7 @@ GooString *Catalog::getJS(int i) Catalog::PageMode Catalog::getPageMode() { - lockCatalog(); + catalogLocker(); if (pageMode == pageModeNull) { Object catDict, obj; @@ -574,7 +574,7 @@ Catalog::PageMode Catalog::getPageMode() { Catalog::PageLayout Catalog::getPageLayout() { - lockCatalog(); + catalogLocker(); if (pageLayout == pageLayoutNull) { Object catDict, obj; @@ -772,9 +772,9 @@ GBool Catalog::indexToLabel(int index, GooString *label) } } -int Catalog::getNumPages(Poppler::LockMode lock) +int Catalog::getNumPages(MutexLockMode lock) { - condLockCatalog((numPages == -1 && lock == Poppler::DoLock) ? lock : Poppler::DoNotLock); + catalogCondLocker((numPages == -1 && lock == DoLockMutex) ? DoLockMutex : DoNotLockMutex); if (numPages == -1) { Object catDict, pagesDict, obj; @@ -816,7 +816,7 @@ int Catalog::getNumPages(Poppler::LockMode lock) PageLabelInfo *Catalog::getPageLabelInfo() { - lockCatalog(); + catalogLocker(); if (!pageLabelInfo) { Object catDict; Object obj; @@ -829,7 +829,7 @@ PageLabelInfo *Catalog::getPageLabelInfo() } if (catDict.dictLookup("PageLabels", &obj)->isDict()) { - pageLabelInfo = new PageLabelInfo(&obj, getNumPages(Poppler::DoLock)); + pageLabelInfo = new PageLabelInfo(&obj, getNumPages(DoNotLockMutex)); } obj.free(); catDict.free(); @@ -840,7 +840,7 @@ PageLabelInfo *Catalog::getPageLabelInfo() Object *Catalog::getStructTreeRoot() { - lockCatalog(); + catalogLocker(); if (structTreeRoot.isNone()) { Object catDict; @@ -860,7 +860,7 @@ Object *Catalog::getStructTreeRoot() Object *Catalog::getOutline() { - lockCatalog(); + catalogLocker(); if (outline.isNone()) { Object catDict; @@ -880,7 +880,7 @@ Object *Catalog::getOutline() Object *Catalog::getDests() { - lockCatalog(); + catalogLocker(); if (dests.isNone()) { Object catDict; @@ -916,9 +916,9 @@ Catalog::FormType Catalog::getFormType() return res; } -Form *Catalog::getForm(Poppler::LockMode lock) +Form *Catalog::getForm(MutexLockMode lock) { - condLockCatalog(lock); + catalogCondLocker(lock); if (!form) { if (acroForm.isDict()) { form = new Form(doc, &acroForm); @@ -932,7 +932,7 @@ Form *Catalog::getForm(Poppler::LockMode lock) ViewerPreferences *Catalog::getViewerPreferences() { - lockCatalog(); + catalogLocker(); if (!viewerPrefs) { if (viewerPreferences.isDict()) { viewerPrefs = new ViewerPreferences(viewerPreferences.getDict()); diff --git a/poppler/Catalog.h b/poppler/Catalog.h index 0ddc30a..a48f606 100644 --- a/poppler/Catalog.h +++ b/poppler/Catalog.h @@ -107,13 +107,13 @@ public: GBool isOk() { return ok; } // Get number of pages. - int getNumPages(Poppler::LockMode lock = Poppler::DoLock); + int getNumPages(MutexLockMode lock = DoLockMutex); // Get a page. Page *getPage(int i); // Get the reference for a page object. - Ref *getPageRef(int i, Poppler::LockMode lock = Poppler::DoLock); + Ref *getPageRef(int i, MutexLockMode lock = DoLockMutex); // Return base URI, or NULL if none. GooString *getBaseURI() { return baseURI; } @@ -127,7 +127,7 @@ public: // Find a page, given its object ID. Returns page number, or 0 if // not found. - int findPage(int num, int gen, Poppler::LockMode lock = Poppler::DoLock); + int findPage(int num, int gen, MutexLockMode lock = DoLockMutex); // Find a named destination. Returns the link destination, or // NULL if is not a destination. @@ -165,7 +165,7 @@ public: }; FormType getFormType(); - Form* getForm(Poppler::LockMode lock = Poppler::DoLock); + Form* getForm(MutexLockMode lock = DoLockMutex); ViewerPreferences *getViewerPreferences(); diff --git a/poppler/Dict.cc b/poppler/Dict.cc index a349650..d0c6be4 100644 --- a/poppler/Dict.cc +++ b/poppler/Dict.cc @@ -41,9 +41,9 @@ #include "Dict.h" #if MULTITHREADED -# define lockDict() Poppler::Lock lock(&mutex) +# define dictLocker() MutexLocker locker(&mutex) #else -# define lockDict() +# define dictLocker() #endif //------------------------------------------------------------------------ // Dict @@ -102,7 +102,7 @@ Dict::Dict(Dict* dictA) { } Dict *Dict::copy(XRef *xrefA) { - lockDict(); + dictLocker(); Dict *dictA = new Dict(this); dictA->xref = xrefA; for (int i=0; i= SORT_LENGTH_LOWER_LIMIT) { - lockDict(); + dictLocker(); sorted = gTrue; std::sort(entries, entries+length, cmpDictEntries); } @@ -193,7 +193,7 @@ GBool Dict::hasKey(const char *key) { } void Dict::remove(const char *key) { - lockDict(); + dictLocker(); if (sorted) { const int pos = binarySearch(key, entries, length); if (pos != -1) { @@ -235,7 +235,7 @@ void Dict::set(const char *key, Object *val) { } e = find (key); if (e) { - lockDict(); + dictLocker(); e->val.free(); e->val = *val; } else { diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc index 5a8c3d3..1407109 100644 --- a/poppler/PDFDoc.cc +++ b/poppler/PDFDoc.cc @@ -77,9 +77,9 @@ #include "Hints.h" #if MULTITHREADED -# define lockPDFDoc() Poppler::Lock lock(&mutex) +# define pdfdocLocker() MutexLocker locker(&mutex) #else -# define lockPDFDoc() +# define pdfdocLocker() #endif //------------------------------------------------------------------------ @@ -256,7 +256,7 @@ PDFDoc::PDFDoc(BaseStream *strA, GooString *ownerPassword, } GBool PDFDoc::setup(GooString *ownerPassword, GooString *userPassword) { - lockPDFDoc(); + pdfdocLocker(); str->setPos(0, -1); if (str->getPos() < 0) { @@ -1588,7 +1588,7 @@ Guint PDFDoc::writePageObjects(OutStream *outStr, XRef *xRef, Guint numOffset, G Outline *PDFDoc::getOutline() { if (!outline) { - lockPDFDoc(); + pdfdocLocker(); // read outline outline = new Outline(catalog->getOutline(), xref); } @@ -1747,7 +1747,7 @@ Page *PDFDoc::getPage(int page) if ((page < 1) || page > getNumPages()) return NULL; if (isLinearized()) { - lockPDFDoc(); + pdfdocLocker(); if (!pageCache) { pageCache = (Page **) gmallocn(getNumPages(), sizeof(Page *)); for (int i = 0; i < getNumPages(); i++) { diff --git a/poppler/Page.cc b/poppler/Page.cc index 5ce0b23..5fdc305 100644 --- a/poppler/Page.cc +++ b/poppler/Page.cc @@ -59,9 +59,9 @@ #include "Form.h" #if MULTITHREADED -# define lockPage() Poppler::Lock lock(&mutex) +# define pageLocker() MutexLocker locker(&mutex) #else -# define lockPage() +# define pageLocker() #endif //------------------------------------------------------------------------ // PDFRectangle @@ -362,7 +362,7 @@ Dict *Page::getResourceDict() { } Dict *Page::getResourceDictCopy(XRef *xrefA) { - lockPage(); + pageLocker(); return attrs->getResourceDict()->copy(xrefA); } @@ -411,7 +411,7 @@ void Page::addAnnot(Annot *annot) { // Make sure we have annots before adding the new one // even if it's an empty list so that we can safely // call annots->appendAnnot(annot) - lockPage(); + pageLocker(); getAnnots(); if (annotsObj.isNull()) { @@ -447,7 +447,7 @@ void Page::removeAnnot(Annot *annot) { Ref annotRef = annot->getRef(); Object annArray; - lockPage(); + pageLocker(); getAnnots(&annArray); if (annArray.isArray()) { int idx = -1; @@ -563,7 +563,7 @@ void Page::displaySlice(OutputDev *out, double hDPI, double vDPI, annotDisplayDecideCbk, annotDisplayDecideCbkData)) { return; } - lockPage(); + pageLocker(); XRef *localXRef = (copyXRef) ? xref->copy() : xref; if (copyXRef) { replaceXRef(localXRef); @@ -637,7 +637,7 @@ GBool Page::loadThumb(unsigned char **data_out, GfxImageColorMap *colorMap; /* Get stream dict */ - lockPage(); + pageLocker(); thumb.fetch(xref, &fetched_thumb); if (!fetched_thumb.isStream()) { fetched_thumb.free(); diff --git a/poppler/Stream.cc b/poppler/Stream.cc index 9f95b81..fa050e1 100644 --- a/poppler/Stream.cc +++ b/poppler/Stream.cc @@ -88,9 +88,9 @@ static GBool setDJSYSFLAGS = gFalse; #endif #if MULTITHREADED -# define lockStream() Poppler::Lock lock(&mutex) +# define streamLocker() MutexLocker locker(&mutex) #else -# define lockStream() +# define streamLocker() #endif //------------------------------------------------------------------------ // Stream (base class) @@ -110,13 +110,13 @@ Stream::~Stream() { } int Stream::incRef() { - lockStream(); + streamLocker(); ++ref; return ref; } int Stream::decRef() { - lockStream(); + streamLocker(); --ref; return ref; } diff --git a/poppler/XRef.cc b/poppler/XRef.cc index d235273..7c68647 100644 --- a/poppler/XRef.cc +++ b/poppler/XRef.cc @@ -70,11 +70,11 @@ #define defPermFlags 0xfffc #if MULTITHREADED -# define lockXRef() Poppler::Lock lock(&mutex) -# define condLockXRef(X) Poppler::Lock condlock(&mutex, (X)) +# define xrefLocker() MutexLocker locker(&mutex) +# define xrefCondLocker(X) MutexLocker locker(&mutex, (X)) #else -# define lockXRef() -# define condLockXRef(X) +# define xrefLocker() +# define xrefCondLocker(X) #endif //------------------------------------------------------------------------ @@ -1134,7 +1134,7 @@ Object *XRef::fetch(int num, int gen, Object *obj, int recursion) { Parser *parser; Object obj1, obj2, obj3; - condLockXRef((recursion == 0) ? Poppler::DoLock : Poppler::DoNotLock); + xrefCondLocker((recursion == 0) ? DoLockMutex : DoNotLockMutex); // check for bogus ref - this can happen in corrupted PDF files if (num < 0 || num >= size) { goto err; @@ -1312,7 +1312,7 @@ int XRef::getNumEntry(Goffset offset) } void XRef::add(int num, int gen, Goffset offs, GBool used) { - lockXRef(); + xrefLocker(); if (num >= size) { if (num >= capacity) { entries = (XRefEntry *)greallocn(entries, num + 1, sizeof(XRefEntry)); @@ -1341,7 +1341,7 @@ void XRef::add(int num, int gen, Goffset offs, GBool used) { } void XRef::setModifiedObject (Object* o, Ref r) { - lockXRef(); + xrefLocker(); if (r.num < 0 || r.num >= size) { error(errInternal, -1,"XRef::setModifiedObject on unknown ref: {0:d}, {1:d}\n", r.num, r.gen); return; @@ -1383,7 +1383,7 @@ Ref XRef::addIndirectObject (Object* o) { } void XRef::removeIndirectObject(Ref r) { - lockXRef(); + xrefLocker(); if (r.num < 0 || r.num >= size) { error(errInternal, -1,"XRef::removeIndirectObject on unknown ref: {0:d}, {1:d}\n", r.num, r.gen); return;