stream: data_loop is NULL when not connected

When there is no node (not connected) the data_loop should remain NULL.
This commit is contained in:
Wim Taymans 2023-06-13 10:11:24 +02:00
parent 784f003068
commit 9ba3792038
2 changed files with 12 additions and 2 deletions

View file

@ -1448,7 +1448,10 @@ do_remove_callbacks(struct spa_loop *loop,
static void hook_removed(struct spa_hook *hook) static void hook_removed(struct spa_hook *hook)
{ {
struct filter *impl = hook->priv; struct filter *impl = hook->priv;
if (impl->data_loop)
pw_loop_invoke(impl->data_loop, do_remove_callbacks, 1, NULL, 0, true, impl); pw_loop_invoke(impl->data_loop, do_remove_callbacks, 1, NULL, 0, true, impl);
else
spa_zero(impl->rt_callbacks);
hook->priv = NULL; hook->priv = NULL;
hook->removed = NULL; hook->removed = NULL;
} }
@ -1541,8 +1544,10 @@ int pw_filter_update_properties(struct pw_filter *filter, void *port_data, const
static void node_event_destroy(void *data) static void node_event_destroy(void *data)
{ {
struct pw_filter *filter = data; struct pw_filter *filter = data;
struct filter *impl = SPA_CONTAINER_OF(filter, struct filter, this);
spa_hook_remove(&filter->node_listener); spa_hook_remove(&filter->node_listener);
filter->node = NULL; filter->node = NULL;
impl->data_loop = NULL;
} }
static const struct pw_impl_node_events node_events = { static const struct pw_impl_node_events node_events = {

View file

@ -1344,8 +1344,10 @@ static int node_event_param(void *object, int seq,
static void node_event_destroy(void *data) static void node_event_destroy(void *data)
{ {
struct pw_stream *stream = data; struct pw_stream *stream = data;
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
spa_hook_remove(&stream->node_listener); spa_hook_remove(&stream->node_listener);
stream->node = NULL; stream->node = NULL;
impl->data_loop = NULL;
} }
static void node_event_info(void *data, const struct pw_node_info *info) static void node_event_info(void *data, const struct pw_node_info *info)
@ -1707,7 +1709,10 @@ do_remove_callbacks(struct spa_loop *loop,
static void hook_removed(struct spa_hook *hook) static void hook_removed(struct spa_hook *hook)
{ {
struct stream *impl = hook->priv; struct stream *impl = hook->priv;
if (impl->data_loop)
pw_loop_invoke(impl->data_loop, do_remove_callbacks, 1, NULL, 0, true, impl); pw_loop_invoke(impl->data_loop, do_remove_callbacks, 1, NULL, 0, true, impl);
else
spa_zero(impl->rt_callbacks);
hook->priv = NULL; hook->priv = NULL;
hook->removed = NULL; hook->removed = NULL;
} }