79350f79d8
Resolves: #2137584,#2138081,#2141979
37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
From cd822ff6ef904e3e25060e77556670784b0b1aea Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Tue, 22 Nov 2022 13:00:48 +0100
|
|
Subject: [PATCH] sd-netlink: handle EINTR from poll() gracefully, as success
|
|
|
|
(cherry picked from commit 69858785335afffc51bc03127beb53332c0fb983)
|
|
|
|
Related: #2137584
|
|
---
|
|
src/libsystemd/sd-netlink/sd-netlink.c | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c
|
|
index feb751a848..b99abae640 100644
|
|
--- a/src/libsystemd/sd-netlink/sd-netlink.c
|
|
+++ b/src/libsystemd/sd-netlink/sd-netlink.c
|
|
@@ -464,13 +464,18 @@ static int netlink_poll(sd_netlink *nl, bool need_more, usec_t timeout_usec) {
|
|
}
|
|
|
|
int sd_netlink_wait(sd_netlink *nl, uint64_t timeout_usec) {
|
|
+ int r;
|
|
+
|
|
assert_return(nl, -EINVAL);
|
|
assert_return(!netlink_pid_changed(nl), -ECHILD);
|
|
|
|
if (nl->rqueue_size > 0)
|
|
return 0;
|
|
|
|
- return netlink_poll(nl, false, timeout_usec);
|
|
+ r = netlink_poll(nl, false, timeout_usec);
|
|
+ if (r < 0 && ERRNO_IS_TRANSIENT(r)) /* Convert EINTR to "something happened" and give user a chance to run some code before calling back into us */
|
|
+ return 1;
|
|
+ return r;
|
|
}
|
|
|
|
static int timeout_compare(const void *a, const void *b) {
|