Module Name:    src
Committed By:   riastradh
Date:           Thu Dec 19 23:41:46 UTC 2024

Modified Files:
        src/sys/kern: kern_time.c
        src/tests/lib/libc/sys: t_timer_create.c

Log Message:
timer_settime(2): Return relative duration remaining.

Not absolute time of next event.

PR kern/58917: timer_settime and timerfd_settime return absolute time
of next event


To generate a diff of this commit:
cvs rdiff -u -r1.222 -r1.223 src/sys/kern/kern_time.c
cvs rdiff -u -r1.8 -r1.9 src/tests/lib/libc/sys/t_timer_create.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/kern_time.c
diff -u src/sys/kern/kern_time.c:1.222 src/sys/kern/kern_time.c:1.223
--- src/sys/kern/kern_time.c:1.222	Thu Dec 19 23:36:49 2024
+++ src/sys/kern/kern_time.c	Thu Dec 19 23:41:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_time.c,v 1.222 2024/12/19 23:36:49 riastradh Exp $	*/
+/*	$NetBSD: kern_time.c,v 1.223 2024/12/19 23:41:45 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2000, 2004, 2005, 2007, 2008, 2009, 2020
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.222 2024/12/19 23:36:49 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.223 2024/12/19 23:41:45 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/resourcevar.h>
@@ -1386,7 +1386,7 @@ dotimer_settime(int timerid, struct itim
     struct itimerspec *ovalue, int flags, struct proc *p)
 {
 	struct timespec now;
-	struct itimerspec val, oval;
+	struct itimerspec val;
 	struct ptimers *pts;
 	struct itimer *it;
 	int error;
@@ -1407,7 +1407,8 @@ dotimer_settime(int timerid, struct itim
 		return EINVAL;
 	}
 
-	oval = it->it_time;
+	if (ovalue)
+		itimer_gettime(it, ovalue);
 	it->it_time = val;
 
 	/*
@@ -1450,9 +1451,6 @@ dotimer_settime(int timerid, struct itim
 	KASSERT(error == 0);
 	itimer_unlock();
 
-	if (ovalue)
-		*ovalue = oval;
-
 	return 0;
 }
 

Index: src/tests/lib/libc/sys/t_timer_create.c
diff -u src/tests/lib/libc/sys/t_timer_create.c:1.8 src/tests/lib/libc/sys/t_timer_create.c:1.9
--- src/tests/lib/libc/sys/t_timer_create.c:1.8	Thu Dec 19 23:36:49 2024
+++ src/tests/lib/libc/sys/t_timer_create.c	Thu Dec 19 23:41:46 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_timer_create.c,v 1.8 2024/12/19 23:36:49 riastradh Exp $ */
+/*	$NetBSD: t_timer_create.c,v 1.9 2024/12/19 23:41:46 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -168,23 +168,11 @@ timer_signal_create(clockid_t cid, enum 
 		timespecadd(&rtim.it_value, (&(const struct timespec){2, 0}),
 		    &rtim.it_value);
 	}
-	atf_tc_expect_fail("PR kern/58917:"
-	    " timer_settime and timerfd_settime return"
-	    " absolute time of next event");
 	ATF_CHECK_MSG(timespeccmp(&otim.it_value, &rtim.it_value, <=),
 	    "time remaining %lld sec %d nsec,"
 	    " expected at most %lld sec %d nsec",
 	    (long long)otim.it_value.tv_sec, (int)otim.it_value.tv_nsec,
 	    (long long)rtim.it_value.tv_sec, (int)rtim.it_value.tv_nsec);
-	atf_tc_expect_pass();
-
-	/*
-	 * Until we fix PR kern/58917, adjust it to be relative to the
-	 * start time.
-	 */
-	timespecsub(&otim.it_value, &t0, &otim.it_value);
-	fprintf(stderr, "adjust otim to %lld sec %d nsec\n",
-	    (long long)otim.it_value.tv_sec, (int)otim.it_value.tv_nsec);
 
 #if 0
 	/*

Reply via email to