summaryrefslogtreecommitdiff
path: root/src/libsystemd-rtnl
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsystemd-rtnl')
-rw-r--r--src/libsystemd-rtnl/rtnl-internal.h3
-rw-r--r--src/libsystemd-rtnl/sd-rtnl.c15
2 files changed, 13 insertions, 5 deletions
diff --git a/src/libsystemd-rtnl/rtnl-internal.h b/src/libsystemd-rtnl/rtnl-internal.h
index 37b1d3d021..f9c08e1a9a 100644
--- a/src/libsystemd-rtnl/rtnl-internal.h
+++ b/src/libsystemd-rtnl/rtnl-internal.h
@@ -33,6 +33,9 @@ struct sd_rtnl {
unsigned serial;
};
+
+#define RTNL_DEFAULT_TIMEOUT ((usec_t) (10 * USEC_PER_SEC))
+
int message_get_errno(sd_rtnl_message *m);
int message_get_serial(sd_rtnl_message *m);
int message_seal(sd_rtnl *nl, sd_rtnl_message *m);
diff --git a/src/libsystemd-rtnl/sd-rtnl.c b/src/libsystemd-rtnl/sd-rtnl.c
index 9938d463b0..b11a813dfe 100644
--- a/src/libsystemd-rtnl/sd-rtnl.c
+++ b/src/libsystemd-rtnl/sd-rtnl.c
@@ -109,10 +109,15 @@ int sd_rtnl_send_with_reply_and_block(sd_rtnl *nl,
p[0].fd = nl->fd;
p[0].events = POLLOUT;
- timeout = now(CLOCK_MONOTONIC) + usec;
+ if (usec == (uint64_t) -1)
+ timeout = 0;
+ else if (usec == 0)
+ timeout = now(CLOCK_MONOTONIC) + RTNL_DEFAULT_TIMEOUT;
+ else
+ timeout = now(CLOCK_MONOTONIC) + usec;
for (;;) {
- if (usec != (uint64_t) -1) {
+ if (timeout) {
usec_t n;
n = now(CLOCK_MONOTONIC);
@@ -122,7 +127,7 @@ int sd_rtnl_send_with_reply_and_block(sd_rtnl *nl,
timespec_store(&left, timeout - n);
}
- r = ppoll(p, 1, usec == (uint64_t) -1 ? NULL : &left, NULL);
+ r = ppoll(p, 1, timeout ? &left : NULL, NULL);
if (r < 0)
return 0;
@@ -140,7 +145,7 @@ int sd_rtnl_send_with_reply_and_block(sd_rtnl *nl,
for (;;) {
_cleanup_sd_rtnl_message_unref_ sd_rtnl_message *reply = NULL;
- if (usec != (uint64_t) -1) {
+ if (timeout) {
usec_t n;
n = now(CLOCK_MONOTONIC);
@@ -150,7 +155,7 @@ int sd_rtnl_send_with_reply_and_block(sd_rtnl *nl,
timespec_store(&left, timeout - n);
}
- r = ppoll(p, 1, usec == (uint64_t) -1 ? NULL : &left, NULL);
+ r = ppoll(p, 1, timeout ? &left : NULL, NULL);
if (r < 0)
return r;