Fix : double destroy in context remove
authorJulien Desfossez <julien.desfossez@efficios.com>
Mon, 23 Apr 2012 14:41:18 +0000 (10:41 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 23 Apr 2012 14:41:18 +0000 (10:41 -0400)
The hashtable storing the trace handle is created with a destroy
function that frees the elements when they are removed. Manually calling
the destroy function after removing a handle for the table causes
double-free problems.

Fixes #197

Reported-by: Mathieu Denis <mathieu.denis@polymtl.ca>
Signed-off-by: Julien Desfossez <julien.desfossez@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lib/context.c

index d6b1ec8b6ba71f48e5ffe9428baf3a89f8cc42df..bedcc42042e0c95353e930aa0ede89ba2297c45d 100644 (file)
@@ -135,14 +135,13 @@ void bt_context_remove_trace(struct bt_context *ctx, int handle_id)
 
        /* Remove from containers */
        trace_collection_remove(ctx->tc, handle->td);
-       g_hash_table_remove(ctx->trace_handles,
-               (gpointer) (unsigned long) handle_id);
-
        /* Close the trace */
        handle->format->close_trace(handle->td);
 
-       /* Destory the handle */
-       bt_trace_handle_destroy(handle);
+       /* Remove and free the handle */
+       g_hash_table_remove(ctx->trace_handles,
+                       (gpointer) (unsigned long) handle_id);
+
 }
 
 static
This page took 0.03301 seconds and 4 git commands to generate.