Browse Source

port r9871 from trunk: Do not use cl_arg_free for insert_task, it is not so simple apparently

Samuel Thibault 12 years ago
parent
commit
eaf8bac1ba
3 changed files with 7 additions and 6 deletions
  1. 4 4
      src/core/task.c
  2. 2 2
      src/util/starpu_insert_task.c
  3. 1 0
      src/util/starpu_insert_task_utils.c

+ 4 - 4
src/core/task.c

@@ -119,6 +119,10 @@ void starpu_task_clean(struct starpu_task *task)
 		_starpu_job_destroy(j);
 		task->starpu_private = NULL;
 	}
+
+	/* Does user want StarPU release cl_arg ? */
+	if (task->cl_arg_free)
+		free(task->cl_arg);
 }
 
 struct starpu_task * __attribute__((malloc)) starpu_task_create(void)
@@ -156,10 +160,6 @@ void _starpu_task_destroy(struct starpu_task *task)
 		/* TODO handle the case of task with detach = 1 and destroy = 1 */
 		/* TODO handle the case of non terminated tasks -> return -EINVAL */
 
-		/* Does user want StarPU release cl_arg ? */
-		if (task->cl_arg_free)
-			free(task->cl_arg);
-
 		free(task);
 	}
 }

+ 2 - 2
src/util/starpu_insert_task.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010, 2012  Université de Bordeaux 1
+ * Copyright (C) 2010, 2012-2013  Université de Bordeaux 1
  * Copyright (C) 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -60,6 +60,7 @@ void starpu_codelet_unpack_args(void *_cl_arg, ...)
 	}
 
 	va_end(varg_list);
+	free(cl_arg);
 }
 
 int starpu_insert_task(struct starpu_codelet *cl, ...)
@@ -79,7 +80,6 @@ int starpu_insert_task(struct starpu_codelet *cl, ...)
 	}
 
 	struct starpu_task *task = starpu_task_create();
-	task->cl_arg_free = 1;
 
 	if (cl && cl->nbuffers > STARPU_NMAXBUFS)
 	{

+ 1 - 0
src/util/starpu_insert_task_utils.c

@@ -343,6 +343,7 @@ int _starpu_insert_task_create_and_submit(void *arg_buffer, size_t arg_buffer_si
 	(*task)->cl = cl;
 	(*task)->cl_arg = arg_buffer;
 	(*task)->cl_arg_size = arg_buffer_size;
+	(*task)->cl_arg_free = 1;
 
 	/* The callback will free the argument stack and execute the
 	 * application's callback, if any. */