summaryrefslogtreecommitdiffstats
path: root/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-null-sink-make-the-timerfd-non-blocking.patch
blob: 71e526f86106e46efdb0fc73251e85d3d7f6adc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
From c633004bf310998580ff8944c59d94689d6fca87 Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Thu, 1 Jul 2021 11:37:01 +0300
Subject: [PATCH] null-sink: make the timerfd non-blocking

Fixes #1377

Upstream-Status: Backport [from master/0.3.32]
Signed-off-by: George Kiagiadakis <george.kiagiadakis@collabora.com>
---
 spa/plugins/support/null-audio-sink.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/spa/plugins/support/null-audio-sink.c b/spa/plugins/support/null-audio-sink.c
index e9588f1e2..12e671db8 100644
--- a/spa/plugins/support/null-audio-sink.c
+++ b/spa/plugins/support/null-audio-sink.c
@@ -221,8 +221,11 @@ static void on_timeout(struct spa_source *source)
 	spa_log_trace(this->log, "timeout");

 	if (spa_system_timerfd_read(this->data_system,
-				this->timer_source.fd, &expirations) < 0)
+				this->timer_source.fd, &expirations) < 0) {
+		if (errno == EAGAIN)
+			return;
 		perror("read timerfd");
+	}

 	nsec = this->next_time;

@@ -818,7 +821,8 @@ impl_init(const struct spa_handle_factory *factory,

 	this->timer_source.func = on_timeout;
 	this->timer_source.data = this;
-	this->timer_source.fd = spa_system_timerfd_create(this->data_system, CLOCK_MONOTONIC, SPA_FD_CLOEXEC);
+	this->timer_source.fd = spa_system_timerfd_create(this->data_system, CLOCK_MONOTONIC,
+							  SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
 	this->timer_source.mask = SPA_IO_IN;
 	this->timer_source.rmask = 0;
 	this->timerspec.it_value.tv_sec = 0;
--
2.30.2