X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fbindings%2Fpython%2Fbt2%2Fbt2%2Fnative_bt_component_class.i;h=90fc4abae8f1b5a18e9d51d58fda453c18cf889d;hb=76b6c2f71a485f0cc9b766e1a54b9f7330ccd907;hp=b9e91a4af86e83c9864bb89b8fc1998865aeb909;hpb=ce4923b0c7a2de36eba95725334d251e9aa08aad;p=babeltrace.git diff --git a/src/bindings/python/bt2/bt2/native_bt_component_class.i b/src/bindings/python/bt2/bt2/native_bt_component_class.i index b9e91a4a..90fc4aba 100644 --- a/src/bindings/python/bt2/bt2/native_bt_component_class.i +++ b/src/bindings/python/bt2/bt2/native_bt_component_class.i @@ -94,12 +94,10 @@ PyObject *lookup_cc_ptr_to_py_cls(const bt_component_class *bt_cc) static PyObject *py_mod_bt2 = NULL; static PyObject *py_mod_bt2_exc_error_type = NULL; +static PyObject *py_mod_bt2_exc_memory_error = NULL; static PyObject *py_mod_bt2_exc_try_again_type = NULL; static PyObject *py_mod_bt2_exc_stop_type = NULL; -static PyObject *py_mod_bt2_exc_msg_iter_canceled_type = NULL; -static PyObject *py_mod_bt2_exc_invalid_object_type = NULL; -static PyObject *py_mod_bt2_exc_invalid_params_type = NULL; -static PyObject *py_mod_bt2_exc_unsupported_type = NULL; +static PyObject *py_mod_bt2_exc_unknown_object_type = NULL; static void bt_bt2_cc_init_from_bt2(void) @@ -115,23 +113,20 @@ void bt_bt2_cc_init_from_bt2(void) py_mod_bt2 = PyImport_ImportModule("bt2"); BT_ASSERT(py_mod_bt2); py_mod_bt2_exc_error_type = - PyObject_GetAttrString(py_mod_bt2, "Error"); + PyObject_GetAttrString(py_mod_bt2, "_Error"); BT_ASSERT(py_mod_bt2_exc_error_type); + py_mod_bt2_exc_memory_error = + PyObject_GetAttrString(py_mod_bt2, "_MemoryError"); + BT_ASSERT(py_mod_bt2_exc_memory_error); py_mod_bt2_exc_try_again_type = PyObject_GetAttrString(py_mod_bt2, "TryAgain"); BT_ASSERT(py_mod_bt2_exc_try_again_type); py_mod_bt2_exc_stop_type = PyObject_GetAttrString(py_mod_bt2, "Stop"); BT_ASSERT(py_mod_bt2_exc_stop_type); - py_mod_bt2_exc_invalid_object_type = - PyObject_GetAttrString(py_mod_bt2, "InvalidObject"); - BT_ASSERT(py_mod_bt2_exc_invalid_object_type); - py_mod_bt2_exc_invalid_params_type = - PyObject_GetAttrString(py_mod_bt2, "InvalidParams"); - BT_ASSERT(py_mod_bt2_exc_invalid_params_type); - py_mod_bt2_exc_unsupported_type = - PyObject_GetAttrString(py_mod_bt2, "Unsupported"); - BT_ASSERT(py_mod_bt2_exc_unsupported_type); + py_mod_bt2_exc_unknown_object_type = + PyObject_GetAttrString(py_mod_bt2, "UnknownObject"); + BT_ASSERT(py_mod_bt2_exc_unknown_object_type); } static @@ -154,9 +149,7 @@ void bt_bt2_cc_exit_handler(void) Py_XDECREF(py_mod_bt2_exc_error_type); Py_XDECREF(py_mod_bt2_exc_try_again_type); Py_XDECREF(py_mod_bt2_exc_stop_type); - Py_XDECREF(py_mod_bt2_exc_msg_iter_canceled_type); - Py_XDECREF(py_mod_bt2_exc_invalid_object_type); - Py_XDECREF(py_mod_bt2_exc_invalid_params_type); + Py_XDECREF(py_mod_bt2_exc_unknown_object_type); } @@ -194,7 +187,7 @@ void restore_current_thread_error_and_append_exception_chain_recursive( } /* - * If the raised exception is a bt2.Error, restore the wrapped error. + * If the raised exception is a bt2._Error, restore the wrapped error. */ if (PyErr_GivenExceptionMatches(py_exc_value, py_mod_bt2_exc_error_type)) { PyObject *py_error_swig_ptr; @@ -202,7 +195,7 @@ void restore_current_thread_error_and_append_exception_chain_recursive( int ret; /* - * We never raise a bt2.Error with a cause: it should be the + * We never raise a bt2._Error with a cause: it should be the * end of the chain. */ BT_ASSERT(!py_exc_cause_value); @@ -266,21 +259,21 @@ end: * try: * try: * something_that_raises_bt2_error() - * except bt2.Error as e1: + * except bt2._Error as e1: * raise ValueError from e1 * except ValueError as e2: * raise TypeError from e2 * * We will have the following exception chain: * - * TypeError -> ValueError -> bt2.Error + * TypeError -> ValueError -> bt2._Error * * Where the TypeError is the current exception (obtained from PyErr_Fetch). * - * The bt2.Error contains a `struct bt_error *` that used to be the current + * The bt2._Error contains a `struct bt_error *` that used to be the current * thread's error, at the moment the exception was raised. * - * This function gets to the bt2.Error and restores the wrapped + * This function gets to the bt2._Error and restores the wrapped * `struct bt_error *` as the current thread's error. * * Then, for each exception in the chain, starting with the oldest one, it adds @@ -395,20 +388,20 @@ int py_exc_to_status(bt_self_component_class *self_component_class, py_mod_bt2_exc_stop_type)) { status = __BT_FUNC_STATUS_END; } else if (PyErr_GivenExceptionMatches(exc, - py_mod_bt2_exc_invalid_object_type)) { - status = __BT_FUNC_STATUS_INVALID_OBJECT; - } else if (PyErr_GivenExceptionMatches(exc, - py_mod_bt2_exc_invalid_params_type)) { - status = __BT_FUNC_STATUS_INVALID_PARAMS; - } else if (PyErr_GivenExceptionMatches(exc, - py_mod_bt2_exc_unsupported_type)) { - status = __BT_FUNC_STATUS_UNSUPPORTED; + py_mod_bt2_exc_unknown_object_type)) { + status = __BT_FUNC_STATUS_UNKNOWN_OBJECT; } else { /* Unknown exception: convert to general error */ log_exception_and_maybe_append_error(BT_LOG_WARNING, true, self_component_class, self_component, self_message_iterator, module_name); - status = __BT_FUNC_STATUS_ERROR; + + if (PyErr_GivenExceptionMatches(exc, + py_mod_bt2_exc_memory_error)) { + status = __BT_FUNC_STATUS_MEMORY_ERROR; + } else { + status = __BT_FUNC_STATUS_ERROR; + } } end: @@ -580,19 +573,19 @@ void component_class_finalize(bt_self_component *self_component) PyObject *py_comp = bt_self_component_get_data(self_component); BT_ASSERT(py_comp); - /* Call user's _finalize() method */ + /* Call user's _user_finalize() method */ PyObject *py_method_result = PyObject_CallMethod(py_comp, - "_finalize", NULL); + "_user_finalize", NULL); if (PyErr_Occurred()) { - BT_LOGW("User component's _finalize() method raised an exception: ignoring:"); + BT_LOGW("User component's _user_finalize() method raised an exception: ignoring:"); logw_exception(); } /* - * Ignore any exception raised by the _finalize() method because - * it won't change anything at this point: the component is - * being destroyed anyway. + * Ignore any exception raised by the _user_finalize() method + * because it won't change anything at this point: the component + * is being destroyed anyway. */ PyErr_Clear(); Py_XDECREF(py_method_result); @@ -988,15 +981,15 @@ component_class_message_iterator_init( * * py_iter.__init__(self_output_port) * - * through the _init_for_native helper static method. + * through the _init_for_native helper static method. * * At this point, py_iter._ptr is set, so this initialization * function has access to self._component (which gives it the * user Python component object from which the iterator was * created). */ - py_component_port_output_ptr = SWIG_NewPointerObj( - SWIG_as_voidptr(self_component_port_output), + py_component_port_output_ptr = SWIG_NewPointerObj( + SWIG_as_voidptr(self_component_port_output), SWIGTYPE_p_bt_self_component_port_output, 0); if (!py_component_port_output_ptr) { const char *err = "Failed to create a SWIG pointer object."; @@ -1091,19 +1084,19 @@ void component_class_message_iterator_finalize( BT_ASSERT(py_message_iter); - /* Call user's _finalize() method */ + /* Call user's _user_finalize() method */ py_method_result = PyObject_CallMethod(py_message_iter, - "_finalize", NULL); + "_user_finalize", NULL); if (PyErr_Occurred()) { - BT_LOGW("User's _finalize() method raised an exception: ignoring:"); + BT_LOGW("User's _user_finalize() method raised an exception: ignoring:"); logw_exception(); } /* - * Ignore any exception raised by the _finalize() method because - * it won't change anything at this point: the component is - * being destroyed anyway. + * Ignore any exception raised by the _user_finalize() method + * because it won't change anything at this point: the component + * is being destroyed anyway. */ PyErr_Clear(); Py_XDECREF(py_method_result); @@ -1160,11 +1153,11 @@ component_class_sink_consume(bt_self_component_sink *self_component_sink) BT_ASSERT(py_comp); py_method_result = PyObject_CallMethod(py_comp, - "_consume", NULL); + "_user_consume", NULL); status = py_exc_to_status_component(self_component); if (!py_method_result && status == __BT_FUNC_STATUS_OK) { /* Pretty sure this should never happen, but just in case */ - BT_LOGE("User's _consume() method failed without raising an exception: " + BT_LOGE("User's _user_consume() method failed without raising an exception: " "status=%d", status); status = __BT_FUNC_STATUS_ERROR; }