]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: do not remove control socket on exit
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 31 Aug 2021 13:32:41 +0000 (22:32 +0900)
committerLennart Poettering <lennart@poettering.net>
Wed, 1 Sep 2021 12:44:00 +0000 (14:44 +0200)
As we usually do, remove old unix socket before bind.

Note that systemd-udevd-control.socket has `RemoveOnStop=yes`.
So, it is not necessary to be removed when the service exits.

Replaces #20584 and #20588.

src/udev/udev-ctrl.c
src/udev/udev-ctrl.h
src/udev/udevd.c

index 00279ba3d87dd30715d049024fbde829f0be173b..179a1fdec3f5a016815a0fef5937a7ad177e98e2 100644 (file)
@@ -37,7 +37,6 @@ struct UdevCtrl {
         union sockaddr_union saddr;
         socklen_t addrlen;
         bool bound;
-        bool cleanup_socket;
         bool connected;
         bool maybe_disconnected;
         sd_event *event;
@@ -82,28 +81,19 @@ int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) {
 }
 
 int udev_ctrl_enable_receiving(UdevCtrl *uctrl) {
-        int r;
-
         assert(uctrl);
 
         if (uctrl->bound)
                 return 0;
 
-        r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
-        if (r < 0 && errno == EADDRINUSE) {
-                (void) sockaddr_un_unlink(&uctrl->saddr.un);
-                r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
-        }
-
-        if (r < 0)
+        (void) sockaddr_un_unlink(&uctrl->saddr.un);
+        if (bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen) < 0)
                 return log_error_errno(errno, "Failed to bind udev control socket: %m");
 
         if (listen(uctrl->sock, 0) < 0)
                 return log_error_errno(errno, "Failed to listen udev control socket: %m");
 
         uctrl->bound = true;
-        uctrl->cleanup_socket = true;
-
         return 0;
 }
 
@@ -129,14 +119,6 @@ static UdevCtrl *udev_ctrl_free(UdevCtrl *uctrl) {
 
 DEFINE_TRIVIAL_REF_UNREF_FUNC(UdevCtrl, udev_ctrl, udev_ctrl_free);
 
-int udev_ctrl_cleanup(UdevCtrl *uctrl) {
-        if (!uctrl)
-                return 0;
-        if (uctrl->cleanup_socket)
-                sockaddr_un_unlink(&uctrl->saddr.un);
-        return 0;
-}
-
 int udev_ctrl_attach_event(UdevCtrl *uctrl, sd_event *event) {
         int r;
 
index ca80c2aa4e0d96b327288c79070a2e6f0b3e95f3..d4bc068127120099d1a74596111a03ad7690a1ab 100644 (file)
@@ -36,7 +36,6 @@ static inline int udev_ctrl_new(UdevCtrl **ret) {
 int udev_ctrl_enable_receiving(UdevCtrl *uctrl);
 UdevCtrl *udev_ctrl_ref(UdevCtrl *uctrl);
 UdevCtrl *udev_ctrl_unref(UdevCtrl *uctrl);
-int udev_ctrl_cleanup(UdevCtrl *uctrl);
 int udev_ctrl_attach_event(UdevCtrl *uctrl, sd_event *event);
 int udev_ctrl_start(UdevCtrl *uctrl, udev_ctrl_handler_t callback, void *userdata);
 sd_event_source *udev_ctrl_get_event_source(UdevCtrl *uctrl);
index 4df08f21c5c66bbc4142b01ec6ba52cd3de2486c..df720898ea1044f4c8d368c1846df4c944b80044 100644 (file)
@@ -227,9 +227,6 @@ static Manager* manager_free(Manager *manager) {
 
         udev_builtin_exit();
 
-        if (manager->pid == getpid_cached())
-                udev_ctrl_cleanup(manager->ctrl);
-
         manager_clear_for_worker(manager);
 
         sd_netlink_unref(manager->rtnl);