Module Name:    src
Committed By:   nat
Date:           Tue Jun 27 09:44:13 UTC 2017

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

Log Message:
Ensure to close open file descriptors.

Patch by pgoyette@.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/dev/audiobell.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/audiobell.c
diff -u src/sys/dev/audiobell.c:1.23 src/sys/dev/audiobell.c:1.24
--- src/sys/dev/audiobell.c:1.23	Tue Jun 27 09:35:05 2017
+++ src/sys/dev/audiobell.c	Tue Jun 27 09:44:13 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: audiobell.c,v 1.23 2017/06/27 09:35:05 nat Exp $	*/
+/*	$NetBSD: audiobell.c,v 1.24 2017/06/27 09:44:13 nat Exp $	*/
 
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/types.h>
-__KERNEL_RCSID(0, "$NetBSD: audiobell.c,v 1.23 2017/06/27 09:35:05 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audiobell.c,v 1.24 2017/06/27 09:44:13 nat Exp $");
 
 #include <sys/audioio.h>
 #include <sys/conf.h>
@@ -106,10 +106,11 @@ audiobell(void *v, u_int pitch, u_int pe
 	struct uio auio;
 	struct iovec aiov;
 	struct file *fp;
-	int size, len;
+	int size, len, fd;
 
 	KASSERT(volume <= 100);
 
+	fd = -1;
 	fp = NULL;
 	buf = NULL;
 	audio = AUDIO_DEVICE | device_unit((device_t)v);
@@ -121,6 +122,7 @@ audiobell(void *v, u_int pitch, u_int pe
 	/* If not configured, we can't beep. */
 	if (audiobellopen(audio, FWRITE, 0, NULL, &fp) != EMOVEFD || fp == NULL)
 		return;
+	fd = curlwp->l_dupfd;	/* save the fd for closing when done */
 
 	if (audiobellioctl(fp, AUDIO_GETINFO, &ai) != 0)
 		goto out;
@@ -174,5 +176,9 @@ audiobell(void *v, u_int pitch, u_int pe
 out:
 	if (buf != NULL)
 		free(buf, M_TEMP);
+	if (fd >= 0) {
+		fd_getfile(fd);
+		fd_close(fd);
+	}
 	audiobellclose(fp);
 }

Reply via email to