Add Messages.Ref function
authorReto Buerki <reet@codelabs.ch>
Mon, 19 Oct 2020 09:01:57 +0000 (11:01 +0200)
committerReto Buerki <reet@codelabs.ch>
Mon, 19 Oct 2020 16:37:36 +0000 (18:37 +0200)
Used to increase the reference count of the underlying D-Bus message.

src/d_bus-messages.adb
src/d_bus-messages.ads

index d1ee0212a1037e62f3595c2b359f11346b3f03dc..c9b1447135812329dae59d8be73376d4bcd6f699 100644 (file)
@@ -260,6 +260,16 @@ package body D_Bus.Messages is
 
    -------------------------------------------------------------------------
 
+   function Ref (Msg : Message_Type) return Message_Type
+   is
+   begin
+      return Message_Type'
+        (Thin_Msg => dbus_message_h.dbus_message_ref
+           (message => Msg.Thin_Msg));
+   end Ref;
+
+   -------------------------------------------------------------------------
+
    function To_Thin
      (Msg : Message_Type)
       return access dbus_message_h.DBusMessage
@@ -273,10 +283,7 @@ package body D_Bus.Messages is
    procedure Unref (Msg : in out Message_Type)
    is
    begin
-      if Msg /= Null_Message then
-         dbus_message_unref (message => Msg.Thin_Msg);
-         Msg.Thin_Msg := null;
-      end if;
+      dbus_message_unref (message => Msg.Thin_Msg);
    end Unref;
 
    -------------------------------------------------------------------------
index 2fe548326817caf3bf7aab7818c0dfdfa99e559f..1edc0f82c64aae580b88e52da944c5de512e4c1b 100644 (file)
@@ -110,8 +110,12 @@ package D_Bus.Messages is
    function Is_Null (Msg : Message_Type) return Boolean;
    --  Returns True if given message is nil.
 
+   function Ref (Msg : Message_Type) return Message_Type;
+   --  Increment the reference count of the given message and return copy.
+
    procedure Unref (Msg : in out Message_Type);
-   --  Unreference given message.
+   --  Unreference given message. The message is freed if the reference count
+   --  reaches zero.
 
    function To_Thin
      (Msg : Message_Type)