Unregister status cb when exiting so we don't post a down message.
authorRoy Marples <roy@marples.name>
Tue, 2 Sep 2014 21:40:17 +0000 (21:40 +0000)
committerRoy Marples <roy@marples.name>
Tue, 2 Sep 2014 21:40:17 +0000 (21:40 +0000)
If we lose connection to dhcpcd during the check, retry to open one.

src/dhcpcd-online/dhcpcd-online.c

index ba04ebdb26bf95c303e8647f0c0f162ca5172d66..ab3163828756bfe1536cf364b3e84f5a7712568e 100644 (file)
@@ -75,18 +75,26 @@ static void __dead
 do_exit(DHCPCD_CONNECTION *con, int code)
 {
 
 do_exit(DHCPCD_CONNECTION *con, int code)
 {
 
+       /* Unregister the status callback so that close doesn't spam. */
+       dhcpcd_set_status_callback(con, NULL, NULL);
+
        dhcpcd_close(con);
        dhcpcd_free(con);
        exit(code);
 }
 
 static void
        dhcpcd_close(con);
        dhcpcd_free(con);
        exit(code);
 }
 
 static void
-do_status_cb(DHCPCD_CONNECTION *con, const char *status, void __unused *arg)
+do_status_cb(DHCPCD_CONNECTION *con, const char *status, void *arg)
 {
 {
+       struct pollfd *pfd;
 
        syslog(LOG_INFO, "%s", status);
        if (strcmp(status, "connected") == 0)
                do_exit(con, EXIT_SUCCESS);
 
        syslog(LOG_INFO, "%s", status);
        if (strcmp(status, "connected") == 0)
                do_exit(con, EXIT_SUCCESS);
+       if (strcmp(status, "down") == 0) {
+               pfd = arg;
+               pfd->fd = -1;
+       }
 }
 
 int
 }
 
 int
@@ -140,7 +148,7 @@ main(int argc, char **argv)
                return EXIT_FAILURE;
        }
 
                return EXIT_FAILURE;
        }
 
-       dhcpcd_set_status_callback(con, do_status_cb, NULL);
+       dhcpcd_set_status_callback(con, do_status_cb, &pfd);
 
        if ((pfd.fd = dhcpcd_open(con)) == -1) {
                lerrno = errno;
 
        if ((pfd.fd = dhcpcd_open(con)) == -1) {
                lerrno = errno;