Fix: bt2: fix reference counting of messages returned by Python components
[babeltrace.git] / src / bindings / python / bt2 / bt2 / message_iterator.py
index e5199290b06b62ffa90df818b6d82cfe5215ad37..b07e2450afc97b46f7b5e46c1198d6f07aeb2853 100644 (file)
@@ -131,9 +131,11 @@ class _UserMessageIterator(_MessageIterator):
 
         utils._check_type(msg, bt2.message._Message)
 
-        # Release the reference to the native part.
-        ptr = msg._release()
-        return int(ptr)
+        # The reference we return will be given to the message array.
+        # However, the `msg` Python object may stay alive, if the user has kept
+        # a reference to it.  Acquire a new reference to account for that.
+        msg._get_ref(msg._ptr)
+        return int(msg._ptr)
 
     def _create_event_message(self, event_class, packet, default_clock_snapshot=None):
         utils._check_type(event_class, bt2.event_class._EventClass)
@@ -239,14 +241,14 @@ class _UserMessageIterator(_MessageIterator):
 
         if packet.stream.cls.packets_have_beginning_default_clock_snapshot:
             if default_clock_snapshot is None:
-                raise ValueError("packet beginning messages in this stream must have a default clock snapshots")
+                raise ValueError("packet beginning messages in this stream must have a default clock snapshot")
 
             utils._check_uint64(default_clock_snapshot)
             ptr = native_bt.message_packet_beginning_create_with_default_clock_snapshot(
                 self._ptr, packet._ptr, default_clock_snapshot)
         else:
             if default_clock_snapshot is not None:
-                raise ValueError("packet beginning messages in this stream must not have a default clock snapshots")
+                raise ValueError("packet beginning messages in this stream must not have a default clock snapshot")
 
             ptr = native_bt.message_packet_beginning_create(self._ptr, packet._ptr)
 
@@ -260,14 +262,14 @@ class _UserMessageIterator(_MessageIterator):
 
         if packet.stream.cls.packets_have_end_default_clock_snapshot:
             if default_clock_snapshot is None:
-                raise ValueError("packet end messages in this stream must have a default clock snapshots")
+                raise ValueError("packet end messages in this stream must have a default clock snapshot")
 
             utils._check_uint64(default_clock_snapshot)
             ptr = native_bt.message_packet_end_create_with_default_clock_snapshot(
                 self._ptr, packet._ptr, default_clock_snapshot)
         else:
             if default_clock_snapshot is not None:
-                raise ValueError("packet end messages in this stream must not have a default clock snapshots")
+                raise ValueError("packet end messages in this stream must not have a default clock snapshot")
 
             ptr = native_bt.message_packet_end_create(self._ptr, packet._ptr)
 
This page took 0.026852 seconds and 4 git commands to generate.