mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
rcxml.c: fix mem leak when deduplicating keybinds
Before this patch `keybind->keysyms` wasn't free'd when - deduplicating keybinds - removing keybinds due to empty action list This patch creates a shared `keybind_destroy()` helper which gets used in all cases where a keybind is destroyed.
This commit is contained in:
parent
07110d41ff
commit
6754801052
3 changed files with 14 additions and 4 deletions
|
|
@ -30,6 +30,8 @@ struct keybind {
|
|||
*/
|
||||
struct keybind *keybind_create(const char *keybind);
|
||||
|
||||
void keybind_destroy(struct keybind *keybind);
|
||||
|
||||
/**
|
||||
* parse_modifier - parse a string containing a single modifier name (e.g. "S")
|
||||
* into the represented modifier value. returns 0 for invalid modifier names.
|
||||
|
|
|
|||
|
|
@ -188,3 +188,12 @@ keybind_create(const char *keybind)
|
|||
wl_list_init(&k->actions);
|
||||
return k;
|
||||
}
|
||||
|
||||
void
|
||||
keybind_destroy(struct keybind *keybind)
|
||||
{
|
||||
assert(wl_list_empty(&keybind->actions));
|
||||
|
||||
zfree(keybind->keysyms);
|
||||
zfree(keybind);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1626,7 +1626,7 @@ deduplicate_key_bindings(void)
|
|||
if (keybind_the_same(existing, current)) {
|
||||
wl_list_remove(&existing->link);
|
||||
action_list_free(&existing->actions);
|
||||
free(existing);
|
||||
keybind_destroy(existing);
|
||||
replaced++;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1635,7 +1635,7 @@ deduplicate_key_bindings(void)
|
|||
wl_list_for_each_safe(current, tmp, &rc.keybinds, link) {
|
||||
if (wl_list_empty(¤t->actions)) {
|
||||
wl_list_remove(¤t->link);
|
||||
free(current);
|
||||
keybind_destroy(current);
|
||||
cleared++;
|
||||
}
|
||||
}
|
||||
|
|
@ -1948,8 +1948,7 @@ rcxml_finish(void)
|
|||
wl_list_for_each_safe(k, k_tmp, &rc.keybinds, link) {
|
||||
wl_list_remove(&k->link);
|
||||
action_list_free(&k->actions);
|
||||
zfree(k->keysyms);
|
||||
zfree(k);
|
||||
keybind_destroy(k);
|
||||
}
|
||||
|
||||
struct mousebind *m, *m_tmp;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue