mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	audio-dsp: cleanup when the node is destroyed
Also clean up when the node is distroyed
This commit is contained in:
		
							parent
							
								
									75a22eedb0
								
							
						
					
					
						commit
						c194c34326
					
				
					 1 changed files with 16 additions and 1 deletions
				
			
		| 
						 | 
					@ -57,6 +57,7 @@ struct node_data {
 | 
				
			||||||
	struct factory_data *data;
 | 
						struct factory_data *data;
 | 
				
			||||||
	struct spa_list link;
 | 
						struct spa_list link;
 | 
				
			||||||
	struct pw_node *dsp;
 | 
						struct pw_node *dsp;
 | 
				
			||||||
 | 
						struct spa_hook dsp_listener;
 | 
				
			||||||
	struct spa_hook resource_listener;
 | 
						struct spa_hook resource_listener;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,8 +66,10 @@ static void resource_destroy(void *data)
 | 
				
			||||||
	struct node_data *nd = data;
 | 
						struct node_data *nd = data;
 | 
				
			||||||
	spa_list_remove(&nd->link);
 | 
						spa_list_remove(&nd->link);
 | 
				
			||||||
	spa_hook_remove(&nd->resource_listener);
 | 
						spa_hook_remove(&nd->resource_listener);
 | 
				
			||||||
	if (nd->dsp)
 | 
						if (nd->dsp) {
 | 
				
			||||||
 | 
							spa_hook_remove(&nd->dsp_listener);
 | 
				
			||||||
		pw_node_destroy(nd->dsp);
 | 
							pw_node_destroy(nd->dsp);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct pw_resource_events resource_events = {
 | 
					static const struct pw_resource_events resource_events = {
 | 
				
			||||||
| 
						 | 
					@ -74,6 +77,17 @@ static const struct pw_resource_events resource_events = {
 | 
				
			||||||
	.destroy = resource_destroy
 | 
						.destroy = resource_destroy
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void node_destroy(void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct node_data *nd = data;
 | 
				
			||||||
 | 
						spa_list_remove(&nd->link);
 | 
				
			||||||
 | 
						spa_hook_remove(&nd->resource_listener);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct pw_node_events node_events = {
 | 
				
			||||||
 | 
						PW_VERSION_NODE_EVENTS,
 | 
				
			||||||
 | 
						.destroy = node_destroy
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void *create_object(void *_data,
 | 
					static void *create_object(void *_data,
 | 
				
			||||||
			   struct pw_resource *resource,
 | 
								   struct pw_resource *resource,
 | 
				
			||||||
| 
						 | 
					@ -137,6 +151,7 @@ static void *create_object(void *_data,
 | 
				
			||||||
	spa_list_append(&d->node_list, &nd->link);
 | 
						spa_list_append(&d->node_list, &nd->link);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pw_node_register(dsp, client, pw_module_get_global(d->module), NULL);
 | 
						pw_node_register(dsp, client, pw_module_get_global(d->module), NULL);
 | 
				
			||||||
 | 
						pw_node_add_listener(dsp, &nd->dsp_listener, &node_events, nd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	res = pw_global_bind(pw_node_get_global(dsp), client, PW_PERM_RWX, PW_VERSION_NODE, new_id);
 | 
						res = pw_global_bind(pw_node_get_global(dsp), client, PW_PERM_RWX, PW_VERSION_NODE, new_id);
 | 
				
			||||||
	if (res < 0)
 | 
						if (res < 0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue