about summary refs log tree commit diff
path: root/src/stdio/funlockfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdio/funlockfile.c')
-rw-r--r--src/stdio/funlockfile.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/stdio/funlockfile.c b/src/stdio/funlockfile.c
index f8a2a071..30a07ef4 100644
--- a/src/stdio/funlockfile.c
+++ b/src/stdio/funlockfile.c
@@ -1,7 +1,15 @@
 #include "stdio_impl.h"
 #include "pthread_impl.h"
 
+void __unlist_locked_file(FILE *);
+
 void funlockfile(FILE *f)
 {
-	if (!--f->lockcount) __unlockfile(f);
+	if (f->lockcount == 1) {
+		__unlist_locked_file(f);
+		f->lockcount = 0;
+		__unlockfile(f);
+	} else {
+		f->lockcount--;
+	}
 }