svn commit: r242702 - head/sys/dev/usb/serial
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Nov 7 18:44:06 UTC 2012
Author: hselasky
Date: Wed Nov 7 18:44:05 2012
New Revision: 242702
URL: http://svnweb.freebsd.org/changeset/base/242702
Log:
The tty_inwakeup callback appears to be called both locked and unlocked.
Handle the required locking automatically for now.
MFC after: 1 weeks
Modified:
head/sys/dev/usb/serial/usb_serial.c
Modified: head/sys/dev/usb/serial/usb_serial.c
==============================================================================
--- head/sys/dev/usb/serial/usb_serial.c Wed Nov 7 17:41:17 2012 (r242701)
+++ head/sys/dev/usb/serial/usb_serial.c Wed Nov 7 18:44:05 2012 (r242702)
@@ -788,15 +788,20 @@ ucom_inwakeup(struct tty *tp)
{
struct ucom_softc *sc = tty_softc(tp);
uint16_t pos;
+ int locked;
if (sc == NULL)
return;
- tty_lock(tp);
+ locked = mtx_owned(sc->sc_mtx);
+
+ if (locked == 0)
+ tty_lock(tp);
if (ttydisc_can_bypass(tp) != 0 ||
(sc->sc_flag & UCOM_FLAG_HL_READY) == 0) {
- tty_unlock(tp);
+ if (locked == 0)
+ tty_unlock(tp);
return;
}
@@ -821,7 +826,8 @@ ucom_inwakeup(struct tty *tp)
(sc->sc_flag & UCOM_FLAG_RTS_IFLOW))
ucom_rts(sc, 0);
- tty_unlock(tp);
+ if (locked == 0)
+ tty_unlock(tp);
}
static int
More information about the svn-src-all
mailing list