mirror of
https://github.com/qpdf/qpdf.git
synced 2025-02-02 03:48:24 +00:00
comment on memory leak fix
git-svn-id: svn+q:///qpdf/trunk@979 71b93d88-0707-0410-a8cf-f5a4172ac649
This commit is contained in:
parent
21753001b7
commit
6755a86734
@ -277,6 +277,20 @@ QPDF::QPDF() :
|
||||
|
||||
QPDF::~QPDF()
|
||||
{
|
||||
// If two objects are mutually referential (through each object
|
||||
// having an array or dictionary that contains an indirect
|
||||
// reference to the other), the circular references in the
|
||||
// PointerHolder objects will prevent the objects from being
|
||||
// deleted. Walk through all objects in the object cache, which
|
||||
// is those objects that we read from the file, and break all
|
||||
// resolved references. At this point, obviously no one is still
|
||||
// using the QPDF object, but we'll explicitly clear the xref
|
||||
// table anyway just to prevent any possibility of resolve()
|
||||
// succeeding. Note that we can't break references like this at
|
||||
// any time when the QPDF object is active. If we do, the next
|
||||
// reference will reread the object from the file, which would
|
||||
// have the effect of undoing any modifications that may have been
|
||||
// made to any of the objects.
|
||||
this->xref_table.clear();
|
||||
for (std::map<ObjGen, ObjCache>::iterator iter = this->obj_cache.begin();
|
||||
iter != obj_cache.end(); ++iter)
|
||||
|
@ -44,6 +44,10 @@ QPDFObjectHandle::QPDFObjectHandle(QPDFObject* data) :
|
||||
void
|
||||
QPDFObjectHandle::releaseResolved()
|
||||
{
|
||||
// Recursively break any resolved references to indirect objects.
|
||||
// Do not cross over indirect object boundaries to avoid an
|
||||
// infinite loop. This method may only be called during final
|
||||
// destruction. See comments in QPDF::~QPDF().
|
||||
if (isIndirect())
|
||||
{
|
||||
if (this->obj.getPointer())
|
||||
|
Loading…
x
Reference in New Issue
Block a user