bt2: make bt2.Error wrap current thread's error
[babeltrace.git] / src / bindings / python / bt2 / bt2 / native_bt_graph.i
index 9f9e1d3b9f5ab739771ad43b1aa4fadb677697bf..c592452dde11bbfb63d4ca26a93114fe59ad7794 100644 (file)
 /* Helper functions for Python */
 
 %{
-
-static void graph_listener_removed(void *py_callable)
+static
+void graph_listener_removed(void *py_callable)
 {
        BT_ASSERT(py_callable);
        Py_DECREF(py_callable);
 }
 
-static bt_graph_listener_status
-port_added_listener(
+static bt_graph_listener_func_status port_added_listener(
        const void *component,
        swig_type_info *component_swig_type,
        bt_component_class_type component_class_type,
@@ -127,43 +126,43 @@ port_added_listener(
        PyObject *py_component_ptr = NULL;
        PyObject *py_port_ptr = NULL;
        PyObject *py_res = NULL;
-       bt_graph_listener_status status;
+       bt_graph_listener_func_status status;
 
        py_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(component), component_swig_type, 0);
        if (!py_component_ptr) {
                BT_LOGF_STR("Failed to create component SWIG pointer object.");
-               status = BT_GRAPH_LISTENER_STATUS_NOMEM;
+               status = __BT_FUNC_STATUS_MEMORY_ERROR;
                goto end;
        }
 
        py_port_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(port), port_swig_type, 0);
        if (!py_port_ptr) {
                BT_LOGF_STR("Failed to create port SWIG pointer object.");
-               status = BT_GRAPH_LISTENER_STATUS_NOMEM;
+               status = __BT_FUNC_STATUS_MEMORY_ERROR;
                goto end;
        }
 
        py_res = PyObject_CallFunction(py_callable, "(OiOi)",
                py_component_ptr, component_class_type, py_port_ptr, port_type);
        if (!py_res) {
-               bt2_py_loge_exception();
+               loge_exception("Graph's port added listener (Python)");
                PyErr_Clear();
-               status = BT_GRAPH_LISTENER_STATUS_ERROR;
+               status = __BT_FUNC_STATUS_ERROR;
                goto end;
        }
 
        BT_ASSERT(py_res == Py_None);
-       status = BT_GRAPH_LISTENER_STATUS_OK;
+       status = __BT_FUNC_STATUS_OK;
 
 end:
        Py_XDECREF(py_res);
        Py_XDECREF(py_port_ptr);
        Py_XDECREF(py_component_ptr);
-
        return status;
 }
 
-static bt_graph_listener_status
+static
+bt_graph_listener_func_status
 source_component_output_port_added_listener(const bt_component_source *component_source,
                                            const bt_port_output *port_output, void *py_callable)
 {
@@ -172,7 +171,8 @@ source_component_output_port_added_listener(const bt_component_source *component
                port_output, SWIGTYPE_p_bt_port_output, BT_PORT_TYPE_OUTPUT, py_callable);
 }
 
-static bt_graph_listener_status
+static
+bt_graph_listener_func_status
 filter_component_input_port_added_listener(const bt_component_filter *component_filter,
                                           const bt_port_input *port_input, void *py_callable)
 {
@@ -181,7 +181,8 @@ filter_component_input_port_added_listener(const bt_component_filter *component_
                port_input, SWIGTYPE_p_bt_port_input, BT_PORT_TYPE_INPUT, py_callable);
 }
 
-static bt_graph_listener_status
+static
+bt_graph_listener_func_status
 filter_component_output_port_added_listener(const bt_component_filter *component_filter,
                                            const bt_port_output *port_output, void *py_callable)
 {
@@ -190,7 +191,8 @@ filter_component_output_port_added_listener(const bt_component_filter *component
                port_output, SWIGTYPE_p_bt_port_output, BT_PORT_TYPE_OUTPUT, py_callable);
 }
 
-static bt_graph_listener_status
+static
+bt_graph_listener_func_status
 sink_component_input_port_added_listener(const bt_component_sink *component_sink,
                                         const bt_port_input *port_input, void *py_callable)
 {
@@ -199,14 +201,16 @@ sink_component_input_port_added_listener(const bt_component_sink *component_sink
                port_input, SWIGTYPE_p_bt_port_input, BT_PORT_TYPE_INPUT, py_callable);
 }
 
-static PyObject *
-bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
-                                    PyObject *py_callable)
+static
+PyObject *bt_bt2_graph_add_port_added_listener(struct bt_graph *graph,
+               PyObject *py_callable)
 {
        PyObject *py_listener_ids = NULL;
        PyObject *py_listener_id = NULL;
        int listener_id;
-       bt_graph_status status;
+       bt_graph_add_listener_status status;
+       const char * const module_name =
+               "graph_add_port_added_listener() (Python)";
 
        BT_ASSERT(graph);
        BT_ASSERT(py_callable);
@@ -217,6 +221,8 @@ bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
         */
        py_listener_ids = PyTuple_New(4);
        if (!py_listener_ids) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyTuple.");
                goto error;
        }
 
@@ -224,12 +230,18 @@ bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
        status = bt_graph_add_source_component_output_port_added_listener(
                graph, source_component_output_port_added_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_source_component_output_port_added_listener has
+                * already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -240,12 +252,18 @@ bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
        status = bt_graph_add_filter_component_input_port_added_listener(
                graph, filter_component_input_port_added_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_filter_component_input_port_added_listener has
+                * already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -256,12 +274,18 @@ bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
        status = bt_graph_add_filter_component_output_port_added_listener(
                graph, filter_component_output_port_added_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_filter_component_output_port_added_listener has
+                * already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -272,12 +296,18 @@ bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
        status = bt_graph_add_sink_component_input_port_added_listener(
                graph, sink_component_input_port_added_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_sink_component_input_port_added_listener has
+                * already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -303,8 +333,8 @@ end:
        return py_listener_ids;
 }
 
-static bt_graph_listener_status
-ports_connected_listener(
+static
+bt_graph_listener_func_status ports_connected_listener(
                const void *upstream_component,
                swig_type_info *upstream_component_swig_type,
                bt_component_class_type upstream_component_class_type,
@@ -320,13 +350,13 @@ ports_connected_listener(
        PyObject *py_downstream_component_ptr = NULL;
        PyObject *py_downstream_port_ptr = NULL;
        PyObject *py_res = NULL;
-       bt_graph_listener_status status;
+       bt_graph_listener_func_status status;
 
        py_upstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(upstream_component),
                upstream_component_swig_type, 0);
        if (!py_upstream_component_ptr) {
                BT_LOGF_STR("Failed to create upstream component SWIG pointer object.");
-               status = BT_GRAPH_LISTENER_STATUS_NOMEM;
+               status = __BT_FUNC_STATUS_MEMORY_ERROR;
                goto end;
        }
 
@@ -334,7 +364,7 @@ ports_connected_listener(
                SWIG_as_voidptr(upstream_port), SWIGTYPE_p_bt_port_output, 0);
        if (!py_upstream_port_ptr) {
                BT_LOGF_STR("Failed to create upstream port SWIG pointer object.");
-               status = BT_GRAPH_LISTENER_STATUS_NOMEM;
+               status = __BT_FUNC_STATUS_MEMORY_ERROR;
                goto end;
        }
 
@@ -342,7 +372,7 @@ ports_connected_listener(
                downstream_component_swig_type, 0);
        if (!py_downstream_component_ptr) {
                BT_LOGF_STR("Failed to create downstream component SWIG pointer object.");
-               status = BT_GRAPH_LISTENER_STATUS_NOMEM;
+               status = __BT_FUNC_STATUS_MEMORY_ERROR;
                goto end;
        }
 
@@ -350,7 +380,7 @@ ports_connected_listener(
                SWIG_as_voidptr(downstream_port), SWIGTYPE_p_bt_port_input, 0);
        if (!py_downstream_port_ptr) {
                BT_LOGF_STR("Failed to create downstream port SWIG pointer object.");
-               status = BT_GRAPH_LISTENER_STATUS_NOMEM;
+               status = __BT_FUNC_STATUS_MEMORY_ERROR;
                goto end;
        }
 
@@ -360,14 +390,14 @@ ports_connected_listener(
                py_downstream_component_ptr, downstream_component_class_type,
                py_downstream_port_ptr);
        if (!py_res) {
-               bt2_py_loge_exception();
+               loge_exception("Graph's port connected listener (Python)");
                PyErr_Clear();
-               status = BT_GRAPH_LISTENER_STATUS_ERROR;
+               status = __BT_FUNC_STATUS_ERROR;
                goto end;
        }
 
        BT_ASSERT(py_res == Py_None);
-       status = BT_GRAPH_LISTENER_STATUS_OK;
+       status = __BT_FUNC_STATUS_OK;
 
 end:
        Py_XDECREF(py_upstream_component_ptr);
@@ -375,12 +405,11 @@ end:
        Py_XDECREF(py_downstream_component_ptr);
        Py_XDECREF(py_downstream_port_ptr);
        Py_XDECREF(py_res);
-
        return status;
 }
 
-static bt_graph_listener_status
-source_filter_component_ports_connected_listener(
+static
+bt_graph_listener_func_status source_filter_component_ports_connected_listener(
        const bt_component_source *source_component,
        const bt_component_filter *filter_component,
        const bt_port_output *upstream_port,
@@ -394,8 +423,8 @@ source_filter_component_ports_connected_listener(
                py_callable);
 }
 
-static bt_graph_listener_status
-source_sink_component_ports_connected_listener(
+static
+bt_graph_listener_func_status source_sink_component_ports_connected_listener(
        const bt_component_source *source_component,
        const bt_component_sink *sink_component,
        const bt_port_output *upstream_port,
@@ -409,8 +438,8 @@ source_sink_component_ports_connected_listener(
                py_callable);
 }
 
-static bt_graph_listener_status
-filter_filter_component_ports_connected_listener(
+static
+bt_graph_listener_func_status filter_filter_component_ports_connected_listener(
        const bt_component_filter *filter_component_left,
        const bt_component_filter *filter_component_right,
        const bt_port_output *upstream_port,
@@ -424,8 +453,8 @@ filter_filter_component_ports_connected_listener(
                py_callable);
 }
 
-static bt_graph_listener_status
-filter_sink_component_ports_connected_listener(
+static
+bt_graph_listener_func_status filter_sink_component_ports_connected_listener(
        const bt_component_filter *filter_component,
        const bt_component_sink *sink_component,
        const bt_port_output *upstream_port,
@@ -439,14 +468,16 @@ filter_sink_component_ports_connected_listener(
                py_callable);
 }
 
-static PyObject*
-bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
-       PyObject *py_callable)
+static
+PyObject *bt_bt2_graph_add_ports_connected_listener(struct bt_graph *graph,
+               PyObject *py_callable)
 {
        PyObject *py_listener_ids = NULL;
        PyObject *py_listener_id = NULL;
        int listener_id;
-       bt_graph_status status;
+       bt_graph_add_listener_status status;
+       const char * const module_name =
+               "graph_add_ports_connected_listener() (Python)";
 
        BT_ASSERT(graph);
        BT_ASSERT(py_callable);
@@ -455,6 +486,8 @@ bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
         * return all of their ids. */
        py_listener_ids = PyTuple_New(4);
        if (!py_listener_ids) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyTuple.");
                goto error;
        }
 
@@ -462,12 +495,18 @@ bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
        status = bt_graph_add_source_filter_component_ports_connected_listener(
                graph, source_filter_component_ports_connected_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_source_filter_component_ports_connected_listener
+                * has already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -478,12 +517,18 @@ bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
        status = bt_graph_add_source_sink_component_ports_connected_listener(
                graph, source_sink_component_ports_connected_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_source_sink_component_ports_connected_listener
+                * has already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -494,12 +539,18 @@ bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
        status = bt_graph_add_filter_filter_component_ports_connected_listener(
                graph, filter_filter_component_ports_connected_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_filter_filter_component_ports_connected_listener
+                * has already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -510,12 +561,18 @@ bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
        status = bt_graph_add_filter_sink_component_ports_connected_listener(
                graph, filter_sink_component_ports_connected_listener,
                graph_listener_removed, py_callable, &listener_id);
-       if (status != BT_GRAPH_STATUS_OK) {
+       if (status != __BT_FUNC_STATUS_OK) {
+               /*
+                * bt_graph_add_filter_sink_component_ports_connected_listener
+                * has already logged/appended an error cause.
+                */
                goto error;
        }
 
        py_listener_id = PyLong_FromLong(listener_id);
        if (!py_listener_id) {
+               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
+                       "Failed to allocate one PyLong.");
                goto error;
        }
 
@@ -539,10 +596,9 @@ end:
        Py_XDECREF(py_listener_id);
        return py_listener_ids;
 }
-
 %}
 
-PyObject *bt_py3_graph_add_port_added_listener(struct bt_graph *graph,
+PyObject *bt_bt2_graph_add_port_added_listener(struct bt_graph *graph,
                PyObject *py_callable);
-PyObject *bt_py3_graph_add_ports_connected_listener(struct bt_graph *graph,
+PyObject *bt_bt2_graph_add_ports_connected_listener(struct bt_graph *graph,
                PyObject *py_callable);
This page took 0.032349 seconds and 4 git commands to generate.