Browse Source

Release resources in the nodes

Matthias Vogelgesang 9 years ago
parent
commit
030d322f13
4 changed files with 84 additions and 4 deletions
  1. 36 0
      src/ufo-lamino-bp-task.c
  2. 13 2
      src/ufo-lamino-conv-task.c
  3. 3 2
      src/ufo-lamino-ramp-task.c
  4. 32 0
      src/ufo-padding-2d-task.c

+ 36 - 0
src/ufo-lamino-bp-task.c

@@ -75,6 +75,20 @@ ufo_lamino_bp_task_setup (UfoTask *task,
     priv->bp_kernel = ufo_resources_get_kernel (resources, "lamino_bp_generic.cl", "lamino_bp_generic", error);
     priv->norm_kernel = ufo_resources_get_kernel (resources, "lamino_bp_generic.cl", "lamino_norm_vol", error);
     priv->clean_kernel = ufo_resources_get_kernel (resources, "lamino_bp_generic.cl", "lamino_clean_vol", error);
+
+    UFO_RESOURCES_CHECK_CLERR (clRetainContext (priv->context));
+
+    if (priv->bp_kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->bp_kernel));
+    }
+
+    if (priv->norm_kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->norm_kernel));
+    }
+
+    if (priv->clean_kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->clean_kernel));
+    }
 }
 
 static void
@@ -361,6 +375,25 @@ ufo_lamino_bp_task_finalize (GObject *object)
         priv->param_mem = NULL;
     }
 
+    if (priv->bp_kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->bp_kernel));
+        priv->bp_kernel = NULL;
+    }
+
+    if (priv->clean_kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->clean_kernel));
+        priv->clean_kernel = NULL;
+    }
+
+    if (priv->norm_kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->norm_kernel));
+        priv->norm_kernel = NULL;
+    }
+
+    if (priv->context) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseContext (priv->context));
+    }
+
     G_OBJECT_CLASS (ufo_lamino_bp_task_parent_class)->finalize (object);
 }
 
@@ -481,6 +514,9 @@ ufo_lamino_bp_task_init(UfoLaminoBpTask *self)
 
     self->priv = priv = UFO_LAMINO_BP_TASK_GET_PRIVATE(self);
     priv->param_mem = NULL;
+    priv->bp_kernel = NULL;
+    priv->clean_kernel = NULL;
+    priv->norm_kernel = NULL;
     priv->cleaned = FALSE;
     priv->produced = FALSE;
 }

+ 13 - 2
src/ufo-lamino-conv-task.c

@@ -80,8 +80,9 @@ ufo_lamino_conv_task_setup (UfoTask *task,
 
     priv->kernel = ufo_resources_get_kernel (resources, "lamino_ft_conv.cl", "lamino_c", error);
 
-    if (priv->kernel)
-        clRetainKernel (priv->kernel);
+    if (priv->kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->kernel));
+    }
 }
 
 static void
@@ -132,6 +133,15 @@ ufo_lamino_conv_task_equal_real (UfoNode *n1,
 static void
 ufo_lamino_conv_task_finalize (GObject *object)
 {
+    UfoLaminoConvTaskPrivate *priv;
+
+    priv = UFO_LAMINO_CONV_TASK_GET_PRIVATE (object);
+
+    if (priv->kernel) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->kernel));
+        priv->kernel = NULL;
+    }
+
     G_OBJECT_CLASS (ufo_lamino_conv_task_parent_class)->finalize (object);
 }
 
@@ -196,4 +206,5 @@ ufo_lamino_conv_task_init (UfoLaminoConvTask *self)
 {
     UfoLaminoConvTaskPrivate *priv;
     self->priv = priv = UFO_LAMINO_CONV_TASK_GET_PRIVATE (self);
+    priv->kernel = NULL;
 }

+ 3 - 2
src/ufo-lamino-ramp-task.c

@@ -91,8 +91,9 @@ ufo_lamino_ramp_task_setup (UfoTask *task,
                                              "lamino_ramp_create_filter",
                                              error);
 
-    if (priv->kernel != NULL)
-        clRetainKernel (priv->kernel);
+    if (priv->kernel != NULL) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->kernel));
+    }
 }
 
 static void

+ 32 - 0
src/ufo-padding-2d-task.c

@@ -170,6 +170,18 @@ ufo_padding_2d_task_setup (UfoTask *task,
     priv->kernel_iconst = ufo_resources_get_kernel (resources, "padding_2d.cl", "padding_2d_init_const", error);
     priv->kernel_cpyimg = ufo_resources_get_kernel (resources, "padding_2d.cl", "padding_2d_copy_in", error);
     priv->kernel_brep   = ufo_resources_get_kernel (resources, "padding_2d.cl", "padding_2d_brep", error);
+
+    if (priv->kernel_iconst) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->kernel_iconst));
+    }
+
+    if (priv->kernel_cpyimg) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->kernel_cpyimg));
+    }
+
+    if (priv->kernel_brep) {
+        UFO_RESOURCES_CHECK_CLERR (clRetainKernel (priv->kernel_brep));
+    }
 }
 
 static void
@@ -247,6 +259,26 @@ ufo_padding_2d_task_equal_real (UfoNode *n1,
 static void
 ufo_padding_2d_task_finalize (GObject *object)
 {
+
+    UfoPadding2DTaskPrivate *priv;
+
+    priv = UFO_PADDING_2D_TASK_GET_PRIVATE (object);
+
+    if (priv->kernel_brep) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->kernel_brep));
+        priv->kernel_brep = NULL;
+    }
+
+    if (priv->kernel_cpyimg) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->kernel_cpyimg));
+        priv->kernel_cpyimg = NULL;
+    }
+
+    if (priv->kernel_iconst) {
+        UFO_RESOURCES_CHECK_CLERR (clReleaseKernel (priv->kernel_iconst));
+        priv->kernel_iconst = NULL;
+    }
+
     G_OBJECT_CLASS (ufo_padding_2d_task_parent_class)->finalize (object);
 }