Index | Thread | Search

From:
Alexander Bluhm <bluhm@openbsd.org>
Subject:
unlock socket splice idle timeout
To:
tech@openbsd.org
Date:
Thu, 1 Aug 2024 14:26:02 +0200

Download raw body.

Thread
Hi,

The socket splice idle timeout does not need kernel lock.

ok?

bluhm

Index: kern/uipc_socket.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_socket.c,v
diff -u -p -r1.340 uipc_socket.c
--- kern/uipc_socket.c	29 Jul 2024 10:35:22 -0000	1.340
+++ kern/uipc_socket.c	31 Jul 2024 17:36:32 -0000
@@ -361,7 +361,8 @@ sofree(struct socket *so, int keep_lock)
 #ifdef SOCKET_SPLICE
 	if (so->so_sp) {
 		/* Reuse splice idle, sounsplice() has been called before. */
-		timeout_set_proc(&so->so_sp->ssp_idleto, soreaper, so);
+		timeout_set_flags(&so->so_sp->ssp_idleto, soreaper, so,
+		    KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
 		timeout_add(&so->so_sp->ssp_idleto, 0);
 	} else
 #endif /* SOCKET_SPLICE */
@@ -1487,7 +1488,8 @@ sosplice(struct socket *so, int fd, off_
 		so->so_idletv = *tv;
 	else
 		timerclear(&so->so_idletv);
-	timeout_set_proc(&so->so_idleto, soidle, so);
+	timeout_set_flags(&so->so_idleto, soidle, so,
+	    KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
 	task_set(&so->so_splicetask, sotask, so);
 
 	/*