mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	context: protect against bad context state
Avoid crash in firefox when daemon is stopped.
This commit is contained in:
		
							parent
							
								
									42e60b66f3
								
							
						
					
					
						commit
						732bf4b58c
					
				
					 2 changed files with 9 additions and 0 deletions
				
			
		| 
						 | 
					@ -1923,6 +1923,8 @@ pa_operation* pa_context_drain(pa_context *c, pa_context_notify_cb_t cb, void *u
 | 
				
			||||||
	pa_operation *o;
 | 
						pa_operation *o;
 | 
				
			||||||
	struct notify_data *d;
 | 
						struct notify_data *d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o = pa_operation_new(c, NULL, on_notify, sizeof(struct notify_data));
 | 
						o = pa_operation_new(c, NULL, on_notify, sizeof(struct notify_data));
 | 
				
			||||||
	d = o->userdata;
 | 
						d = o->userdata;
 | 
				
			||||||
	d->cb = cb;
 | 
						d->cb = cb;
 | 
				
			||||||
| 
						 | 
					@ -1938,6 +1940,8 @@ pa_operation* pa_context_exit_daemon(pa_context *c, pa_context_success_cb_t cb,
 | 
				
			||||||
	pa_operation *o;
 | 
						pa_operation *o;
 | 
				
			||||||
	struct success_data *d;
 | 
						struct success_data *d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o = pa_operation_new(c, NULL, on_success, sizeof(struct success_data));
 | 
						o = pa_operation_new(c, NULL, on_success, sizeof(struct success_data));
 | 
				
			||||||
	d = o->userdata;
 | 
						d = o->userdata;
 | 
				
			||||||
	d->error = PA_ERR_NOTIMPLEMENTED;
 | 
						d->error = PA_ERR_NOTIMPLEMENTED;
 | 
				
			||||||
| 
						 | 
					@ -1994,6 +1998,8 @@ pa_operation* pa_context_set_default_sink(pa_context *c, const char *name, pa_co
 | 
				
			||||||
	pa_operation *o;
 | 
						pa_operation *o;
 | 
				
			||||||
	struct default_node *d;
 | 
						struct default_node *d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o = pa_operation_new(c, NULL, do_default_node, sizeof(*d));
 | 
						o = pa_operation_new(c, NULL, do_default_node, sizeof(*d));
 | 
				
			||||||
	d = o->userdata;
 | 
						d = o->userdata;
 | 
				
			||||||
	d->mask = PA_SUBSCRIPTION_MASK_SINK;
 | 
						d->mask = PA_SUBSCRIPTION_MASK_SINK;
 | 
				
			||||||
| 
						 | 
					@ -2012,6 +2018,8 @@ pa_operation* pa_context_set_default_source(pa_context *c, const char *name, pa_
 | 
				
			||||||
	pa_operation *o;
 | 
						pa_operation *o;
 | 
				
			||||||
	struct default_node *d;
 | 
						struct default_node *d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o = pa_operation_new(c, NULL, do_default_node, sizeof(*d));
 | 
						o = pa_operation_new(c, NULL, do_default_node, sizeof(*d));
 | 
				
			||||||
	d = o->userdata;
 | 
						d = o->userdata;
 | 
				
			||||||
	d->mask = PA_SUBSCRIPTION_MASK_SOURCE;
 | 
						d->mask = PA_SUBSCRIPTION_MASK_SOURCE;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -660,6 +660,7 @@ static void stream_unlink(pa_stream *s)
 | 
				
			||||||
		if (o->stream == s)
 | 
							if (o->stream == s)
 | 
				
			||||||
			pa_operation_cancel(o);
 | 
								pa_operation_cancel(o);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						s->drain = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_list_remove(&s->link);
 | 
						spa_list_remove(&s->link);
 | 
				
			||||||
	if (s->stream)
 | 
						if (s->stream)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue