Module Name:    src
Committed By:   haad
Date:           Tue May 11 22:18:10 UTC 2010

Modified Files:
        src/external/cddl/osnet/lib/libzpool: kernel2.c

Log Message:
Fix userspace cv_timedwait implementation to work on NetBSD.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/lib/libzpool/kernel2.c

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

Modified files:

Index: src/external/cddl/osnet/lib/libzpool/kernel2.c
diff -u src/external/cddl/osnet/lib/libzpool/kernel2.c:1.1 src/external/cddl/osnet/lib/libzpool/kernel2.c:1.2
--- src/external/cddl/osnet/lib/libzpool/kernel2.c:1.1	Fri Aug  7 20:57:56 2009
+++ src/external/cddl/osnet/lib/libzpool/kernel2.c	Tue May 11 22:18:10 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernel2.c,v 1.1 2009/08/07 20:57:56 haad Exp $	*/
+/*	$NetBSD: kernel2.c,v 1.2 2010/05/11 22:18:10 haad Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: kernel2.c,v 1.1 2009/08/07 20:57:56 haad Exp $");
+__RCSID("$NetBSD: kernel2.c,v 1.2 2010/05/11 22:18:10 haad Exp $");
 
 #include <sys/zfs_context.h>
 
@@ -239,6 +239,7 @@
 clock_t
 cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime)
 {
+	struct timespec nowts;
 	struct timespec ts;
 	uint64_t when;
 	int error;
@@ -247,10 +248,14 @@
 		cv_init(cv, NULL, 0, NULL);
 	}
 
+	clock_gettime(CLOCK_REALTIME, &nowts);
+	
 	/* convert back from 119hz to nanoseconds. */
-	when = abstime << 23;
+	when = (uint64_t)abstime << 23;
 	ts.tv_sec = (long)(abstime / 1000000000);
 	ts.tv_nsec = (long)(abstime % 1000000000);
+
+	timespecadd(&ts, &nowts, &ts);
 	
 	do {
 		error = pthread_cond_timedwait(GET(cv), GET(mp), &ts);

Reply via email to