X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/1f2f436a38f7ae2d39a943ad2898d8fed4ed2e58..refs/heads/master:/stdio/FreeBSD/_flock_stub.c diff --git a/stdio/FreeBSD/_flock_stub.c b/stdio/FreeBSD/_flock_stub.c index 07e02fd..330830f 100644 --- a/stdio/FreeBSD/_flock_stub.c +++ b/stdio/FreeBSD/_flock_stub.c @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD: src/lib/libc/stdio/_flock_stub.c,v 1.16 2008/04/17 22:17:53 jhb Exp $"); #include "namespace.h" +#include #include #include #include @@ -46,7 +47,6 @@ __FBSDID("$FreeBSD: src/lib/libc/stdio/_flock_stub.c,v 1.16 2008/04/17 22:17:53 #include "local.h" - /* * Weak symbols for externally visible functions in this file: */ @@ -58,19 +58,10 @@ __weak_reference(_funlockfile, funlockfile); void _flockfile(FILE *fp) { - pthread_t curthread = _pthread_self(); - - if (fp->_fl_owner == curthread) - fp->_fl_count++; - else { - /* - * Make sure this mutex is treated as a private - * internal mutex: - */ - _pthread_mutex_lock(&fp->_fl_mutex); - fp->_fl_owner = curthread; - fp->_fl_count = 1; - } + // - preserve errno. + int save_errno = errno; + _pthread_mutex_lock(&fp->_fl_mutex); + errno = save_errno; } /* @@ -85,52 +76,22 @@ _flockfile_debug_stub(FILE *fp, char *fname, int lineno) int _ftrylockfile(FILE *fp) { - pthread_t curthread = _pthread_self(); int ret = 0; - if (fp->_fl_owner == curthread) - fp->_fl_count++; - /* - * Make sure this mutex is treated as a private - * internal mutex: - */ - else if (_pthread_mutex_trylock(&fp->_fl_mutex) == 0) { - fp->_fl_owner = curthread; - fp->_fl_count = 1; - } - else + // - preserve errno. + int save_errno = errno; + if (_pthread_mutex_trylock(&fp->_fl_mutex) != 0) ret = -1; + errno = save_errno; + return (ret); } void _funlockfile(FILE *fp) { - pthread_t curthread = _pthread_self(); - - /* - * Check if this file is owned by the current thread: - */ - if (fp->_fl_owner == curthread) { - /* - * Check if this thread has locked the FILE - * more than once: - */ - if (fp->_fl_count > 1) - /* - * Decrement the count of the number of - * times the running thread has locked this - * file: - */ - fp->_fl_count--; - else { - /* - * The running thread will release the - * lock now: - */ - fp->_fl_count = 0; - fp->_fl_owner = NULL; - _pthread_mutex_unlock(&fp->_fl_mutex); - } - } + // - preserve errno. + int save_errno = errno; + _pthread_mutex_unlock(&fp->_fl_mutex); + errno = save_errno; }