diff options
author | Ted Gould <ted@gould.cx> | 2012-03-02 10:54:50 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2012-03-02 10:54:50 -0600 |
commit | c3bd07e8e6679bbda00737b81b2397b93ec5a723 (patch) | |
tree | 5304dba6a569331f25442344e765aed76017aada /libindicator/indicator-service.c | |
parent | dbaf540c033c3a1e296834be94dd0893cde88383 (diff) | |
download | libayatana-indicator-c3bd07e8e6679bbda00737b81b2397b93ec5a723.tar.gz libayatana-indicator-c3bd07e8e6679bbda00737b81b2397b93ec5a723.tar.bz2 libayatana-indicator-c3bd07e8e6679bbda00737b81b2397b93ec5a723.zip |
Copying the name before using it to remove as it seems that the unwatch can cause the name to be free'd in some cases. Odd, but valgrind can find it
Diffstat (limited to 'libindicator/indicator-service.c')
-rw-r--r-- | libindicator/indicator-service.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c index e9f3133..11171fc 100644 --- a/libindicator/indicator-service.c +++ b/libindicator/indicator-service.c @@ -588,7 +588,9 @@ unwatch_core (IndicatorService * service, const gchar * name) /* Remove us from the watcher list here */ gpointer watcher_item = g_hash_table_lookup(priv->watchers, name); if (watcher_item != NULL) { - g_hash_table_remove(priv->watchers, name); + gchar * safe_name = g_strdup(name); + g_hash_table_remove(priv->watchers, safe_name); + g_free(safe_name); } else { /* Odd that we couldn't find the person, but, eh */ g_warning("Unable to find watcher who is unwatching: %s", name); |