Apply upstream patch for invalid screencast node_id

This commit is contained in:
Aleksei Bavshin 2021-11-03 12:51:22 -07:00
parent 1b18fa578c
commit 2d8f5142de
No known key found for this signature in database
GPG Key ID: 4F071603387A382A
2 changed files with 64 additions and 1 deletions

View File

@ -1,6 +1,6 @@
Name: xdg-desktop-portal-wlr
Version: 0.4.0
Release: 2%{?dist}
Release: 3%{?dist}
Summary: xdg-desktop-portal backend for wlroots
License: MIT
@ -8,6 +8,8 @@ URL: https://github.com/emersion/%{name}
Source0: %{url}/releases/download/v%{version}/%{name}-%{version}.tar.gz
Source1: %{url}/releases/download/v%{version}/%{name}-%{version}.tar.gz.sig
Source2: https://emersion.fr/.well-known/openpgpkey/hu/dj3498u4hyyarh35rkjfnghbjxug6b19#/gpgkey-0FDE7BE0E88F5E48.gpg
# emersion/xdg-desktop-portal-wlr#168, upstream commit 5f5a29c
Patch0: xdpw-0.4.0-screencast-fix-pipewire-default-id_node.patch
BuildRequires: gcc
BuildRequires: gnupg2
@ -73,6 +75,9 @@ remote-desktop xdg-desktop-portal interfaces for wlroots based compositors.
%changelog
* Wed Nov 03 2021 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.4.0-3
- Apply upstream patch for invalid screencast node_id (#2008645)
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild

View File

@ -0,0 +1,58 @@
From 5f5a29ccfdbd24e7efd874eb8317fb01e908a301 Mon Sep 17 00:00:00 2001
From: columbarius <co1umbarius@protonmail.com>
Date: Tue, 10 Aug 2021 11:56:39 +0200
Subject: [PATCH] screencast: fix pipewire default id_node
The default node_id is SPA_ID_INVALID.
We are casting pipewire uint32_t node_id to int for printing since they are
currently staying in the range of low integer numbers. This makes
spotting an uninitialized node_id (casted to -1) much easier. Should be
corrected if that becomes an issue in the future.
---
src/screencast/pipewire_screencast.c | 2 +-
src/screencast/screencast.c | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/screencast/pipewire_screencast.c b/src/screencast/pipewire_screencast.c
index d8efb10..b6fe54a 100644
--- a/src/screencast/pipewire_screencast.c
+++ b/src/screencast/pipewire_screencast.c
@@ -111,7 +111,7 @@ static void pwr_handle_stream_state_changed(void *data,
logprint(INFO, "pipewire: stream state changed to \"%s\"",
pw_stream_state_as_string(state));
- logprint(INFO, "pipewire: node id is %d", cast->node_id);
+ logprint(INFO, "pipewire: node id is %d", (int)cast->node_id);
switch (state) {
case PW_STREAM_STATE_STREAMING:
diff --git a/src/screencast/screencast.c b/src/screencast/screencast.c
index a6b09ce..676dd82 100644
--- a/src/screencast/screencast.c
+++ b/src/screencast/screencast.c
@@ -59,6 +59,7 @@ void xdpw_screencast_instance_init(struct xdpw_screencast_context *ctx,
cast->framerate = out->framerate;
cast->with_cursor = with_cursor;
cast->refcount = 1;
+ cast->node_id = SPA_ID_INVALID;
logprint(INFO, "xdpw: screencast instance %p has %d references", cast, cast->refcount);
wl_list_insert(&ctx->screencast_instances, &cast->link);
logprint(INFO, "xdpw: %d active screencast instances",
@@ -419,7 +420,7 @@ static int method_screencast_start(sd_bus_message *msg, void *data,
start_screencast(cast);
}
- while (cast->node_id == 0) {
+ while (cast->node_id == SPA_ID_INVALID) {
int ret = pw_loop_iterate(state->pw_loop, 0);
if (ret != 0) {
logprint(ERROR, "pipewire_loop_iterate failed: %s", spa_strerror(ret));
@@ -432,6 +433,7 @@ static int method_screencast_start(sd_bus_message *msg, void *data,
return ret;
}
+ logprint(DEBUG, "dbus: start: returning node %d", (int)cast->node_id);
ret = sd_bus_message_append(reply, "ua{sv}", PORTAL_RESPONSE_SUCCESS, 1,
"streams", "a(ua{sv})", 1,
cast->node_id, 2,