mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-10 13:30:05 -05:00
stream: don't destroy proxy twice
When the proxy was removed, we remove the event listener and don't set the proxy to NULL because the destroy event is not called anymore. If we then call disconnect twice, we try to destroy the proxy again and assert.
This commit is contained in:
parent
2462cac4f2
commit
aaaa541775
2 changed files with 8 additions and 5 deletions
|
|
@ -881,6 +881,7 @@ static const struct spa_node_methods impl_node = {
|
|||
static void proxy_removed(void *_data)
|
||||
{
|
||||
struct pw_filter *filter = _data;
|
||||
pw_log_debug(NAME" %p: removed", filter);
|
||||
spa_hook_remove(&filter->proxy_listener);
|
||||
filter->node_id = SPA_ID_INVALID;
|
||||
filter_set_state(filter, PW_FILTER_STATE_UNCONNECTED, NULL);
|
||||
|
|
@ -889,8 +890,8 @@ static void proxy_removed(void *_data)
|
|||
static void proxy_destroy(void *_data)
|
||||
{
|
||||
struct pw_filter *filter = _data;
|
||||
pw_log_debug(NAME" %p: destroy", filter);
|
||||
proxy_removed(_data);
|
||||
filter->proxy = NULL;
|
||||
}
|
||||
|
||||
static void proxy_error(void *_data, int seq, int res, const char *message)
|
||||
|
|
@ -1280,9 +1281,10 @@ int pw_filter_disconnect(struct pw_filter *filter)
|
|||
pw_log_debug(NAME" %p: disconnect", filter);
|
||||
impl->disconnecting = true;
|
||||
|
||||
if (filter->proxy)
|
||||
if (filter->proxy) {
|
||||
pw_proxy_destroy(filter->proxy);
|
||||
|
||||
filter->proxy = NULL;
|
||||
}
|
||||
if (impl->disconnect_core) {
|
||||
impl->disconnect_core = false;
|
||||
spa_hook_remove(&filter->core_listener);
|
||||
|
|
|
|||
|
|
@ -841,7 +841,6 @@ static void proxy_destroy(void *_data)
|
|||
struct pw_stream *stream = _data;
|
||||
pw_log_debug(NAME" %p: destroy", stream);
|
||||
proxy_removed(_data);
|
||||
stream->proxy = NULL;
|
||||
}
|
||||
|
||||
static void proxy_error(void *_data, int seq, int res, const char *message)
|
||||
|
|
@ -1582,8 +1581,10 @@ int pw_stream_disconnect(struct pw_stream *stream)
|
|||
if (impl->node)
|
||||
pw_impl_node_set_active(impl->node, false);
|
||||
|
||||
if (stream->proxy)
|
||||
if (stream->proxy) {
|
||||
pw_proxy_destroy(stream->proxy);
|
||||
stream->proxy = NULL;
|
||||
}
|
||||
|
||||
if (impl->node) {
|
||||
pw_impl_node_destroy(impl->node);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue