from bt2.clock_snapshot import _UnknownClockSnapshot
-class CreationError(Error):
- '''Raised when object creation fails due to memory issues.'''
+class MemoryError(Error):
+ '''Raised when an operation fails due to memory issues.'''
class InvalidObject(Exception):
)
if cc_ptr is None:
- raise bt2.CreationError(
+ raise bt2.MemoryError(
"cannot create component class '{}'".format(class_name)
)
tc_ptr = native_bt.trace_class_create(ptr)
if tc_ptr is None:
- raise bt2.CreationError('could not create trace class')
+ raise bt2.MemoryError('could not create trace class')
tc = bt2._TraceClass._create_from_ptr(tc_ptr)
tc._assigns_automatic_stream_class_id = assigns_automatic_stream_class_id
cc_ptr = native_bt.clock_class_create(ptr)
if cc_ptr is None:
- raise bt2.CreationError('could not create clock class')
+ raise bt2.MemoryError('could not create clock class')
cc = bt2.clock_class._ClockClass._create_from_ptr(cc_ptr)
def _check_create_status(self, ptr):
if ptr is None:
- raise bt2.CreationError(
+ raise bt2.MemoryError(
'cannot create {} field class object'.format(self._NAME.lower())
)
ptr = native_bt.graph_create()
if ptr is None:
- raise bt2.CreationError('cannot create graph object')
+ raise bt2.MemoryError('cannot create graph object')
super().__init__(ptr)
)
if msg_iter_ptr is None:
- raise bt2.CreationError('cannot create output port message iterator')
+ raise bt2.MemoryError('cannot create output port message iterator')
return bt2.message_iterator._OutputPortMessageIterator(msg_iter_ptr)
ptr = self._create_range_set()
if ptr is None:
- raise bt2.CreationError('cannot create range set object')
+ raise bt2.MemoryError('cannot create range set object')
super().__init__(ptr)
)
if ptr is None:
- raise bt2.CreationError('cannot create event message object')
+ raise bt2.MemoryError('cannot create event message object')
return bt2.message._EventMessage(ptr)
)
if ptr is None:
- raise bt2.CreationError('cannot create inactivity message object')
+ raise bt2.MemoryError('cannot create inactivity message object')
return bt2.message._MessageIteratorInactivityMessage(ptr)
ptr = native_bt.message_stream_beginning_create(self._bt_ptr, stream._ptr)
if ptr is None:
- raise bt2.CreationError('cannot create stream beginning message object')
+ raise bt2.MemoryError('cannot create stream beginning message object')
msg = bt2.message._StreamBeginningMessage(ptr)
ptr = native_bt.message_stream_end_create(self._bt_ptr, stream._ptr)
if ptr is None:
- raise bt2.CreationError('cannot create stream end message object')
+ raise bt2.MemoryError('cannot create stream end message object')
msg = bt2.message._StreamEndMessage(ptr)
ptr = native_bt.message_packet_beginning_create(self._bt_ptr, packet._ptr)
if ptr is None:
- raise bt2.CreationError('cannot create packet beginning message object')
+ raise bt2.MemoryError('cannot create packet beginning message object')
return bt2.message._PacketBeginningMessage(ptr)
ptr = native_bt.message_packet_end_create(self._bt_ptr, packet._ptr)
if ptr is None:
- raise bt2.CreationError('cannot create packet end message object')
+ raise bt2.MemoryError('cannot create packet end message object')
return bt2.message._PacketEndMessage(ptr)
ptr = native_bt.message_discarded_events_create(self._bt_ptr, stream._ptr)
if ptr is None:
- raise bt2.CreationError('cannot discarded events message object')
+ raise bt2.MemoryError('cannot discarded events message object')
msg = bt2.message._DiscardedEventsMessage(ptr)
ptr = native_bt.message_discarded_packets_create(self._bt_ptr, stream._ptr)
if ptr is None:
- raise bt2.CreationError('cannot discarded packets message object')
+ raise bt2.MemoryError('cannot discarded packets message object')
msg = bt2.message._DiscardedPacketsMessage(ptr)
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;
py_mod_bt2_exc_error_type =
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);
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:
self._ptr
)
if msg_iter_ptr is None:
- raise bt2.CreationError('cannot create message iterator object')
+ raise bt2.MemoryError('cannot create message iterator object')
return bt2.message_iterator._UserComponentInputPortMessageIterator(msg_iter_ptr)
ptr = native_bt.query_executor_create()
if ptr is None:
- raise bt2.CreationError('cannot create query executor object')
+ raise bt2.MemoryError('cannot create query executor object')
super().__init__(ptr)
packet_ptr = native_bt.packet_create(self._ptr)
if packet_ptr is None:
- raise bt2.CreationError('cannot create packet object')
+ raise bt2.MemoryError('cannot create packet object')
return bt2.packet._Packet._create_from_ptr(packet_ptr)
)
if stream_ptr is None:
- raise bt2.CreationError('cannot create stream object')
+ raise bt2.MemoryError('cannot create stream object')
stream = bt2.stream._Stream._create_from_ptr(stream_ptr)
trace_ptr = native_bt.trace_create(self._ptr)
if trace_ptr is None:
- raise bt2.CreationError('cannot create trace class object')
+ raise bt2.MemoryError('cannot create trace class object')
trace = bt2.trace._Trace._create_from_ptr(trace_ptr)
def _check_create_status(self, ptr, type_name):
if ptr is None:
- raise bt2.CreationError('cannot create {} field class'.format(type_name))
+ raise bt2.MemoryError('cannot create {} field class'.format(type_name))
def _create_integer_field_class(
self, create_func, py_cls, type_name, field_value_range, preferred_display_base
# no error
return
- if (
- status == native_bt.__BT_FUNC_STATUS_ERROR
- or status == native_bt.__BT_FUNC_STATUS_MEMORY_ERROR
- ):
+ if status == native_bt.__BT_FUNC_STATUS_ERROR:
assert msg is not None
raise bt2.Error(msg)
+ elif status == native_bt.__BT_FUNC_STATUS_MEMORY_ERROR:
+ assert msg is not None
+ raise bt2.MemoryError(msg)
elif status == native_bt.__BT_FUNC_STATUS_END:
if msg is None:
raise bt2.Stop
def _check_create_status(self, ptr):
if ptr is None:
- raise bt2.CreationError(
+ raise bt2.MemoryError(
'cannot create {} value object'.format(self._NAME.lower())
)