mirror of
https://github.com/RGBCube/serenity
synced 2025-07-17 16:47:38 +00:00
LibPDF: Convert PDF::Parser::m_document
from RefPtr
to WeakPtr
Otherwise both `PDF::Document` and `PDF::Parser` have a `RefPtr` pointing to each other which leads to a memory leak due to a circular dependency.
This commit is contained in:
parent
d8013f9c3a
commit
c857b5d22f
3 changed files with 8 additions and 4 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include <AK/Format.h>
|
#include <AK/Format.h>
|
||||||
#include <AK/HashMap.h>
|
#include <AK/HashMap.h>
|
||||||
#include <AK/RefCounted.h>
|
#include <AK/RefCounted.h>
|
||||||
|
#include <AK/Weakable.h>
|
||||||
#include <LibGfx/Color.h>
|
#include <LibGfx/Color.h>
|
||||||
#include <LibPDF/ObjectDerivatives.h>
|
#include <LibPDF/ObjectDerivatives.h>
|
||||||
#include <LibPDF/Parser.h>
|
#include <LibPDF/Parser.h>
|
||||||
|
@ -70,7 +71,9 @@ struct OutlineDict final : public RefCounted<OutlineDict> {
|
||||||
OutlineDict() = default;
|
OutlineDict() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Document final : public RefCounted<Document> {
|
class Document final
|
||||||
|
: public RefCounted<Document>
|
||||||
|
, public Weakable<Document> {
|
||||||
public:
|
public:
|
||||||
static RefPtr<Document> create(ReadonlyBytes bytes);
|
static RefPtr<Document> create(ReadonlyBytes bytes);
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ Parser::Parser(ReadonlyBytes bytes)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parser::set_document(RefPtr<Document> const& document)
|
void Parser::set_document(WeakPtr<Document> const& document)
|
||||||
{
|
{
|
||||||
m_document = document;
|
m_document = document;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/NonnullRefPtrVector.h>
|
#include <AK/NonnullRefPtrVector.h>
|
||||||
|
#include <AK/WeakPtr.h>
|
||||||
#include <LibPDF/Command.h>
|
#include <LibPDF/Command.h>
|
||||||
#include <LibPDF/Object.h>
|
#include <LibPDF/Object.h>
|
||||||
#include <LibPDF/Reader.h>
|
#include <LibPDF/Reader.h>
|
||||||
|
@ -29,7 +30,7 @@ public:
|
||||||
Parser(Badge<Document>, ReadonlyBytes);
|
Parser(Badge<Document>, ReadonlyBytes);
|
||||||
|
|
||||||
[[nodiscard]] ALWAYS_INLINE RefPtr<DictObject> const& trailer() const { return m_trailer; }
|
[[nodiscard]] ALWAYS_INLINE RefPtr<DictObject> const& trailer() const { return m_trailer; }
|
||||||
void set_document(RefPtr<Document> const&);
|
void set_document(WeakPtr<Document> const&);
|
||||||
|
|
||||||
// Parses the header and initializes the xref table and trailer
|
// Parses the header and initializes the xref table and trailer
|
||||||
bool initialize();
|
bool initialize();
|
||||||
|
@ -139,7 +140,7 @@ private:
|
||||||
bool consume(char);
|
bool consume(char);
|
||||||
|
|
||||||
Reader m_reader;
|
Reader m_reader;
|
||||||
RefPtr<Document> m_document;
|
WeakPtr<Document> m_document;
|
||||||
RefPtr<XRefTable> m_xref_table;
|
RefPtr<XRefTable> m_xref_table;
|
||||||
RefPtr<DictObject> m_trailer;
|
RefPtr<DictObject> m_trailer;
|
||||||
Optional<LinearizationDictionary> m_linearization_dictionary;
|
Optional<LinearizationDictionary> m_linearization_dictionary;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue