From 5cc9ea90c4a0381990e9fd961a99b74d0ce4fade Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 7 Oct 2019 10:04:18 -0400 Subject: [PATCH] eldbus: properly cleanup local variable during destruction. Summary: Depends on D10288 Reviewers: zmike, bu5hm4n, segfaultxavi, stefan_schmidt, jsuya Reviewed By: zmike Subscribers: ProhtMeyhet, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10289 --- src/lib/eldbus/eldbus_model.c | 9 +++++++-- src/lib/eldbus/eldbus_signal_handler.c | 10 +++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/lib/eldbus/eldbus_model.c b/src/lib/eldbus/eldbus_model.c index 3fc4e66fcb..ee86ff54a5 100644 --- a/src/lib/eldbus/eldbus_model.c +++ b/src/lib/eldbus/eldbus_model.c @@ -54,8 +54,11 @@ _eldbus_model_connection_set(Eo *obj EINA_UNUSED, Eldbus_Model_Data *pd, Eldbus_Connection *dbus) { + Eldbus_Connection *tounref = pd->connection; + eldbus_connection_ref(dbus); - if (pd->connection) eldbus_connection_unref(pd->connection); + pd->connection = NULL; + if (tounref) eldbus_connection_unref(tounref); pd->connection = dbus; } @@ -77,8 +80,10 @@ _eldbus_model_efl_object_finalize(Eo *obj, Eldbus_Model_Data *pd) static void _eldbus_model_efl_object_invalidate(Eo *obj, Eldbus_Model_Data *pd) { - if (pd->connection) eldbus_connection_unref(pd->connection); + Eldbus_Connection *connection = pd->connection; + pd->connection = NULL; + if (connection) eldbus_connection_unref(connection); efl_invalidate(efl_super(obj, MY_CLASS)); } diff --git a/src/lib/eldbus/eldbus_signal_handler.c b/src/lib/eldbus/eldbus_signal_handler.c index dba557bbc1..3ed7cb3a71 100644 --- a/src/lib/eldbus/eldbus_signal_handler.c +++ b/src/lib/eldbus/eldbus_signal_handler.c @@ -241,14 +241,14 @@ _eldbus_signal_handler_del(Eldbus_Signal_Handler *handler) /* after cbs_free dispatch these shouldn't exit, error if they do */ - eina_stringshare_del(handler->sender); - eina_stringshare_del(handler->path); - eina_stringshare_del(handler->interface); - eina_stringshare_del(handler->member); + eina_stringshare_replace(&handler->sender, NULL); + eina_stringshare_replace(&handler->path, NULL); + eina_stringshare_replace(&handler->interface, NULL); + eina_stringshare_replace(&handler->member, NULL); eina_strbuf_free(handler->match); EINA_INLIST_FOREACH_SAFE(handler->args, list, arg) { - eina_stringshare_del(arg->value); + eina_stringshare_replace(&arg->value, NULL); free(arg); } eina_inlist_sorted_state_free(handler->state_args);