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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to