summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2014-05-06 22:59:22 +0200
committerTom Gundersen <teg@jklm.no>2014-05-06 22:59:22 +0200
commit22fc2420b2a7220addcee33c2fa17ada44d87f9c (patch)
treebb3b86525fa5507667af55a6a035be0fbf2a32bf
parentc3d2994b595542caa971a06ea894019d16b95896 (diff)
sd-dhcp-client: use asynchronous_close()
close() is a blocking call, which may slow things down measurably when running many dhcp clients in the same single-threaded main loop. Let's just use the asynchronous version instead to avoid the problem.
-rw-r--r--src/libsystemd-network/sd-dhcp-client.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index ab9f68d52..b69927d81 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -30,6 +30,7 @@
#include "util.h"
#include "list.h"
#include "refcnt.h"
+#include "async.h"
#include "dhcp-protocol.h"
#include "dhcp-internal.h"
@@ -209,7 +210,7 @@ static int client_initialize(sd_dhcp_client *client) {
client->receive_message =
sd_event_source_unref(client->receive_message);
- client->fd = safe_close(client->fd);
+ client->fd = asynchronous_close(client->fd);
client->timeout_resend = sd_event_source_unref(client->timeout_resend);
@@ -747,7 +748,7 @@ static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata)
int r;
client->receive_message = sd_event_source_unref(client->receive_message);
- client->fd = safe_close(client->fd);
+ client->fd = asynchronous_close(client->fd);
client->state = DHCP_STATE_REBINDING;
client->attempt = 1;
@@ -1153,7 +1154,7 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message,
client->receive_message =
sd_event_source_unref(client->receive_message);
- client->fd = safe_close(client->fd);
+ client->fd = asynchronous_close(client->fd);
} else if (r == -ENOMSG)
/* invalid message, let's ignore it */
return 0;