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) {
|
if (seq == d->end) {
|
||||||
spa_hook_remove(&d->listener);
|
spa_hook_remove(&d->listener);
|
||||||
|
d->end = -1;
|
||||||
pw_client_set_busy(d->resource->client, false);
|
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,
|
pw_core_resource_error(client->core_resource,
|
||||||
resource->id, seq, res, spa_strerror(res));
|
resource->id, seq, res, spa_strerror(res));
|
||||||
} else if (SPA_RESULT_IS_ASYNC(res)) {
|
} else if (SPA_RESULT_IS_ASYNC(res)) {
|
||||||
|
pw_client_set_busy(client, true);
|
||||||
data->data.data = data;
|
data->data.data = data;
|
||||||
data->data.callback = reply_param;
|
data->data.callback = reply_param;
|
||||||
spa_device_add_listener(device->device, &data->listener,
|
if (data->end == -1)
|
||||||
&device_events, data);
|
spa_device_add_listener(device->device, &data->listener,
|
||||||
|
&device_events, data);
|
||||||
data->seq = res;
|
data->seq = res;
|
||||||
data->end = spa_device_sync(device->device, res);
|
data->end = spa_device_sync(device->device, res);
|
||||||
pw_client_set_busy(client, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
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 = pw_resource_get_user_data(resource);
|
||||||
data->device = this;
|
data->device = this;
|
||||||
data->resource = resource;
|
data->resource = resource;
|
||||||
|
data->end = -1;
|
||||||
|
|
||||||
pw_resource_add_listener(resource,
|
pw_resource_add_listener(resource,
|
||||||
&data->resource_listener,
|
&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);
|
pw_log_debug("sync result %d %d (%d/%d)", res, seq, d->seq, d->end);
|
||||||
if (seq == d->end) {
|
if (seq == d->end) {
|
||||||
spa_hook_remove(&d->listener);
|
spa_hook_remove(&d->listener);
|
||||||
|
d->end = -1;
|
||||||
pw_client_set_busy(d->resource->client, false);
|
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));
|
resource->id, res, spa_strerror(res));
|
||||||
pw_resource_error(resource, res, spa_strerror(res));
|
pw_resource_error(resource, res, spa_strerror(res));
|
||||||
} else if (SPA_RESULT_IS_ASYNC(res)) {
|
} else if (SPA_RESULT_IS_ASYNC(res)) {
|
||||||
spa_node_add_listener(node->node, &data->listener,
|
pw_client_set_busy(client, true);
|
||||||
&node_events, data);
|
if (data->end == -1)
|
||||||
|
spa_node_add_listener(node->node, &data->listener,
|
||||||
|
&node_events, data);
|
||||||
data->seq = res;
|
data->seq = res;
|
||||||
data->end = spa_node_sync(node->node, res);
|
data->end = spa_node_sync(node->node, res);
|
||||||
pw_client_set_busy(client, true);
|
|
||||||
}
|
}
|
||||||
return 0;
|
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 = pw_resource_get_user_data(resource);
|
||||||
data->node = this;
|
data->node = this;
|
||||||
data->resource = resource;
|
data->resource = resource;
|
||||||
|
data->end = -1;
|
||||||
|
|
||||||
pw_resource_add_listener(resource,
|
pw_resource_add_listener(resource,
|
||||||
&data->resource_listener,
|
&data->resource_listener,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue