mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-17 06:59:56 -05:00
hashmap: Add the ability to free keys
Since the hashmap stores a pointer to the key provided at pa_hashmap_put() time, it make sense to allow the hashmap to be given ownership of the key and have it free it at pa_hashmap_remove/free time. To do this cleanly, we now provide the key and value free functions at hashmap creation time with a pa_hashmap_new_full. With this, we do away with the free function that was provided at remove/free time for freeing the value.
This commit is contained in:
parent
317b46b571
commit
6825df8cec
41 changed files with 232 additions and 205 deletions
|
|
@ -495,7 +495,7 @@ static pa_hook_result_t card_profile_added_cb(void *hook_data, void *call_data,
|
|||
return PA_HOOK_OK;
|
||||
|
||||
p = pa_dbusiface_card_profile_new(c, core, profile, c->next_profile_index++);
|
||||
pa_assert_se(pa_hashmap_put(c->profiles, pa_dbusiface_card_profile_get_name(p), p) >= 0);
|
||||
pa_assert_se(pa_hashmap_put(c->profiles, (char *) pa_dbusiface_card_profile_get_name(p), p) >= 0);
|
||||
|
||||
/* Send D-Bus signal */
|
||||
object_path = pa_dbusiface_card_profile_get_path(p);
|
||||
|
|
@ -523,7 +523,8 @@ pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card)
|
|||
c->core = core;
|
||||
c->card = card;
|
||||
c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, card->index);
|
||||
c->profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
|
||||
c->profiles = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL,
|
||||
(pa_free_cb_t) pa_dbusiface_card_profile_free);
|
||||
c->next_profile_index = 0;
|
||||
c->active_profile = card->active_profile;
|
||||
c->proplist = pa_proplist_copy(card->proplist);
|
||||
|
|
@ -532,7 +533,7 @@ pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card)
|
|||
|
||||
PA_HASHMAP_FOREACH(profile, card->profiles, state) {
|
||||
pa_dbusiface_card_profile *p = pa_dbusiface_card_profile_new(c, card->core, profile, c->next_profile_index++);
|
||||
pa_hashmap_put(c->profiles, pa_dbusiface_card_profile_get_name(p), p);
|
||||
pa_hashmap_put(c->profiles, (char *) pa_dbusiface_card_profile_get_name(p), p);
|
||||
}
|
||||
|
||||
pa_assert_se(pa_dbus_protocol_add_interface(c->dbus_protocol, c->path, &card_interface_info, c) >= 0);
|
||||
|
|
@ -550,7 +551,7 @@ void pa_dbusiface_card_free(pa_dbusiface_card *c) {
|
|||
|
||||
pa_hook_slot_free(c->card_profile_added_slot);
|
||||
|
||||
pa_hashmap_free(c->profiles, (pa_free_cb_t) pa_dbusiface_card_profile_free);
|
||||
pa_hashmap_free(c->profiles);
|
||||
pa_proplist_free(c->proplist);
|
||||
pa_dbus_protocol_unref(c->dbus_protocol);
|
||||
pa_subscription_free(c->subscription);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue