mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-14 06:59:57 -05:00
node: only add listener once
This commit is contained in:
parent
24d4eb585f
commit
7bb27344ba
2 changed files with 12 additions and 6 deletions
|
|
@ -235,6 +235,7 @@ static void result_device_params_async(void *data, int seq, int res, uint32_t ty
|
|||
|
||||
if (seq == d->end) {
|
||||
spa_hook_remove(&d->listener);
|
||||
d->end = -1;
|
||||
pw_client_set_busy(d->resource->client, false);
|
||||
}
|
||||
}
|
||||
|
|
@ -259,13 +260,14 @@ static int device_enum_params(void *object, int seq, uint32_t id, uint32_t start
|
|||
pw_core_resource_error(client->core_resource,
|
||||
resource->id, seq, res, spa_strerror(res));
|
||||
} else if (SPA_RESULT_IS_ASYNC(res)) {
|
||||
pw_client_set_busy(client, true);
|
||||
data->data.data = data;
|
||||
data->data.callback = reply_param;
|
||||
if (data->end == -1)
|
||||
spa_device_add_listener(device->device, &data->listener,
|
||||
&device_events, data);
|
||||
data->seq = res;
|
||||
data->end = spa_device_sync(device->device, res);
|
||||
pw_client_set_busy(client, true);
|
||||
}
|
||||
|
||||
return res;
|
||||
|
|
@ -306,6 +308,7 @@ global_bind(void *_data, struct pw_client *client, uint32_t permissions,
|
|||
data = pw_resource_get_user_data(resource);
|
||||
data->device = this;
|
||||
data->resource = resource;
|
||||
data->end = -1;
|
||||
|
||||
pw_resource_add_listener(resource,
|
||||
&data->resource_listener,
|
||||
|
|
|
|||
|
|
@ -396,6 +396,7 @@ static void result_node_sync(void *data, int seq, int res, uint32_t type, const
|
|||
pw_log_debug("sync result %d %d (%d/%d)", res, seq, d->seq, d->end);
|
||||
if (seq == d->end) {
|
||||
spa_hook_remove(&d->listener);
|
||||
d->end = -1;
|
||||
pw_client_set_busy(d->resource->client, false);
|
||||
}
|
||||
}
|
||||
|
|
@ -423,11 +424,12 @@ static int node_set_param(void *object, uint32_t id, uint32_t flags,
|
|||
resource->id, res, spa_strerror(res));
|
||||
pw_resource_error(resource, res, spa_strerror(res));
|
||||
} else if (SPA_RESULT_IS_ASYNC(res)) {
|
||||
pw_client_set_busy(client, true);
|
||||
if (data->end == -1)
|
||||
spa_node_add_listener(node->node, &data->listener,
|
||||
&node_events, data);
|
||||
data->seq = res;
|
||||
data->end = spa_node_sync(node->node, res);
|
||||
pw_client_set_busy(client, true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -473,6 +475,7 @@ global_bind(void *_data, struct pw_client *client, uint32_t permissions,
|
|||
data = pw_resource_get_user_data(resource);
|
||||
data->node = this;
|
||||
data->resource = resource;
|
||||
data->end = -1;
|
||||
|
||||
pw_resource_add_listener(resource,
|
||||
&data->resource_listener,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue