Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pipewire for openSUSE:Factory checked in at 2026-06-19 16:30:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pipewire (Old) and /work/SRC/openSUSE:Factory/.pipewire.new.1956 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pipewire" Fri Jun 19 16:30:35 2026 rev:157 rq:1360215 version:1.6.7 Changes: -------- --- /work/SRC/openSUSE:Factory/pipewire/pipewire.changes 2026-05-28 17:24:41.554139319 +0200 +++ /work/SRC/openSUSE:Factory/.pipewire.new.1956/pipewire.changes 2026-06-19 17:20:45.704815038 +0200 @@ -1,0 +2,35 @@ +Thu Jun 18 09:10:18 UTC 2026 - Antonio Larrosa <[email protected]> + +- Update to version 1.6.7: + * This is a bugfix release that is API and ABI compatible with + the previous 1.6.x releases. + * Highlights + - Fix a race issue where some ports would stay silent after a + rate change. + - Fix sync regressions between ALSA cards in some cases. + - Small fixes and improvements. + * PipeWire + - Fix a scheduler regression where some driver nodes would not + run correctly and cause sync issues. (#5210 (closed)) + - Fix a race issue with suspend on samplerate changes. It can + cause ports to be silent. (#3547 (closed)) + * Modules + - There are some locking issues in the RT portal, for now + reduce the DBus timeout to something more sane. Also disable + portal RT for pipewire and the pulse server. These are not + usually run in a sandbox and can go directly to RTKit. + - Fix potential incorrect delay in combine-stream. + * SPA + - Fix a regression in ALSA period_size calculations. For + non-power-of-2 periods, it would in some cases round down a + a power-of-2, causing a mismatch between requested and + configured period_size. (#5302 (closed)) + - Fix a potential segfault when removing a card because of bad + ALSA api usage. (#5255 (closed)) + - Emit a route param update when card properties change. + Otherwise, jack port updates are not always reflected + correctly. + * Misc + - Make sure we don't deal with uninitialized spa_dict. + +------------------------------------------------------------------- @@ -4 +39 @@ -- Update to version 1.6.6 +- Update to version 1.6.6: Old: ---- pipewire-1.6.6.tar.xz New: ---- pipewire-1.6.7.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pipewire.spec ++++++ --- /var/tmp/diff_new_pack.Vx24BU/_old 2026-06-19 17:20:48.412908257 +0200 +++ /var/tmp/diff_new_pack.Vx24BU/_new 2026-06-19 17:20:48.416908394 +0200 @@ -71,7 +71,7 @@ %bcond_with aptx Name: pipewire -Version: 1.6.6 +Version: 1.6.7 Release: 0 Summary: A Multimedia Framework designed to be an audio and video server and more License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Vx24BU/_old 2026-06-19 17:20:48.464910047 +0200 +++ /var/tmp/diff_new_pack.Vx24BU/_new 2026-06-19 17:20:48.468910184 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://gitlab.freedesktop.org/pipewire/pipewire.git</param> - <param name="revision">1.6.6</param> + <param name="revision">1.6.7</param> <param name="versionformat">@PARENT_TAG@</param> <!-- <param name="revision">636cbae9b6cebc4ba55903e2a686f4c4a2bd4193</param> ++++++ pipewire-1.6.6.tar.xz -> pipewire-1.6.7.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/NEWS new/pipewire-1.6.7/NEWS --- old/pipewire-1.6.6/NEWS 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/NEWS 2026-06-18 10:01:36.000000000 +0200 @@ -1,3 +1,42 @@ +# PipeWire 1.6.7 (2026-06-18) + +This is a bugfix release that is API and ABI compatible with the previous +1.6.x releases. + +## Highlights + - Fix a race issue where some ports would stay silent after a rate change. + - Fix sync regressions between ALSA cards in some cases. + - Small fixes and improvements. + + +## PipeWire + - Fix a scheduler regression where some driver nodes would not run + correctly and cause sync issues. (#5210) + - Fix a race issue with suspend on samplerate changes. It can cause ports + to be silent. (#3547) + +## Modules + - There are some locking issues in the RT portal, for now reduce the + DBus timeout to something more sane. Also disable portal RT for + pipewire and the pulse server. These are not usually run in a sandbox + and can go directly to RTKit. + - Fix potential incorrect delay in combine-stream. + +## SPA + - Fix a regression in ALSA period_size calculations. For non-power-of-2 + periods, it would in some cases round down a a power-of-2, causing a + mismatch between requested and configured period_size. (#5302) + - Fix a potential segfault when removing a card because of bad ALSA api + usage. (#5255) + - Emit a route param update when card properties change. Otherwise, jack + port updates are not always reflected correctly. + +## Misc + - Make sure we don't deal with uninitialized spa_dict. + + +Older versions: + # PipeWire 1.6.6 (2026-05-26) This is a bugfix release that is API and ABI compatible with the previous @@ -39,8 +78,6 @@ correctly on close. - Make sure pw-cat does not try to convert Midi to UMP. -Older versions: - # PipeWire 1.6.5 (2026-05-13) This is a bugfix release that is API and ABI compatible with the previous diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/meson.build new/pipewire-1.6.7/meson.build --- old/pipewire-1.6.6/meson.build 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/meson.build 2026-06-18 10:01:36.000000000 +0200 @@ -1,5 +1,5 @@ project('pipewire', ['c' ], - version : '1.6.6', + version : '1.6.7', license : [ 'MIT', 'LGPL-2.1-or-later', 'GPL-2.0-only' ], meson_version : '>= 0.61.1', default_options : [ 'warning_level=3', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/spa/include/spa/param/dict-utils.h new/pipewire-1.6.7/spa/include/spa/param/dict-utils.h --- old/pipewire-1.6.6/spa/include/spa/param/dict-utils.h 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/spa/include/spa/param/dict-utils.h 2026-06-18 10:01:36.000000000 +0200 @@ -109,7 +109,7 @@ items[n].key = key; items[n].value = value; } - dict->items = items; + *dict = SPA_DICT_INIT(items, n); spa_pod_parser_pop(&prs, &f[0]); return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/spa/include/spa/param/tag-utils.h new/pipewire-1.6.7/spa/include/spa/param/tag-utils.h --- old/pipewire-1.6.6/spa/include/spa/param/tag-utils.h 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/spa/include/spa/param/tag-utils.h 2026-06-18 10:01:36.000000000 +0200 @@ -96,7 +96,7 @@ items[n].key = key; items[n].value = value; } - dict->items = items; + *dict = SPA_DICT_INIT(items, n); spa_pod_parser_pop(&prs, &f[0]); return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/spa/plugins/alsa/acp/alsa-util.c new/pipewire-1.6.7/spa/plugins/alsa/acp/alsa-util.c --- old/pipewire-1.6.6/spa/plugins/alsa/acp/alsa-util.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/spa/plugins/alsa/acp/alsa-util.c 2026-06-18 10:01:36.000000000 +0200 @@ -1723,7 +1723,7 @@ // assertion in alsa-lib since the list is not empty. _helem = snd_mixer_elem_get_private(melem); *_helem = NULL; - snd_mixer_elem_detach(melem, helem); + snd_mixer_elem_remove(melem); } else if (mask & SND_CTL_EVENT_MASK_ADD) { snd_ctl_elem_iface_t iface = snd_hctl_elem_get_interface(helem); if (iface == SND_CTL_ELEM_IFACE_CARD || iface == SND_CTL_ELEM_IFACE_PCM) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/spa/plugins/alsa/acp/proplist.h new/pipewire-1.6.7/spa/plugins/alsa/acp/proplist.h --- old/pipewire-1.6.6/spa/plugins/alsa/acp/proplist.h 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/spa/plugins/alsa/acp/proplist.h 2026-06-18 10:01:36.000000000 +0200 @@ -180,8 +180,7 @@ static inline void pa_proplist_as_dict(const pa_proplist *p, struct acp_dict *dict) { - dict->n_items = pa_proplist_size(p); - dict->items = p->array.data; + *dict = ACP_DICT_INIT(p->array.data, pa_proplist_size(p)); } #ifdef __cplusplus diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/spa/plugins/alsa/alsa-acp-device.c new/pipewire-1.6.7/spa/plugins/alsa/alsa-acp-device.c --- old/pipewire-1.6.6/spa/plugins/alsa/alsa-acp-device.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/spa/plugins/alsa/alsa-acp-device.c 2026-06-18 10:01:36.000000000 +0200 @@ -897,6 +897,11 @@ { struct impl *this = data; spa_log_info(this->log, "card properties changed"); + + this->info.change_mask |= SPA_DEVICE_CHANGE_MASK_PARAMS; + this->params[IDX_EnumRoute].user++; + this->params[IDX_Route].user++; + emit_info(this, false); } static bool has_device(struct acp_card_profile *pr, uint32_t index) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/spa/plugins/alsa/alsa-pcm.c new/pipewire-1.6.7/spa/plugins/alsa/alsa-pcm.c --- old/pipewire-1.6.6/spa/plugins/alsa/alsa-pcm.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/spa/plugins/alsa/alsa-pcm.c 2026-06-18 10:01:36.000000000 +0200 @@ -2430,9 +2430,15 @@ /* no period size specified. If we are batch or forcing our quantum, * use the graph requested quantum scaled by our rate */ if (period_size == 0 && (state->is_batch || state->force_quantum) && state->position) { - period_size = SPA_SCALE32_UP(state->position->clock.target_duration, - state->rate, state->position->clock.target_rate.denom); - period_size = flp2(period_size); + period_size = state->position->clock.target_duration; + /* only if we are rate adjusting, scale the period size and round down + * to a power of two. */ + if (state->position->clock.target_rate.denom != 0 && + state->rate != (int)state->position->clock.target_rate.denom) { + period_size = SPA_SCALE32_UP(period_size, + state->rate, state->position->clock.target_rate.denom); + period_size = flp2(period_size); + } } if (period_size == 0) period_size = default_period; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/client.conf.in new/pipewire-1.6.7/src/daemon/client.conf.in --- old/pipewire-1.6.6/src/daemon/client.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/client.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -47,6 +47,11 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] condition = [ { module.rt = !false } ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/filter-chain.conf.in new/pipewire-1.6.7/src/daemon/filter-chain.conf.in --- old/pipewire-1.6.6/src/daemon/filter-chain.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/filter-chain.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -45,6 +45,11 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/jack.conf.in new/pipewire-1.6.7/src/daemon/jack.conf.in --- old/pipewire-1.6.6/src/daemon/jack.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/jack.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -46,6 +46,11 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/minimal.conf.in new/pipewire-1.6.7/src/daemon/minimal.conf.in --- old/pipewire-1.6.6/src/daemon/minimal.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/minimal.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -97,6 +97,11 @@ rt.prio = @rtprio_server@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/pipewire-aes67.conf.in new/pipewire-1.6.7/src/daemon/pipewire-aes67.conf.in --- old/pipewire-1.6.6/src/daemon/pipewire-aes67.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/pipewire-aes67.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -55,6 +55,11 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/pipewire-avb.conf.in new/pipewire-1.6.7/src/daemon/pipewire-avb.conf.in --- old/pipewire-1.6.6/src/daemon/pipewire-avb.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/pipewire-avb.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -30,6 +30,11 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/pipewire-pulse.conf.in new/pipewire-1.6.7/src/daemon/pipewire-pulse.conf.in --- old/pipewire-1.6.6/src/daemon/pipewire-pulse.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/pipewire-pulse.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -31,6 +31,9 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + rtportal.enabled = false + #rtkit.enabled = true #uclamp.min = 0 #uclamp.max = 1024 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/pipewire-vulkan.conf.in new/pipewire-1.6.7/src/daemon/pipewire-vulkan.conf.in --- old/pipewire-1.6.6/src/daemon/pipewire-vulkan.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/pipewire-vulkan.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -54,6 +54,11 @@ #rt.prio = @rtprio_client@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + #rtportal.enabled = true + #rtkit.enabled = true + #uclamp.min = 0 + #uclamp.max = 1024 } flags = [ ifexists nofail ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/daemon/pipewire.conf.in new/pipewire-1.6.7/src/daemon/pipewire.conf.in --- old/pipewire-1.6.6/src/daemon/pipewire.conf.in 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/daemon/pipewire.conf.in 2026-06-18 10:01:36.000000000 +0200 @@ -115,6 +115,9 @@ rt.prio = @rtprio_server@ #rt.time.soft = -1 #rt.time.hard = -1 + #rlimits.enabled = true + rtportal.enabled = false + #rtkit.enabled = true #uclamp.min = 0 #uclamp.max = 1024 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/modules/module-combine-stream.c new/pipewire-1.6.7/src/modules/module-combine-stream.c --- old/pipewire-1.6.6/src/modules/module-combine-stream.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/modules/module-combine-stream.c 2026-06-18 10:01:36.000000000 +0200 @@ -771,6 +771,7 @@ break; case PW_STREAM_STATE_STREAMING: update_latency(s->impl); + update_delay(s->impl); break; default: break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/modules/module-protocol-pulse/collect.c new/pipewire-1.6.7/src/modules/module-protocol-pulse/collect.c --- old/pipewire-1.6.6/src/modules/module-protocol-pulse/collect.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/modules/module-protocol-pulse/collect.c 2026-06-18 10:01:36.000000000 +0200 @@ -502,7 +502,8 @@ return SPA_ID_INVALID; } -struct spa_dict *collect_props(struct spa_pod *info, struct spa_dict *dict) +struct spa_dict *collect_props(struct spa_pod *info, struct spa_dict *dict, + struct spa_dict_item *items, size_t capacity) { struct spa_pod_parser prs; struct spa_pod_frame f[1]; @@ -513,15 +514,18 @@ spa_pod_parser_get_int(&prs, &n_items) < 0) return NULL; + if (n_items < 0 || (size_t) n_items > capacity) + return NULL; + for (n = 0; n < n_items; n++) { if (spa_pod_parser_get(&prs, - SPA_POD_String(&dict->items[n].key), - SPA_POD_String(&dict->items[n].value), + SPA_POD_String(&items[n].key), + SPA_POD_String(&items[n].value), NULL) < 0) break; } spa_pod_parser_pop(&prs, &f[0]); - dict->n_items = n; + *dict = SPA_DICT_INIT(items, n); return dict; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/modules/module-protocol-pulse/collect.h new/pipewire-1.6.7/src/modules/module-protocol-pulse/collect.h --- old/pipewire-1.6.6/src/modules/module-protocol-pulse/collect.h 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/modules/module-protocol-pulse/collect.h 2026-06-18 10:01:36.000000000 +0200 @@ -142,7 +142,8 @@ /* ========================================================================== */ -struct spa_dict *collect_props(struct spa_pod *info, struct spa_dict *dict); +struct spa_dict *collect_props(struct spa_pod *info, struct spa_dict *dict, + struct spa_dict_item *items, size_t capacity); uint32_t find_profile_index(struct pw_manager_object *card, const char *name); uint32_t find_port_index(struct pw_manager_object *card, uint32_t direction, const char *port_name); struct pw_manager_object *find_peer_for_link(struct pw_manager *m, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/modules/module-protocol-pulse/pulse-server.c new/pipewire-1.6.7/src/modules/module-protocol-pulse/pulse-server.c --- old/pipewire-1.6.6/src/modules/module-protocol-pulse/pulse-server.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/modules/module-protocol-pulse/pulse-server.c 2026-06-18 10:01:36.000000000 +0200 @@ -3282,7 +3282,7 @@ static int do_remove_proplist(struct client *client, uint32_t command, uint32_t tag, struct message *m) { uint32_t i, channel; - struct spa_dict dict; + struct spa_dict dict = SPA_DICT_INIT(NULL, 0); struct spa_dict_item *items; spa_autoptr(pw_properties) props = pw_properties_new(NULL, NULL); @@ -3643,8 +3643,7 @@ if (pi->info && pi->n_props > 0) { items = alloca(pi->n_props * sizeof(*items)); - dict.items = items; - pdict = collect_props(pi->info, &dict); + pdict = collect_props(pi->info, &dict, items, pi->n_props); } message_put(m, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/modules/module-rt.c new/pipewire-1.6.7/src/modules/module-rt.c --- old/pipewire-1.6.6/src/modules/module-rt.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/modules/module-rt.c 2026-06-18 10:01:36.000000000 +0200 @@ -185,6 +185,8 @@ #define XDG_PORTAL_OBJECT_PATH "/org/freedesktop/portal/desktop" #define XDG_PORTAL_INTERFACE "org.freedesktop.portal.Realtime" +#define DBUS_TIMEOUT_MSEC 2000 /* max time to block on any single message */ + /** \cond */ struct pw_rtkit_bus { DBusConnection *bus; @@ -370,7 +372,7 @@ spa_auto(DBusError) error = DBUS_ERROR_INIT; - if (!(r = dbus_connection_send_with_reply_and_block(connection->bus, m, -1, &error))) + if (!(r = dbus_connection_send_with_reply_and_block(connection->bus, m, DBUS_TIMEOUT_MSEC, &error))) return translate_error(error.name); if (dbus_set_error_from_message(&error, r)) @@ -1132,7 +1134,7 @@ } if (IS_VALID_NICE_LEVEL(impl->nice_level)) { - if (set_nice(impl, impl->nice_level, !use_rtkit) < 0) + if (set_nice(impl, impl->nice_level, !use_rtkit) < 0) use_rtkit = can_use_rtkit; } if (!use_rtkit) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/pipewire/context.c new/pipewire-1.6.7/src/pipewire/context.c --- old/pipewire-1.6.6/src/pipewire/context.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/pipewire/context.c 2026-06-18 10:01:36.000000000 +0200 @@ -1046,17 +1046,15 @@ } } } - /* now go through all the nodes that have the same link group and - * that are not yet visited. Note how nodes with the same group - * don't get included here. They were added to the same driver but - * need to otherwise stay idle unless some non-passive link activates - * them. */ - if (node->link_groups != NULL) { + /* now go through all the nodes that share groups and link_groups + * that are not yet visited */ + if (node->groups != NULL || node->link_groups != NULL) { spa_list_for_each(t, nodes, sort_link) { if (t->exported || !t->active || SPA_FLAG_IS_SET(t->checked, 1u<<direction)) continue; - if (pw_strv_find_common(t->link_groups, node->link_groups) < 0) + if (pw_strv_find_common(t->groups, node->groups) < 0 && + pw_strv_find_common(t->link_groups, node->link_groups) < 0) continue; pw_log_debug(" group %p: '%s'", t, t->name); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/pipewire/impl-link.c new/pipewire-1.6.7/src/pipewire/impl-link.c --- old/pipewire-1.6.6/src/pipewire/impl-link.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/pipewire/impl-link.c 2026-06-18 10:01:36.000000000 +0200 @@ -1046,15 +1046,28 @@ struct pw_impl_port *other, enum pw_impl_port_state old, enum pw_impl_port_state state, const char *error) { + struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this); + struct port_info *info; + pw_log_debug("%p: port %p old:%d -> state:%d prepared:%d preparing:%d", this, port, old, state, this->prepared, this->preparing); + if (port == impl->output.port) + info = &impl->output; + else + info = &impl->input; + switch (state) { case PW_IMPL_PORT_STATE_ERROR: link_update_state(this, PW_LINK_STATE_ERROR, -EIO, error ? strdup(error) : NULL); break; case PW_IMPL_PORT_STATE_INIT: case PW_IMPL_PORT_STATE_CONFIGURE: + if (old == PW_IMPL_PORT_STATE_INIT) { + port_set_busy_id(this, info, SPA_ID_INVALID, SPA_ID_INVALID); + pw_work_queue_cancel(impl->work, info, SPA_ID_INVALID); + old = PW_IMPL_PORT_STATE_READY; + } if (this->prepared || state < old) { this->prepared = false; link_update_state(this, PW_LINK_STATE_INIT, 0, NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/pipewire/impl-node.c new/pipewire-1.6.7/src/pipewire/impl-node.c --- old/pipewire-1.6.6/src/pipewire/impl-node.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/pipewire/impl-node.c 2026-06-18 10:01:36.000000000 +0200 @@ -550,23 +550,10 @@ if (res < 0 && res != -EIO) pw_log_warn("%p: suspend node error %s", this, spa_strerror(res)); - spa_list_for_each(p, &this->input_ports, link) { - if ((res = pw_impl_port_set_param(p, SPA_PARAM_Format, 0, NULL)) < 0) - pw_log_warn("%p: error unset format input: %s", - this, spa_strerror(res)); - /* force CONFIGURE in case of async, use update_state to - * notify links so they can cancel pending work */ - pw_impl_port_update_state(p, PW_IMPL_PORT_STATE_CONFIGURE, 0, NULL); - } - - spa_list_for_each(p, &this->output_ports, link) { - if ((res = pw_impl_port_set_param(p, SPA_PARAM_Format, 0, NULL)) < 0) - pw_log_warn("%p: error unset format output: %s", - this, spa_strerror(res)); - /* force CONFIGURE in case of async, use update_state to - * notify links so they can cancel pending work */ - pw_impl_port_update_state(p, PW_IMPL_PORT_STATE_CONFIGURE, 0, NULL); - } + spa_list_for_each(p, &this->input_ports, link) + pw_impl_port_suspend(p); + spa_list_for_each(p, &this->output_ports, link) + pw_impl_port_suspend(p); node_update_state(this, PW_NODE_STATE_SUSPENDED, 0, NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/pipewire/impl-port.c new/pipewire-1.6.7/src/pipewire/impl-port.c --- old/pipewire-1.6.6/src/pipewire/impl-port.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/pipewire/impl-port.c 2026-06-18 10:01:36.000000000 +0200 @@ -1608,6 +1608,17 @@ free(port); } +void pw_impl_port_suspend(struct pw_impl_port *port) +{ + int res; + if ((res = pw_impl_port_set_param(port, SPA_PARAM_Format, 0, NULL)) < 0) + pw_log_warn("%p: error unset format: %s", port, spa_strerror(res)); + port->state = PW_IMPL_PORT_STATE_INIT; + /* force CONFIGURE in case of async, use update_state to + * notify links so they can cancel pending work */ + pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_CONFIGURE, 0, NULL); +} + struct result_port_params_data { struct impl *impl; void *data; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/pipewire/introspect.c new/pipewire-1.6.7/src/pipewire/introspect.c --- old/pipewire-1.6.6/src/pipewire/introspect.c 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/pipewire/introspect.c 2026-06-18 10:01:36.000000000 +0200 @@ -90,6 +90,7 @@ if (copy->items == NULL) goto no_items; copy->n_items = dict->n_items; + copy->flags = dict->flags & SPA_DICT_FLAG_SORTED; for (i = 0; i < dict->n_items; i++) { items[i].key = strdup(dict->items[i].key); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.6/src/pipewire/private.h new/pipewire-1.6.7/src/pipewire/private.h --- old/pipewire-1.6.6/src/pipewire/private.h 2026-05-26 10:09:28.000000000 +0200 +++ new/pipewire-1.6.7/src/pipewire/private.h 2026-06-18 10:01:36.000000000 +0200 @@ -1296,6 +1296,9 @@ /** Destroy a port */ void pw_impl_port_destroy(struct pw_impl_port *port); +/** Suepend a port */ +void pw_impl_port_suspend(struct pw_impl_port *port); + /** Iterate the params of the given port. The callback should return * 1 to fetch the next item, 0 to stop iteration or <0 on error. * The function returns 0 on success or the error returned by the callback. */ ++++++ pipewire.obsinfo ++++++ --- /var/tmp/diff_new_pack.Vx24BU/_old 2026-06-19 17:20:49.984962370 +0200 +++ /var/tmp/diff_new_pack.Vx24BU/_new 2026-06-19 17:20:49.996962783 +0200 @@ -1,5 +1,5 @@ name: pipewire -version: 1.6.6 -mtime: 1779782968 -commit: a1c1d9f9f128ec987f23a0140a1704b8f8781787 +version: 1.6.7 +mtime: 1781769696 +commit: 3b2cb4fb037bf6033b87d3c87ee917b2f686d309
