edbus: Fix memory leak in
edbus_signal_handler_match_extra_set() And allow values == "" in match_extra_set() Patch by: José Roberto de Souza <zehortigoza@profusion.mobi> SVN revision: 77004
This commit is contained in:
parent
d855ad62c9
commit
49ea849059
|
@ -141,11 +141,7 @@ on_name_owner_changed_by_id(void *data, const EDBus_Message *msg)
|
||||||
if (!edbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id))
|
if (!edbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id))
|
||||||
printf("Error getting arguments from NameOwnerChanged");
|
printf("Error getting arguments from NameOwnerChanged");
|
||||||
|
|
||||||
printf("on_name_owner_changed_by_id bus = %s older=%s new=%s\n\n",
|
printf("banshee started on id=%s\n", new_id);
|
||||||
bus, older_id, new_id);
|
|
||||||
|
|
||||||
if (!new_id[0])
|
|
||||||
edbus_signal_handler_unref(sh3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -160,18 +156,6 @@ on_name_owner_changed(void *data, const EDBus_Message *msg)
|
||||||
printf("Error getting arguments from NameOwnerChanged");
|
printf("Error getting arguments from NameOwnerChanged");
|
||||||
|
|
||||||
printf("bus = %s older=%s new=%s\n\n", bus, older_id, new_id);
|
printf("bus = %s older=%s new=%s\n\n", bus, older_id, new_id);
|
||||||
|
|
||||||
if (new_id[0])
|
|
||||||
{
|
|
||||||
sh4 = edbus_signal_handler_add(conn,
|
|
||||||
EDBUS_FDO_BUS,
|
|
||||||
EDBUS_FDO_PATH,
|
|
||||||
EDBUS_FDO_INTERFACE,
|
|
||||||
"NameOwnerChanged",
|
|
||||||
on_name_owner_changed_by_id,
|
|
||||||
NULL);
|
|
||||||
edbus_signal_handler_match_extra_set(sh4, "arg1", new_id, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -276,6 +260,17 @@ main(void)
|
||||||
NULL);
|
NULL);
|
||||||
edbus_signal_handler_match_extra_set(sh3, "arg0", "org.bansheeproject.Banshee", NULL);
|
edbus_signal_handler_match_extra_set(sh3, "arg0", "org.bansheeproject.Banshee", NULL);
|
||||||
|
|
||||||
|
sh4 = edbus_signal_handler_add(conn,
|
||||||
|
EDBUS_FDO_BUS,
|
||||||
|
EDBUS_FDO_PATH,
|
||||||
|
EDBUS_FDO_INTERFACE,
|
||||||
|
"NameOwnerChanged",
|
||||||
|
on_name_owner_changed_by_id,
|
||||||
|
NULL);
|
||||||
|
edbus_signal_handler_match_extra_set(sh4,
|
||||||
|
"arg0", "org.bansheeproject.Banshee",
|
||||||
|
"arg1", "", NULL);
|
||||||
|
|
||||||
ecore_timer_add(50, _timer1_cb, NULL);
|
ecore_timer_add(50, _timer1_cb, NULL);
|
||||||
|
|
||||||
ecore_main_loop_begin();
|
ecore_main_loop_begin();
|
||||||
|
|
|
@ -51,7 +51,7 @@ edbus_signal_handler_shutdown(void)
|
||||||
static void
|
static void
|
||||||
_match_append(Eina_Strbuf *match, const char *key, const char *value)
|
_match_append(Eina_Strbuf *match, const char *key, const char *value)
|
||||||
{
|
{
|
||||||
if (value == NULL || !value[0]) return;
|
if (!value) return;
|
||||||
|
|
||||||
if ((eina_strbuf_length_get(match) + strlen(",=''") + strlen(key) + strlen(value))
|
if ((eina_strbuf_length_get(match) + strlen(",=''") + strlen(key) + strlen(value))
|
||||||
>= DBUS_MAXIMUM_MATCH_RULE_LENGTH)
|
>= DBUS_MAXIMUM_MATCH_RULE_LENGTH)
|
||||||
|
@ -79,7 +79,7 @@ EAPI Eina_Bool
|
||||||
edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...)
|
edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char *key = NULL, *value;
|
char *key = NULL, *read;
|
||||||
Signal_Argument *arg;
|
Signal_Argument *arg;
|
||||||
DBusError err;
|
DBusError err;
|
||||||
|
|
||||||
|
@ -91,30 +91,33 @@ edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...)
|
||||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(dbus_error_is_set(&err), EINA_FALSE);
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(dbus_error_is_set(&err), EINA_FALSE);
|
||||||
|
|
||||||
va_start(ap, sh);
|
va_start(ap, sh);
|
||||||
do
|
for (read = va_arg(ap, char *); read; read = va_arg(ap, char *))
|
||||||
{
|
{
|
||||||
if (!key)
|
if (!key)
|
||||||
{
|
{
|
||||||
key = va_arg(ap, char *);
|
key = read;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
value = va_arg(ap, char *);
|
|
||||||
arg = calloc(1, sizeof(Signal_Argument));
|
arg = calloc(1, sizeof(Signal_Argument));
|
||||||
EINA_SAFETY_ON_NULL_GOTO(arg, error);
|
EINA_SAFETY_ON_NULL_GOTO(arg, error);
|
||||||
|
|
||||||
if (!strncmp(key, ARGX, strlen(ARGX)))
|
if (!strncmp(key, ARGX, strlen(ARGX)))
|
||||||
{
|
{
|
||||||
int id = atoi(key+strlen(ARGX)-1);
|
int id = atoi(key + strlen(ARGX));
|
||||||
arg->index = (unsigned short) id;
|
arg->index = (unsigned short) id;
|
||||||
arg->value = eina_stringshare_add(value);
|
arg->value = eina_stringshare_add(read);
|
||||||
sh->args = eina_inlist_sorted_state_insert(sh->args,
|
sh->args = eina_inlist_sorted_state_insert(sh->args,
|
||||||
EINA_INLIST_GET(arg),
|
EINA_INLIST_GET(arg),
|
||||||
_sort_arg,
|
_sort_arg,
|
||||||
sh->state_args);
|
sh->state_args);
|
||||||
_match_append(sh->match, key, value);
|
_match_append(sh->match, key, read);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR("%s not supported", key);
|
||||||
|
free(arg);
|
||||||
}
|
}
|
||||||
key = NULL;
|
key = NULL;
|
||||||
} while(key);
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
dbus_error_init(&err);
|
dbus_error_init(&err);
|
||||||
|
|
Loading…
Reference in New Issue