From d6a911e906e3fe0fdd357f2120209372574a8406 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 23 Mar 2024 19:55:27 +0800 Subject: [PATCH] core/socket: clean up socket peer handling a bit Currently, SocketPeer object acquired through socket_acquire_peer() are referenced twice in socket_enter_running and service_set_socket_fd, and the reference taken by former gets dropped through _cleanup_. This is a bit confusing. Let's just pass ownership instead. --- src/core/service.c | 2 +- src/core/socket.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/service.c b/src/core/service.c index cc6b6e6961..953cb2934a 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -4760,7 +4760,7 @@ int service_set_socket_fd( "Failed to add After=/TriggeredBy= dependencies on socket unit: %m"); s->socket_fd = fd; - s->socket_peer = socket_peer_ref(peer); + s->socket_peer = peer; s->socket_fd_selinux_context_net = selinux_context_net; unit_ref_set(&s->accept_socket, UNIT(s), UNIT(sock)); diff --git a/src/core/socket.c b/src/core/socket.c index 8b3aa88715..2ce197e328 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -2364,7 +2364,10 @@ static void socket_enter_running(Socket *s, int cfd_in) { goto fail; } - TAKE_FD(cfd); /* We passed ownership of the fd to the service now. Forget it here. */ + /* We passed ownership of the fd and socket peer to the service now. */ + TAKE_FD(cfd); + TAKE_PTR(p); + s->n_connections++; r = manager_add_job(UNIT(s)->manager, JOB_START, service, JOB_REPLACE, NULL, &error, NULL); -- 2.25.1