From 750bed254fd3db6749e0961051080e26ccc388a7 Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Thu, 16 Sep 2021 23:33:11 +0200 Subject: [PATCH] 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. --- Userland/Libraries/LibPDF/Value.cpp | 8 -------- Userland/Libraries/LibPDF/Value.h | 7 +++---- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/Userland/Libraries/LibPDF/Value.cpp b/Userland/Libraries/LibPDF/Value.cpp index 887cda9bda..63a699c295 100644 --- a/Userland/Libraries/LibPDF/Value.cpp +++ b/Userland/Libraries/LibPDF/Value.cpp @@ -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; diff --git a/Userland/Libraries/LibPDF/Value.h b/Userland/Libraries/LibPDF/Value.h index 160edd68ba..33f13a0687 100644 --- a/Userland/Libraries/LibPDF/Value.h +++ b/Userland/Libraries/LibPDF/Value.h @@ -7,6 +7,7 @@ #pragma once #include +#include 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 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 m_as_object; Type m_type; };