chiark / gitweb /
rtnl: introduce default timeout
authorTom Gundersen <teg@jklm.no>
Tue, 29 Oct 2013 15:35:37 +0000 (16:35 +0100)
committerTom Gundersen <teg@jklm.no>
Tue, 29 Oct 2013 15:37:30 +0000 (16:37 +0100)
We set it to 10 secs (as we are only communicating with the kernel,
it seems we should be able to bail out sooner than sd-bus, which
uses 25).

When passing timout 0, the default is used, use this in link-config.

src/libsystemd-rtnl/rtnl-internal.h
src/libsystemd-rtnl/sd-rtnl.c
src/udev/net/link-config.c

index 37b1d3d0215d69eab97abf7516d9d2bf0f8aa41d..f9c08e1a9ad68fd595df573834084bb75bffb0bb 100644 (file)
@@ -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);
index 9938d463b05675136d01014ddaebaca5af7640c1..b11a813dfe3cea502657b3b194dded9999eb563e 100644 (file)
@@ -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;
 
index a86c74d5f7ebcab88b86698b1baa1be1e8c747a5..9d6c96b5a5cf1f1ff8f8cd779215875a690f7c37 100644 (file)
@@ -293,7 +293,7 @@ static int rtnl_set_properties(sd_rtnl *rtnl, int ifindex, const char *name, con
         }
 
         if  (need_update) {
-                r = sd_rtnl_send_with_reply_and_block(rtnl, message, 5 * USEC_PER_SEC, NULL);
+                r = sd_rtnl_send_with_reply_and_block(rtnl, message, 0, NULL);
                 if (r < 0)
                         return r;
         }