[gegl] gegl/buffer: use more explicit code for cleanup
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] gegl/buffer: use more explicit code for cleanup
- Date: Mon, 8 Jan 2018 15:38:54 +0000 (UTC)
commit 36e5cb473d46cb1fe1dfa11f3fbc80d36f622b47
Author: Øyvind Kolås <pippin gimp org>
Date: Sun Jan 7 22:22:45 2018 +0100
gegl/buffer: use more explicit code for cleanup
This is a revert of the parts of this commit
66dad2179c1ec9e8b32900ef6ef8f93244d51209, that touched gegl/buffer, some part
of seen performance regression might be the function call overhead of g_free
which will be skipped when conditions for NULL fails.
gegl/buffer/gegl-buffer-load.c | 3 ++-
gegl/buffer/gegl-buffer-save.c | 3 ++-
gegl/buffer/gegl-buffer.c | 15 +++++++++++----
gegl/buffer/gegl-sampler-cubic.c | 3 ++-
gegl/buffer/gegl-sampler.c | 9 +++++++--
gegl/buffer/gegl-tile-backend-file-async.c | 10 +++++++---
gegl/buffer/gegl-tile-handler.c | 17 +++++++++++++++--
7 files changed, 46 insertions(+), 14 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-load.c b/gegl/buffer/gegl-buffer-load.c
index a35393f..5a6523f 100644
--- a/gegl/buffer/gegl-buffer-load.c
+++ b/gegl/buffer/gegl-buffer-load.c
@@ -63,7 +63,8 @@ load_info_destroy (LoadInfo *info)
{
if (!info)
return;
- g_free (info->path);
+ if (info->path)
+ g_free (info->path);
if (info->i != -1)
close (info->i);
if (info->tiles != NULL)
diff --git a/gegl/buffer/gegl-buffer-save.c b/gegl/buffer/gegl-buffer-save.c
index feb673e..ce0cbdd 100644
--- a/gegl/buffer/gegl-buffer-save.c
+++ b/gegl/buffer/gegl-buffer-save.c
@@ -106,7 +106,8 @@ save_info_destroy (SaveInfo *info)
{
if (!info)
return;
- g_free (info->path);
+ if (info->path)
+ g_free (info->path);
if (info->o != -1)
close (info->o);
if (info->tiles != NULL)
diff --git a/gegl/buffer/gegl-buffer.c b/gegl/buffer/gegl-buffer.c
index e01203e..c8f621e 100644
--- a/gegl/buffer/gegl-buffer.c
+++ b/gegl/buffer/gegl-buffer.c
@@ -211,7 +211,8 @@ gegl_buffer_set_property (GObject *gobject,
break;
case PROP_PATH:
- g_free (buffer->path);
+ if (buffer->path)
+ g_free (buffer->path);
buffer->path = g_value_dup_string (value);
break;
@@ -263,7 +264,8 @@ gegl_buffer_set_property (GObject *gobject,
break;
case PROP_BACKEND:
- g_clear_object (&buffer->backend);
+ if (buffer->backend)
+ g_object_unref (buffer->backend);
buffer->backend = g_value_dup_object (value);
break;
@@ -394,7 +396,11 @@ gegl_buffer_dispose (GObject *object)
_gegl_buffer_drop_hot_tile (buffer);
- g_clear_object (&buffer->backend);
+ if (buffer->backend)
+ {
+ g_object_unref (buffer->backend);
+ buffer->backend = NULL;
+ }
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@@ -514,7 +520,8 @@ gegl_buffer_constructor (GType type,
buffer->tile_width = gegl_tile_backend_get_tile_width (backend);
buffer->tile_height = gegl_tile_backend_get_tile_height (backend);
- g_free (buffer->path);
+ if (buffer->path)
+ g_free (buffer->path);
if (GEGL_IS_TILE_BACKEND_FILE (backend))
g_object_get (backend, "path", &buffer->path, NULL);
diff --git a/gegl/buffer/gegl-sampler-cubic.c b/gegl/buffer/gegl-sampler-cubic.c
index 4fd7231..e7848a7 100644
--- a/gegl/buffer/gegl-sampler-cubic.c
+++ b/gegl/buffer/gegl-sampler-cubic.c
@@ -311,7 +311,8 @@ set_property (GObject *object,
break;
case PROP_TYPE:
- g_free (self->type);
+ if (self->type)
+ g_free (self->type);
self->type = g_value_dup_string (value);
break;
diff --git a/gegl/buffer/gegl-sampler.c b/gegl/buffer/gegl-sampler.c
index 6c7062c..3428906 100644
--- a/gegl/buffer/gegl-sampler.c
+++ b/gegl/buffer/gegl-sampler.c
@@ -509,7 +509,8 @@ gegl_buffer_sample_at_level (GeglBuffer *buffer,
if (buffer->sampler)
{
- g_clear_object (&buffer->sampler);
+ g_object_unref (buffer->sampler);
+ buffer->sampler = NULL;
buffer->sampler_type = 0;
}
@@ -558,7 +559,11 @@ gegl_buffer_sample_cleanup (GeglBuffer *buffer)
if (threaded)
g_mutex_lock (&gegl_buffer_sampler_mutex);
- g_clear_object (&buffer->sampler);
+ if (buffer->sampler)
+ {
+ g_object_unref (buffer->sampler);
+ buffer->sampler = NULL;
+ }
if (threaded)
g_mutex_unlock (&gegl_buffer_sampler_mutex);
diff --git a/gegl/buffer/gegl-tile-backend-file-async.c b/gegl/buffer/gegl-tile-backend-file-async.c
index c78bf83..1885a04 100644
--- a/gegl/buffer/gegl-tile-backend-file-async.c
+++ b/gegl/buffer/gegl-tile-backend-file-async.c
@@ -879,7 +879,8 @@ gegl_tile_backend_file_set_property (GObject *object,
switch (property_id)
{
case PROP_PATH:
- g_free (self->path);
+ if (self->path)
+ g_free (self->path);
self->path = g_value_dup_string (value);
break;
@@ -970,8 +971,11 @@ gegl_tile_backend_file_finalize (GObject *object)
g_free (self->path);
}
- g_clear_object (&self->monitor);
- g_clear_object (&self->file);
+ if (self->monitor)
+ g_object_unref (self->monitor);
+
+ if (self->file)
+ g_object_unref (self->file);
g_cond_clear (&self->cond);
diff --git a/gegl/buffer/gegl-tile-handler.c b/gegl/buffer/gegl-tile-handler.c
index 74cf511..72f610e 100644
--- a/gegl/buffer/gegl-tile-handler.c
+++ b/gegl/buffer/gegl-tile-handler.c
@@ -49,7 +49,11 @@ gegl_tile_handler_dispose (GObject *object)
{
GeglTileHandler *handler = GEGL_TILE_HANDLER (object);
- g_clear_object (&handler->source);
+ if (handler->source)
+ {
+ g_object_unref (handler->source);
+ handler->source = NULL;
+ }
G_OBJECT_CLASS (gegl_tile_handler_parent_class)->dispose (object);
}
@@ -141,7 +145,16 @@ void
gegl_tile_handler_set_source (GeglTileHandler *handler,
GeglTileSource *source)
{
- g_set_object (&handler->source, source);
+ if (source != handler->source)
+ {
+ if (handler->source)
+ g_object_unref (handler->source);
+
+ handler->source = source;
+
+ if (handler->source)
+ g_object_ref (handler->source);
+ }
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]