From cc7f91db193925ae8d9436f07d9076b51e5616cb Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 24 Nov 2020 11:27:38 +0100 Subject: [PATCH] pulse-server: actually wait for sync to complete Wait for sync to complete before we start emiting new objects. Add some more debug --- src/modules/module-protocol-pulse/manager.c | 9 +++++++-- src/modules/module-protocol-pulse/pulse-server.c | 11 +++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/modules/module-protocol-pulse/manager.c b/src/modules/module-protocol-pulse/manager.c index b98e3fd80..834037505 100644 --- a/src/modules/module-protocol-pulse/manager.c +++ b/src/modules/module-protocol-pulse/manager.c @@ -68,6 +68,7 @@ struct object { static void core_sync(struct manager *m) { m->sync_seq = pw_core_sync(m->this.core, PW_ID_CORE, m->sync_seq); + pw_log_debug("sync start %u", m->sync_seq); } static struct pw_manager_param *add_param(struct spa_list *params, uint32_t id, const struct spa_pod *param) @@ -558,8 +559,12 @@ static void on_core_done(void *data, uint32_t id, int seq) struct object *o; if (id == PW_ID_CORE) { - if (m->sync_seq == seq) - manager_emit_sync(m); + if (m->sync_seq != seq) + return; + + pw_log_debug("sync end %u/%u", m->sync_seq, seq); + + manager_emit_sync(m); spa_list_for_each(o, &m->this.object_list, this.link) { if (o->this.creating) { diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 776081c73..4f80843f3 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -1149,6 +1149,9 @@ static int reply_create_record_stream(struct stream *stream) pw_stream_update_properties(stream->stream, &SPA_DICT_INIT(items, 1)); + pw_log_info(NAME" %p: [%s] reply CREATE_RECORD_STREAM tag:%u latency:%s", + stream, client->name, stream->create_tag, latency); + reply = reply_new(client, stream->create_tag); message_put(reply, TAG_U32, stream->channel, /* stream index/channel */ @@ -3412,8 +3415,10 @@ static int fill_sink_info(struct client *client, struct message *m, if (!sample_spec_valid(&dev_info.ss) || !channel_map_valid(&dev_info.map) || - !volume_valid(&dev_info.volume_info.volume)) + !volume_valid(&dev_info.volume_info.volume)) { + pw_log_warn("%d: not ready", o->id); return -ENOENT; + } flags = SINK_LATENCY | SINK_DYNAMIC_LATENCY | SINK_DECIBEL_VOLUME; if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_API)) != NULL) @@ -3546,8 +3551,10 @@ static int fill_source_info(struct client *client, struct message *m, if (!sample_spec_valid(&dev_info.ss) || !channel_map_valid(&dev_info.map) || - !volume_valid(&dev_info.volume_info.volume)) + !volume_valid(&dev_info.volume_info.volume)) { + pw_log_warn("%d: not ready", o->id); return -ENOENT; + } flags = SOURCE_LATENCY | SOURCE_DYNAMIC_LATENCY | SOURCE_DECIBEL_VOLUME; if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_API)) != NULL)