From 175cd4322624be5e7e25a0773c63272606d981fd Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 15 Sep 2020 15:45:04 +0200 Subject: [PATCH] context: don't leak ports --- pipewire-pulseaudio/src/context.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pipewire-pulseaudio/src/context.c b/pipewire-pulseaudio/src/context.c index fca822ce1..0820486c4 100644 --- a/pipewire-pulseaudio/src/context.c +++ b/pipewire-pulseaudio/src/context.c @@ -733,7 +733,9 @@ static void device_clear_ports(struct global *g) pa_card_info *i = &g->card_info.info; uint32_t n; - for (n = 0; n < i->n_ports; i++) { + pw_log_debug("device %d clear ports %d", g->id, i->n_ports); + + for (n = 0; n < i->n_ports; n++) { pa_card_port_info *pi = i->ports[n]; pa_proplist_free(pi->proplist); free(pi->profiles2); @@ -763,7 +765,7 @@ static void device_sync_ports(struct global *g) g->card_info.port_devices = calloc(n_ports, sizeof(struct port_device)); i->n_ports = 0; - pw_log_debug("context %p: info for %d", g->context, g->id); + pw_log_debug("context %p: info for %d n_ports:%d", g->context, g->id, n_ports); j = 0; @@ -850,8 +852,9 @@ static void device_sync_ports(struct global *g) } i->ports[j] = NULL; i->n_ports = j; - if (i->n_ports == 0) - i->ports = NULL; + if (i->n_ports == 0) { + device_clear_ports(g); + } spa_list_for_each(p, &g->card_info.routes, link) { struct global *ng; @@ -914,6 +917,8 @@ static void device_destroy(void *data) { struct global *global = data; + pw_log_debug("device %d destroy", global->id); + if (global->card_info.info.proplist) pa_proplist_free(global->card_info.info.proplist);