Module Name:    src
Committed By:   nat
Date:           Sat Jul  1 23:27:17 UTC 2017

Modified Files:
        src/sys/dev: spkr.c

Log Message:
On a forcefull detach wait for spkr to close as the detach has to
succeed.

Ok christos@.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/spkr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/spkr.c
diff -u src/sys/dev/spkr.c:1.13 src/sys/dev/spkr.c:1.14
--- src/sys/dev/spkr.c:1.13	Wed Jun 14 06:55:37 2017
+++ src/sys/dev/spkr.c	Sat Jul  1 23:27:17 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: spkr.c,v 1.13 2017/06/14 06:55:37 nat Exp $	*/
+/*	$NetBSD: spkr.c,v 1.14 2017/07/01 23:27:17 nat Exp $	*/
 
 /*
  * Copyright (c) 1990 Eric S. Raymond (e...@snark.thyrsus.com)
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spkr.c,v 1.13 2017/06/14 06:55:37 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spkr.c,v 1.14 2017/07/01 23:27:17 nat Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "wsmux.h"
@@ -388,6 +388,10 @@ spkr_detach(device_t self, int flags)
 #endif /* SPKRDEBUG */
 	if (sc == NULL)
 		return ENXIO;
+
+	/* XXXNS If speaker never closes, we cannot complete the detach. */
+	while ((flags & DETACH_FORCE) != 0 && sc->sc_inbuf != NULL)
+		kpause("spkrwait", TRUE, 1, NULL);
 	if (sc->sc_inbuf != NULL)
 		return EBUSY;
 

Reply via email to