From: Mike Yuan Date: Sat, 23 Mar 2024 11:55:27 +0000 (+0800) Subject: core/socket: clean up socket peer handling a bit X-Git-Tag: v256-rc1~428^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6a911e906e3fe0fdd357f2120209372574a8406;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/core/service.c b/src/core/service.c index cc6b6e6961c..953cb2934aa 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 8b3aa887151..2ce197e3287 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);