adapter: free slave in the module

This commit is contained in:
Wim Taymans 2019-07-17 15:31:01 +02:00
parent 53d3d5cb0c
commit af1b012a70
3 changed files with 14 additions and 6 deletions

View file

@ -62,6 +62,7 @@ struct node_data {
struct factory_data *data;
struct spa_list link;
struct pw_node *adapter;
struct pw_node *slave;
struct spa_hook adapter_listener;
struct spa_hook resource_listener;
};
@ -69,6 +70,7 @@ struct node_data {
static void resource_destroy(void *data)
{
struct node_data *nd = data;
spa_hook_remove(&nd->resource_listener);
if (nd->adapter)
pw_node_destroy(nd->adapter);
@ -86,9 +88,16 @@ static void node_destroy(void *data)
nd->adapter = NULL;
}
static void node_free(void *data)
{
struct node_data *nd = data;
pw_node_destroy(nd->slave);
}
static const struct pw_node_events node_events = {
PW_VERSION_NODE_EVENTS,
.destroy = node_destroy
.destroy = node_destroy,
.free = node_free,
};
static void *create_object(void *_data,
@ -149,6 +158,7 @@ static void *create_object(void *_data,
nd = pw_adapter_get_user_data(adapter);
nd->data = d;
nd->adapter = adapter;
nd->slave = slave;
spa_list_append(&d->node_list, &nd->link);
pw_node_add_listener(adapter, &nd->adapter_listener, &node_events, nd);

View file

@ -160,15 +160,14 @@ static const struct pw_port_implementation port_implementation = {
static void node_destroy(void *data)
{
struct node *n = data;
struct port *p, *tmp;
struct port *p;
spa_list_for_each_safe(p, tmp, &n->ports, link) {
spa_list_consume(p, &n->ports, link) {
pw_port_set_mix(p->port, NULL, 0);
spa_list_remove(&p->link);
spa_handle_clear(p->spa_handle);
free(p);
}
pw_node_destroy(n->slave);
pw_properties_free(n->props);
}

View file

@ -71,9 +71,8 @@ static void spa_node_free(void *data)
pw_log_debug("spa-node %p: free", node);
spa_hook_remove(&impl->node_listener);
if (impl->handle) {
if (impl->handle)
pw_unload_spa_handle(impl->handle);
}
free(impl->factory_name);
}