]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
control: GC control deletion
authorRoy Marples <roy@marples.name>
Mon, 8 Feb 2021 19:25:08 +0000 (19:25 +0000)
committerRoy Marples <roy@marples.name>
Mon, 8 Feb 2021 19:25:08 +0000 (19:25 +0000)
Just free it entirely.

src/control.c

index ff8957a1aa1eb872f08cbf16c1335b33323ca8b2..270a5a041ebaabfdd28961173c2faa68e3c84c42 100644 (file)
@@ -86,29 +86,14 @@ control_free(struct fd_list *fd)
                fd->ctx->ps_control_client = NULL;
 #endif
 
-       /* Remove ELE_WRITE */
-       if (eloop_event_add(fd->ctx->eloop, fd->fd, ELE_READ,
-           control_handle_data, fd) == -1)
-               logerr("%s: eloop_event_add", __func__);
+       if (eloop_event_delete(fd->ctx->eloop, fd->fd) == -1)
+               logerr("%s: eloop_event_delete", __func__);
+       close(fd->fd);
        TAILQ_REMOVE(&fd->ctx->control_fds, fd, next);
        control_queue_free(fd);
        free(fd);
 }
 
-void
-control_delete(struct fd_list *fd)
-{
-
-#ifdef PRIVSEP
-       if (IN_PRIVSEP_SE(fd->ctx))
-               return;
-#endif
-
-       eloop_event_delete(fd->ctx->eloop, fd->fd);
-       close(fd->fd);
-       control_free(fd);
-}
-
 static void
 control_handle_read(struct fd_list *fd)
 {
@@ -120,7 +105,7 @@ control_handle_read(struct fd_list *fd)
        if (bytes == -1 || bytes == 0) {
                /* Control was closed or there was an error.
                 * Remove it from our list. */
-               control_delete(fd);
+               control_free(fd);
                return;
        }
 
@@ -138,7 +123,7 @@ control_handle_read(struct fd_list *fd)
                if (err == 1 &&
                    ps_ctl_sendargs(fd, buffer, (size_t)bytes) == -1) {
                        logerr(__func__);
-                       control_delete(fd);
+                       control_free(fd);
                }
                return;
        }
@@ -170,7 +155,7 @@ control_handle_write(struct fd_list *fd)
 
        if (writev(fd->fd, iov, iov_len) == -1) {
                logerr("%s: write", __func__);
-               control_delete(fd);
+               control_free(fd);
                return;
        }
 
@@ -193,7 +178,7 @@ control_handle_write(struct fd_list *fd)
                        logerr("%s: eloop_event_add", __func__);
        } else {
                if (eloop_event_delete(fd->ctx->eloop, fd->fd) == -1)
-                       logerr("%s: eloop_event_add", __func__);
+                       logerr("%s: eloop_event_delete", __func__);
        }
 #ifdef PRIVSEP
        if (IN_PRIVSEP_SE(fd->ctx) && !(fd->flags & FD_LISTEN)) {
@@ -268,7 +253,7 @@ control_recvdata(struct fd_list *fd, char *data, size_t len)
                if (dhcpcd_handleargs(fd->ctx, fd, argc, argvp) == -1) {
                        logerr(__func__);
                        if (errno != EINTR && errno != EAGAIN) {
-                               control_delete(fd);
+                               control_free(fd);
                                return;
                        }
                }