svn commit: r184520 - head/sys/dev/adb
Ed Schouten
ed at FreeBSD.org
Sat Nov 1 01:07:03 PDT 2008
Author: ed
Date: Sat Nov 1 08:07:02 2008
New Revision: 184520
URL: http://svn.freebsd.org/changeset/base/184520
Log:
Allow a read() on /dev/ams[0-9] to be interrupted.
Right now ams_read() uses cv_wait() to wait for new data to arrive on
the mouse device. This means that when you run `cat /dev/ams0', it
cannot be interrupted directly. After you press ^C, you first need to
move the mouse before cat will quit. Make this function use
cv_wait_sig(), which allows it to be interrupted directly.
Reviewed by: nwhitehorn
Modified:
head/sys/dev/adb/adb_mouse.c
Modified: head/sys/dev/adb/adb_mouse.c
==============================================================================
--- head/sys/dev/adb/adb_mouse.c Sat Nov 1 06:57:59 2008 (r184519)
+++ head/sys/dev/adb/adb_mouse.c Sat Nov 1 08:07:02 2008 (r184520)
@@ -382,6 +382,7 @@ ams_read(struct cdev *dev, struct uio *u
struct adb_mouse_softc *sc;
size_t len;
int8_t outpacket[8];
+ int error;
sc = CDEV_GET_SOFTC(dev);
if (sc == NULL)
@@ -403,7 +404,11 @@ ams_read(struct cdev *dev, struct uio *u
/* Otherwise, block on new data */
- cv_wait(&sc->sc_cv,&sc->sc_mtx);
+ error = cv_wait_sig(&sc->sc_cv, &sc->sc_mtx);
+ if (error) {
+ mtx_unlock(&sc->sc_mtx);
+ return (error);
+ }
}
sc->packet[0] = 1 << 7;
More information about the svn-src-all
mailing list