[poppler] glib/poppler-attachment.cc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Nov 3 11:59:57 UTC 2018
glib/poppler-attachment.cc | 28 +++++++++++-----------------
1 file changed, 11 insertions(+), 17 deletions(-)
New commits:
commit 6ced3253fa3356e50d6c1dfa8961561eabefb9e8
Author: Christian Persch <chpe at src.gnome.org>
Date: Tue Oct 23 23:42:47 2018 +0200
glib: Fix missing destructor call
PopplerAttachmentPrivate has a Object member which
was never destructed, only set to an empty Object()
on dispose. While there is no memory leak (currently!),
this is still not correct.
Fix this by making PopplerAttachmentPrivate a C++ class,
constructed in place of the gobject instance private in
init(), and call the destructor explicitly in finalize().
diff --git a/glib/poppler-attachment.cc b/glib/poppler-attachment.cc
index 11ba5bb5..87baef22 100644
--- a/glib/poppler-attachment.cc
+++ b/glib/poppler-attachment.cc
@@ -23,6 +23,8 @@
#include "poppler.h"
#include "poppler-private.h"
+#include <new>
+
/**
* SECTION:poppler-attachment
* @short_description: Attachments
@@ -32,15 +34,13 @@
/* FIXME: We need to add gettext support sometime */
#define _(x) (x)
-typedef struct _PopplerAttachmentPrivate PopplerAttachmentPrivate;
-struct _PopplerAttachmentPrivate
+struct PopplerAttachmentPrivate
{
- Object obj_stream;
+ Object obj_stream{};
};
#define POPPLER_ATTACHMENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), POPPLER_TYPE_ATTACHMENT, PopplerAttachmentPrivate))
-static void poppler_attachment_dispose (GObject *obj);
static void poppler_attachment_finalize (GObject *obj);
G_DEFINE_TYPE (PopplerAttachment, poppler_attachment, G_TYPE_OBJECT)
@@ -48,28 +48,20 @@ G_DEFINE_TYPE (PopplerAttachment, poppler_attachment, G_TYPE_OBJECT)
static void
poppler_attachment_init (PopplerAttachment *attachment)
{
+ void *place;
+
+ place = g_type_instance_get_private ((GTypeInstance*)attachment, POPPLER_TYPE_ATTACHMENT);
+ new (place) PopplerAttachmentPrivate();
}
static void
poppler_attachment_class_init (PopplerAttachmentClass *klass)
{
- G_OBJECT_CLASS (klass)->dispose = poppler_attachment_dispose;
G_OBJECT_CLASS (klass)->finalize = poppler_attachment_finalize;
g_type_class_add_private (klass, sizeof (PopplerAttachmentPrivate));
}
static void
-poppler_attachment_dispose (GObject *obj)
-{
- PopplerAttachmentPrivate *priv;
-
- priv = POPPLER_ATTACHMENT_GET_PRIVATE (obj);
- priv->obj_stream = Object();
-
- G_OBJECT_CLASS (poppler_attachment_parent_class)->dispose (obj);
-}
-
-static void
poppler_attachment_finalize (GObject *obj)
{
PopplerAttachment *attachment;
@@ -87,7 +79,9 @@ poppler_attachment_finalize (GObject *obj)
if (attachment->checksum)
g_string_free (attachment->checksum, TRUE);
attachment->checksum = nullptr;
-
+
+ POPPLER_ATTACHMENT_GET_PRIVATE (obj)->~PopplerAttachmentPrivate ();
+
G_OBJECT_CLASS (poppler_attachment_parent_class)->finalize (obj);
}
More information about the poppler
mailing list