diff --git a/src/proto_uxdg.c b/src/proto_uxdg.c index 68fe207de..0e3e1d0f3 100644 --- a/src/proto_uxdg.c +++ b/src/proto_uxdg.c @@ -126,17 +126,20 @@ static void uxdg_disable_listener(struct listener *l) } /* Suspend a receiver. Returns < 0 in case of failure, 0 if the receiver - * was totally stopped, or > 0 if correctly suspended. Nothing is done for - * plain unix sockets since currently it's the new process which handles - * the renaming. Abstract sockets are completely unbound and closed so - * there's no need to stop the poller. + * was totally stopped, or > 0 if correctly suspended. For plain unix sockets + * we only disable the listener to prevent data from being handled but nothing + * more is done since currently it's the new process which handles the renaming. + * Abstract sockets are completely unbound and closed so there's no need to stop + * the poller. */ static int uxdg_suspend_receiver(struct receiver *rx) { struct listener *l = LIST_ELEM(rx, struct listener *, rx); - if (((struct sockaddr_un *)&rx->addr)->sun_path[0]) + if (((struct sockaddr_un *)&rx->addr)->sun_path[0]) { + uxdg_disable_listener(l); return 1; + } /* Listener's lock already held. Call lockless version of * unbind_listener. */ diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 08b8d2747..9678a49a8 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -165,17 +165,20 @@ static void uxst_disable_listener(struct listener *l) } /* Suspend a receiver. Returns < 0 in case of failure, 0 if the receiver - * was totally stopped, or > 0 if correctly suspended. Nothing is done for - * plain unix sockets since currently it's the new process which handles - * the renaming. Abstract sockets are completely unbound and closed so - * there's no need to stop the poller. + * was totally stopped, or > 0 if correctly suspended. For plain unix sockets + * we only disable the listener to prevent data from being handled but nothing + * more is done since currently it's the new process which handles the renaming. + * Abstract sockets are completely unbound and closed so there's no need to stop + * the poller. */ static int uxst_suspend_receiver(struct receiver *rx) { struct listener *l = LIST_ELEM(rx, struct listener *, rx); - if (((struct sockaddr_un *)&rx->addr)->sun_path[0]) + if (((struct sockaddr_un *)&rx->addr)->sun_path[0]) { + uxst_disable_listener(l); return 1; + } /* Listener's lock already held. Call lockless version of * unbind_listener. */