aboutsummaryrefslogtreecommitdiffstats
path: root/meta-pipewire/recipes-multimedia/pipewire/pipewire/0017-connection-move-remaining-data-and-fds.patch
blob: be5ac5eac8e0f20571538e2528d6fc890c46fab2 (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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 75247f77eae2c473b18cf8d7e117216f73d2e127 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Tue, 1 Oct 2019 10:43:48 +0200
Subject: [PATCH] connection: move remaining data and fds

If we can't send all of the data, move the remaining data to the
start of the buffer so that we can send it again later.

See #111

Upstream-Status: Backport [3d48ba8394396fc8d8cadb1bff3514217ddd70e6]
---
 .../module-protocol-native/connection.c       | 23 +++++++++++--------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/modules/module-protocol-native/connection.c b/src/modules/module-protocol-native/connection.c
index dbb6a3cf..cb592e41 100644
--- a/src/modules/module-protocol-native/connection.c
+++ b/src/modules/module-protocol-native/connection.c
@@ -491,8 +491,12 @@ int pw_protocol_native_connection_flush(struct pw_protocol_native_connection *co
 			if (sent < 0) {
 				if (errno == EINTR)
 					continue;
-				else
-					goto send_error;
+				else {
+					res = -errno;
+					pw_log_error("could not sendmsg on fd:%d n_fds:%d: %s",
+							conn->fd, n_fds, spa_strerror(res));
+					goto exit;
+				}
 			}
 			break;
 		}
@@ -504,15 +508,16 @@ int pw_protocol_native_connection_flush(struct pw_protocol_native_connection *co
 		n_fds -= outfds;
 		fds += outfds;
 	}
-	buf->buffer_size = size;
-	buf->n_fds = n_fds;
 
-	return 0;
+	res = 0;
 
-	/* ERRORS */
-      send_error:
-	res = -errno;
-	pw_log_error("could not sendmsg: %s", strerror(errno));
+exit:
+	if (size > 0)
+		memmove(buf->buffer_data, data, size);
+	buf->buffer_size = size;
+	if (n_fds > 0)
+		memmove(buf->fds, fds, n_fds * sizeof(int));
+	buf->n_fds = n_fds;
 	return res;
 }
 
-- 
2.23.0