diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c index 6173d3ff7eaaf..536483fc7ce6a 100644 --- a/src/core/dbus-socket.c +++ b/src/core/dbus-socket.c @@ -364,7 +364,7 @@ static int bus_socket_set_transient_property( return r; while ((r = sd_bus_message_read(message, "(ss)", &t, &a)) > 0) { - _cleanup_free_ SocketPort *p = NULL; + _cleanup_(socket_port_freep) SocketPort *p = NULL; p = new(SocketPort, 1); if (!p) diff --git a/src/core/socket.c b/src/core/socket.c index 0d96f1a933542..73dfdf2c23082 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -120,6 +120,19 @@ static void socket_cleanup_fd_list(SocketPort *p) { p->n_auxiliary_fds = 0; } +SocketPort *socket_port_free(SocketPort *p) { + if (!p) + return NULL; + + sd_event_source_unref(p->event_source); + + socket_cleanup_fd_list(p); + safe_close(p->fd); + free(p->path); + + return mfree(p); +} + void socket_free_ports(Socket *s) { SocketPort *p; @@ -127,13 +140,7 @@ void socket_free_ports(Socket *s) { while ((p = s->ports)) { LIST_REMOVE(port, s->ports, p); - - sd_event_source_unref(p->event_source); - - socket_cleanup_fd_list(p); - safe_close(p->fd); - free(p->path); - free(p); + socket_port_free(p); } } diff --git a/src/core/socket.h b/src/core/socket.h index 6813bdcf8c8e1..17e912af31585 100644 --- a/src/core/socket.h +++ b/src/core/socket.h @@ -173,6 +173,9 @@ int socket_collect_fds(Socket *s, int **fds); /* Called from the service code when a per-connection service ended */ void socket_connection_unref(Socket *s); +SocketPort *socket_port_free(SocketPort *p); +DEFINE_TRIVIAL_CLEANUP_FUNC(SocketPort*, socket_port_free); + void socket_free_ports(Socket *s); int socket_load_service_unit(Socket *s, int cfd, Unit **ret);