Hello

This batch of patches fixes multiple memory leaks in the dbus egg, especially freaky variant/dictionary exchange format that connman network manager uses alot.

From 43f46ae9b2a921d712dec3fc3a0e4f124b529518 Mon Sep 17 00:00:00 2001
From: rivo <[email protected]>
Date: Thu, 15 Jan 2015 12:16:49 +0300
Subject: [PATCH] dbus send message leak

---
 dbus/dbus.scm | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/dbus/dbus.scm b/dbus/dbus.scm
index bdba5f7..ca14d92 100644
--- a/dbus/dbus.scm
+++ b/dbus/dbus.scm
@@ -666,6 +666,7 @@
                                        (iter-append-basic iter parm))  params)
                                (send-impl conn msg #f)
                                (free-iter iter)
+                                ((foreign-lambda void "dbus_message_unref" 
message-ptr) msg)
                                ; ((foreign-lambda void "dbus_connection_flush" 
connection-ptr) conn)
                        ))))
 
@@ -696,7 +697,7 @@
                                                        C_return(reply);") conn 
msg) ]
                                                [reply-iter (make-iter 
reply-msg)]
                                                [reply-args (iter->list 
reply-iter)] )
-                                        ((foreign-lambda void 
"dbus_message_unref" message-iter-ptr) reply-msg)
+                                        ((foreign-lambda void 
"dbus_message_unref" message-ptr) reply-msg)
                                        reply-args)))))
 
        (set! make-method-proxy (lambda (context name)
@@ -724,7 +725,7 @@
                                                                        
C_return(msg);") conn msg) ]
                                                                [reply-iter 
(make-iter reply-msg)]
                                                                 [reply-args 
(iter->list reply-iter)] )
-                                                       ((foreign-lambda void 
"dbus_message_unref" message-iter-ptr) reply-msg)
+                                                       ((foreign-lambda void 
"dbus_message_unref" message-ptr) reply-msg)
                                                        reply-args))))))
 
        (define-foreign-record-type (vtable "struct DBusObjectPathVTable")
@@ -833,7 +834,7 @@
                                        ;; send response
                                        (send-impl conn response #f)
                                        (free-iter iter)
-                                        ((foreign-lambda void 
"dbus_message_unref" message-iter-ptr) response)
+                                        ((foreign-lambda void 
"dbus_message_unref" message-ptr) response)
                                        ))))
 
        (define (handler-wrapper conn msg-cb)
-- 
1.9.1

From 25933f3233510bf66475b58e6c85a8fca163a75f Mon Sep 17 00:00:00 2001
From: rivo <[email protected]>
Date: Thu, 15 Jan 2015 15:00:50 +0300
Subject: [PATCH] fixed pair memory leak

---
 dbus/dbus.scm | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/dbus/dbus.scm b/dbus/dbus.scm
index 2384f0b..58fd425 100644
--- a/dbus/dbus.scm
+++ b/dbus/dbus.scm
@@ -543,7 +543,10 @@
                                                        (set! v (make-vector 
0)))
                                                v)]
                                [(eq? type type-dict-entry)
-                                       (iter->pair (make-sub-iter iter))]
+                                 (let* ((sub (make-sub-iter iter))
+                                        (data (iter->pair sub)))
+                                   (sub);terminate sub iterrator
+                                   data)]
                                [(eq? type type-struct)
                                        (let ([v (iter->vector (make-sub-iter 
iter))])
                                                (if (auto-unbox-structs) v 
(vector->struct v)))]
-- 
1.9.1

From 5de45d281a5fd42b8fc2cecb772245ce10de952e Mon Sep 17 00:00:00 2001
From: rivo <[email protected]>
Date: Tue, 13 Jan 2015 18:11:24 +0300
Subject: [PATCH] fixed replay message leak

---
 dbus/dbus.scm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/dbus/dbus.scm b/dbus/dbus.scm
index c83db8d..bdba5f7 100644
--- a/dbus/dbus.scm
+++ b/dbus/dbus.scm
@@ -696,6 +696,7 @@
                                                        C_return(reply);") conn 
msg) ]
                                                [reply-iter (make-iter 
reply-msg)]
                                                [reply-args (iter->list 
reply-iter)] )
+                                        ((foreign-lambda void 
"dbus_message_unref" message-iter-ptr) reply-msg)
                                        reply-args)))))
 
        (set! make-method-proxy (lambda (context name)
@@ -722,7 +723,8 @@
                                                                        msg = 
dbus_pending_call_steal_reply(pending);
                                                                        
C_return(msg);") conn msg) ]
                                                                [reply-iter 
(make-iter reply-msg)]
-                                                               [reply-args 
(iter->list reply-iter)] )
+                                                                [reply-args 
(iter->list reply-iter)] )
+                                                       ((foreign-lambda void 
"dbus_message_unref" message-iter-ptr) reply-msg)
                                                        reply-args))))))
 
        (define-foreign-record-type (vtable "struct DBusObjectPathVTable")
-- 
1.9.1

From 6ba2fd96667c072265eb7f2972901a0ac2738436 Mon Sep 17 00:00:00 2001
From: rivo <[email protected]>
Date: Thu, 15 Jan 2015 13:05:03 +0300
Subject: [PATCH] fixed variant sub-iterator leak

---
 dbus/dbus.scm | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/dbus/dbus.scm b/dbus/dbus.scm
index ca14d92..2384f0b 100644
--- a/dbus/dbus.scm
+++ b/dbus/dbus.scm
@@ -548,9 +548,12 @@
                                        (let ([v (iter->vector (make-sub-iter 
iter))])
                                                (if (auto-unbox-structs) v 
(vector->struct v)))]
                                [(eq? type type-variant)
-                                       (if (auto-unbox-variants)
-                                               ((make-sub-iter iter))
-                                               (make-variant ((make-sub-iter 
iter))))]
+                                (let* ((sub (make-sub-iter iter))
+                                       (data (sub)))
+                                   (sub);terminate sub iterator
+                                  (if (auto-unbox-variants)
+                                      data
+                                      (make-variant data)))]
 
                                ;; todo: unsupported so far (not understood 
well enough):
                                ;;      type-object-path and type-signature
-- 
1.9.1

From c99e67cc7a52cc8fcca584ce08ad06918e68b649 Mon Sep 17 00:00:00 2001
From: rivo <[email protected]>
Date: Mon, 1 Dec 2014 18:58:22 +0300
Subject: [PATCH] fixed reposne message memory leak

---
 dbus/dbus.scm | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/dbus/dbus.scm b/dbus/dbus.scm
index fbee4e2..c83db8d 100644
--- a/dbus/dbus.scm
+++ b/dbus/dbus.scm
@@ -583,8 +583,10 @@
        (define (make-iter msg)
                (let* ([iter ((foreign-lambda* message-iter-ptr ((message-ptr 
msg))
                                "DBusMessageIter* i = 
malloc(sizeof(DBusMessageIter));
-                               if (!dbus_message_iter_init (msg, i))
+                                if (!dbus_message_iter_init (msg, i)) {
+                                        free(i);
                                        i = (DBusMessageIter*)0;        // 
Message has no parameters
+                                }
                                C_return (i);") msg) ]
                                [has-next iter]
                                )
@@ -829,6 +831,7 @@
                                        ;; send response
                                        (send-impl conn response #f)
                                        (free-iter iter)
+                                        ((foreign-lambda void 
"dbus_message_unref" message-iter-ptr) response)
                                        ))))
 
        (define (handler-wrapper conn msg-cb)
-- 
1.9.1

_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to