summaryrefslogtreecommitdiff
path: root/lib/libc/stdio/fclose.c
diff options
context:
space:
mode:
authorJulian Elischer <julian@FreeBSD.org>1996-01-22 00:02:33 +0000
committerJulian Elischer <julian@FreeBSD.org>1996-01-22 00:02:33 +0000
commitf70177e76e605ec6e6cd5b938fa77ade5d380e87 (patch)
treea89c7f50ec371cef4418259b9dccdd31ebb2f61f /lib/libc/stdio/fclose.c
parent61de51cad66df0d565233915f856932159d33a4a (diff)
Notes
Diffstat (limited to 'lib/libc/stdio/fclose.c')
-rw-r--r--lib/libc/stdio/fclose.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/libc/stdio/fclose.c b/lib/libc/stdio/fclose.c
index 8315c3cf41ea..be9210801b50 100644
--- a/lib/libc/stdio/fclose.c
+++ b/lib/libc/stdio/fclose.c
@@ -42,7 +42,12 @@ static char sccsid[] = "@(#)fclose.c 8.1 (Berkeley) 6/4/93";
#include <stdio.h>
#include <stdlib.h>
#include "local.h"
+#ifdef _THREAD_SAFE
+#include <pthread.h>
+#include "pthread_private.h"
+#endif
+int
fclose(fp)
register FILE *fp;
{
@@ -52,6 +57,9 @@ fclose(fp)
errno = EBADF;
return (EOF);
}
+#ifdef _THREAD_SAFE
+ _thread_flockfile(fp,__FILE__,__LINE__);
+#endif
r = fp->_flags & __SWR ? __sflush(fp) : 0;
if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0)
r = EOF;
@@ -61,7 +69,11 @@ fclose(fp)
FREEUB(fp);
if (HASLB(fp))
FREELB(fp);
+#ifdef _THREAD_SAFE
+ _thread_funlockfile(fp);
+#endif
fp->_flags = 0; /* Release this FILE for reuse. */
+ fp->_file = -1;
fp->_r = fp->_w = 0; /* Mess up if reaccessed. */
return (r);
}