diff options
author | Albert Astals Cid <aacid@kde.org> | 2013-03-03 19:07:32 +0100 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2013-03-03 19:07:32 +0100 |
commit | 677e5b265a0d39a988f65d642a4f964a279fad28 (patch) | |
tree | 21d6abb9fde21ce27ee03c81a9d60116630dda10 | |
parent | d5c929fc253c2748bb8fa3642d9b5383c5fe96f8 (diff) |
Small improvements over locker class
* Remove the namespace (we don't use much/any namespaces in poppler core)
* Rename the class and defines from lock to locker since lock and be either the action "to lock" or the "thing that locks", with locker it is more clear (i think) that is "the thing" than "the action"
* Make Annot::decRefCnt use gLockMutex since we the object itself is being deleted in the if and not sure the locker would be happy with that
* change the getNumPages() param to be DoNotLockMutex since previously it was a gFalse (i guess Thomas made a c&p typo here)
* Have only one constructor like Adam suggested.
-rw-r--r-- | goo/GooMutex.h | 33 | ||||
-rw-r--r-- | poppler/Annot.cc | 92 | ||||
-rw-r--r-- | poppler/Annot.h | 6 | ||||
-rw-r--r-- | poppler/Array.cc | 15 | ||||
-rw-r--r-- | poppler/CairoFontEngine.cc | 8 | ||||
-rw-r--r-- | poppler/Catalog.cc | 52 | ||||
-rw-r--r-- | poppler/Catalog.h | 10 | ||||
-rw-r--r-- | poppler/Dict.cc | 20 | ||||
-rw-r--r-- | poppler/PDFDoc.cc | 12 | ||||
-rw-r--r-- | poppler/Page.cc | 16 | ||||
-rw-r--r-- | poppler/Stream.cc | 8 | ||||
-rw-r--r-- | poppler/XRef.cc | 18 |
12 files changed, 147 insertions, 143 deletions
diff --git a/goo/GooMutex.h b/goo/GooMutex.h index fbef476b..591a7d44 100644 --- a/goo/GooMutex.h +++ b/goo/GooMutex.h @@ -16,6 +16,8 @@ // under GPL version 2 or later // // Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2013 Albert Astals Cid <aacid@kde.org> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -60,20 +62,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 0356d8e9..f1181a76 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -15,7 +15,7 @@ // // Copyright (C) 2006 Scott Turner <scotty1024@mac.com> // Copyright (C) 2007, 2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007-2012 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007-2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2007-2012 Carlos Garcia Campos <carlosgc@gnome.org> // Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> // Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> @@ -68,11 +68,11 @@ #include <string.h> #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 806d8136..7bc76b7a 100644 --- a/poppler/Annot.h +++ b/poppler/Annot.h @@ -21,7 +21,7 @@ // Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> // Copyright (C) 2008 Pino Toscano <pino@kde.org> // Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com> -// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009-2011, 2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> // Copyright (C) 2012 Tobias Koenig <tokoe@kdab.com> // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> @@ -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 142dafca..230c3287 100644 --- a/poppler/Array.cc +++ b/poppler/Array.cc @@ -16,6 +16,7 @@ // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> // Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2013 Albert Astals Cid <aacid@kde.org> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -35,9 +36,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 +66,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 +76,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 +102,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 6f99ace8..1546594f 100644 --- a/poppler/CairoFontEngine.cc +++ b/poppler/CairoFontEngine.cc @@ -17,7 +17,7 @@ // Copyright (C) 2005-2007 Jeff Muizelaar <jeff@infidigm.net> // Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> // Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> -// Copyright (C) 2005, 2009, 2012 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005, 2009, 2012, 2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2006, 2007, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> // Copyright (C) 2007 Koji Otani <sho@bbr.jp> // Copyright (C) 2008, 2009 Chris Wilson <chris@chris-wilson.co.uk> @@ -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 d9fa229c..9c5fb71e 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005-2012 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005-2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2005 Jeff Muizelaar <jrmuizel@nit.ca> // Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> // Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> @@ -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 0ddc30af..4ee7bc94 100644 --- a/poppler/Catalog.h +++ b/poppler/Catalog.h @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005, 2007, 2009-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005, 2007, 2009-2011, 2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> // Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> // Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> @@ -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 <name> 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 a349650a..3f3c022b 100644 --- a/poppler/Dict.cc +++ b/poppler/Dict.cc @@ -16,7 +16,7 @@ // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> // Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> // Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008, 2010, 2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2010 Paweł Wiejacha <pawel.wiejacha@gmail.com> // Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> @@ -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<length; i++) { @@ -132,19 +132,19 @@ Dict::~Dict() { } int Dict::incRef() { - lockDict(); + dictLocker(); ++ref; return ref; } int Dict::decRef() { - lockDict(); + dictLocker(); --ref; return ref; } void Dict::add(char *key, Object *val) { - lockDict(); + dictLocker(); if (sorted) { // We use add on very few occasions so // virtually this will never be hit @@ -167,7 +167,7 @@ void Dict::add(char *key, Object *val) { inline DictEntry *Dict::find(const char *key) { if (!sorted && length >= 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 5a8c3d34..56c59184 100644 --- a/poppler/PDFDoc.cc +++ b/poppler/PDFDoc.cc @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2005, 2007-2009, 2011, 2012 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005, 2007-2009, 2011-2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2008 Julien Rebetez <julienr@svn.gnome.org> // Copyright (C) 2008, 2010 Pino Toscano <pino@kde.org> // Copyright (C) 2008, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> @@ -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 5ce0b23d..a587b9ba 100644 --- a/poppler/Page.cc +++ b/poppler/Page.cc @@ -15,7 +15,7 @@ // // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> // Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005-2012 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005-2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2006-2008 Pino Toscano <pino@kde.org> // Copyright (C) 2006 Nickolay V. Shmyrev <nshmyrev@yandex.ru> // Copyright (C) 2006 Scott Turner <scotty1024@mac.com> @@ -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 9f95b818..fa050e10 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 d235273d..d82bc911 100644 --- a/poppler/XRef.cc +++ b/poppler/XRef.cc @@ -15,7 +15,7 @@ // // Copyright (C) 2005 Dan Sheridan <dan.sheridan@postman.org.uk> // Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2006, 2008, 2010, 2012 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006, 2008, 2010, 2012, 2013 Albert Astals Cid <aacid@kde.org> // Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> // Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> // Copyright (C) 2009, 2010 Ilya Gorenbein <igorenbein@finjan.com> @@ -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; |