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