1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 02:17:35 +00:00

LibPDF: Switch to automatic ref counting, fix memory leak

At least `Value::operator=` didn't properly unref the `PDF::Object` when
it was called. This type of problem is removed by just letting `RefPtr`
do its thing.

This patch increases the memory consumption by LibPDF by 4 bytes (the
other union objects) per value.
This commit is contained in:
Ben Wiederhake 2021-09-16 23:33:11 +02:00 committed by Ali Mohammad Pur
parent 05006e63c4
commit 750bed254f
2 changed files with 3 additions and 12 deletions

View file

@ -9,12 +9,6 @@
namespace PDF {
Value::~Value()
{
if (is_object())
m_as_object->unref();
}
Value& Value::operator=(Value const& other)
{
m_type = other.m_type;
@ -36,8 +30,6 @@ Value& Value::operator=(Value const& other)
break;
case Type::Object:
m_as_object = other.m_as_object;
if (m_as_object)
m_as_object->ref();
break;
}
return *this;

View file

@ -7,6 +7,7 @@
#pragma once
#include <AK/Format.h>
#include <AK/RefPtr.h>
namespace PDF {
@ -66,7 +67,6 @@ public:
: m_type(obj ? Type::Object : Type::Empty)
{
if (obj) {
obj->ref();
m_as_object = obj;
}
}
@ -75,7 +75,6 @@ public:
Value(NonnullRefPtr<T> obj)
: m_type(Type::Object)
{
obj->ref();
m_as_object = obj;
}
@ -84,7 +83,7 @@ public:
*this = other;
}
~Value();
~Value() = default;
Value& operator=(Value const& other);
@ -179,9 +178,9 @@ private:
int m_as_int;
u32 m_as_ref;
float m_as_float;
Object* m_as_object;
};
RefPtr<Object> m_as_object;
Type m_type;
};