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
 

Reply via email to