From 60249e46824492db503d29913f7d663f5a762724 Mon Sep 17 00:00:00 2001 From: Ivan Daniluk Date: Thu, 26 Jul 2018 13:04:52 +0200 Subject: [PATCH] Fix memleak in signal package (#1114) --- signal/signals.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/signal/signals.go b/signal/signals.go index a8fdf79b0..14d14afd6 100644 --- a/signal/signals.go +++ b/signal/signals.go @@ -3,6 +3,7 @@ package signal /* #include #include +#include extern bool StatusServiceSignalEvent(const char *jsonEvent); extern void SetEventCallback(void *cb); */ @@ -40,8 +41,12 @@ func send(typ string, event interface{}) { data, err := json.Marshal(&signal) if err != nil { logger.Error("Marshalling signal envelope", "error", err) + return } - C.StatusServiceSignalEvent(C.CString(string(data))) + + str := C.CString(string(data)) + C.StatusServiceSignalEvent(str) + C.free(unsafe.Pointer(str)) } // NodeNotificationHandler defines a handler able to process incoming node events. @@ -83,7 +88,9 @@ func NotifyNode(jsonEvent *C.char) { //export TriggerTestSignal //nolint: golint func TriggerTestSignal() { - C.StatusServiceSignalEvent(C.CString(`{"answer": 42}`)) + str := C.CString(`{"answer": 42}`) + C.StatusServiceSignalEvent(str) + C.free(unsafe.Pointer(str)) } // SetSignalEventCallback set callback