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);
}