summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/devpoll.c
diff options
context:
space:
mode:
authordm120769 <none@none>2007-04-27 07:12:39 -0700
committerdm120769 <none@none>2007-04-27 07:12:39 -0700
commit3348528f7ec68bf2f11d0cbd5c3b9932ea7f0d5c (patch)
tree855ea6b5ae3786966e656876cd1ac3992e072d51 /usr/src/uts/common/io/devpoll.c
parent85b65b39e9a6fea849facdcfc7d06f5ece340e36 (diff)
downloadillumos-gate-3348528f7ec68bf2f11d0cbd5c3b9932ea7f0d5c.tar.gz
backout 6265036/6531693: causes 6544953
Diffstat (limited to 'usr/src/uts/common/io/devpoll.c')
-rw-r--r--usr/src/uts/common/io/devpoll.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/usr/src/uts/common/io/devpoll.c b/usr/src/uts/common/io/devpoll.c
index 274737a147..965df2a9a1 100644
--- a/usr/src/uts/common/io/devpoll.c
+++ b/usr/src/uts/common/io/devpoll.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -688,6 +688,7 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp)
timestruc_t now;
timestruc_t rqtime;
timestruc_t *rqtp = NULL;
+ int timecheck = 0;
minor_t minor;
dp_entry_t *dpep;
pollcache_t *pcp;
@@ -696,6 +697,7 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp)
if (cmd == DP_POLL) {
/* do this now, before we sleep on DP_WRITER_PRESENT below */
+ timecheck = timechanged;
gethrestime(&now);
}
minor = getminor(dev);
@@ -758,7 +760,7 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp)
return (0);
mutex_enter(&curthread->t_delay_lock);
while ((rval = cv_waituntil_sig(&curthread->t_delay_cv,
- &curthread->t_delay_lock, rqtp)) > 0)
+ &curthread->t_delay_lock, rqtp, timecheck)) > 0)
continue;
mutex_exit(&curthread->t_delay_lock);
return ((rval == 0)? EINTR : 0);
@@ -813,7 +815,7 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp)
if (time_out == 0) /* immediate timeout */
break;
rval = cv_waituntil_sig(&pcp->pc_cv, &pcp->pc_lock,
- rqtp);
+ rqtp, timecheck);
/*
* If we were awakened by a signal or timeout
* then break the loop, else poll again.