lib: save and restore current thread error when calling destruction listeners and...
[babeltrace.git] / src / lib / trace-ir / trace.c
index d155cae2e0ea205c0a04ffc5ab0d3019d6d637ed..57ebf67bf82257c4a3b57fe891da2e836506b9b1 100644 (file)
@@ -82,6 +82,8 @@ void destroy_trace(struct bt_object *obj)
         */
        if (trace->destruction_listeners) {
                uint64_t i;
+               const struct bt_error *saved_error;
+
                BT_LIB_LOGD("Calling trace destruction listener(s): %!+t", trace);
 
                /*
@@ -96,6 +98,8 @@ void destroy_trace(struct bt_object *obj)
                */
                trace->base.ref_count++;
 
+               saved_error = bt_current_thread_take_error();
+
                /* Call all the trace destruction listeners */
                for (i = 0; i < trace->destruction_listeners->len; i++) {
                        struct bt_trace_destruction_listener_elem elem =
@@ -115,6 +119,10 @@ void destroy_trace(struct bt_object *obj)
                }
                g_array_free(trace->destruction_listeners, TRUE);
                trace->destruction_listeners = NULL;
+
+               if (saved_error) {
+                       BT_CURRENT_THREAD_MOVE_ERROR_AND_RESET(saved_error);
+               }
        }
 
        if (trace->name.str) {
This page took 0.024864 seconds and 4 git commands to generate.