forked from enlightenment/efl
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))
|
||||
printf("Error getting arguments from NameOwnerChanged");
|
||||
|
||||
printf("on_name_owner_changed_by_id bus = %s older=%s new=%s\n\n",
|
||||
bus, older_id, new_id);
|
||||
|
||||
if (!new_id[0])
|
||||
edbus_signal_handler_unref(sh3);
|
||||
printf("banshee started on id=%s\n", new_id);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -160,18 +156,6 @@ on_name_owner_changed(void *data, const EDBus_Message *msg)
|
|||
printf("Error getting arguments from NameOwnerChanged");
|
||||
|
||||
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
|
||||
|
@ -276,6 +260,17 @@ main(void)
|
|||
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_main_loop_begin();
|
||||
|
|
|
@ -51,7 +51,7 @@ edbus_signal_handler_shutdown(void)
|
|||
static void
|
||||
_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))
|
||||
>= DBUS_MAXIMUM_MATCH_RULE_LENGTH)
|
||||
|
@ -79,7 +79,7 @@ EAPI Eina_Bool
|
|||
edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *key = NULL, *value;
|
||||
char *key = NULL, *read;
|
||||
Signal_Argument *arg;
|
||||
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);
|
||||
|
||||
va_start(ap, sh);
|
||||
do
|
||||
for (read = va_arg(ap, char *); read; read = va_arg(ap, char *))
|
||||
{
|
||||
if (!key)
|
||||
{
|
||||
key = va_arg(ap, char *);
|
||||
key = read;
|
||||
continue;
|
||||
}
|
||||
value = va_arg(ap, char *);
|
||||
arg = calloc(1, sizeof(Signal_Argument));
|
||||
EINA_SAFETY_ON_NULL_GOTO(arg, error);
|
||||
|
||||
if (!strncmp(key, ARGX, strlen(ARGX)))
|
||||
{
|
||||
int id = atoi(key+strlen(ARGX)-1);
|
||||
arg->index = (unsigned short)id;
|
||||
arg->value = eina_stringshare_add(value);
|
||||
int id = atoi(key + strlen(ARGX));
|
||||
arg->index = (unsigned short) id;
|
||||
arg->value = eina_stringshare_add(read);
|
||||
sh->args = eina_inlist_sorted_state_insert(sh->args,
|
||||
EINA_INLIST_GET(arg),
|
||||
_sort_arg,
|
||||
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;
|
||||
} while(key);
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
dbus_error_init(&err);
|
||||
|
|
Loading…
Reference in New Issue