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