Prechádzať zdrojové kódy

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.
Ben Wiederhake 3 rokov pred
rodič
commit
750bed254f

+ 0 - 8
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;

+ 3 - 4
Userland/Libraries/LibPDF/Value.h

@@ -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;
 };