+2004-03-09 Thomas Pfaff <tpfaff@gmx.net>
+
+ * libc/stdio/findfp.c (__sfp): Rename lock to __sfp_lock.
+ Change __sfp_lock to static global.
+ (__fp_lock): New static function.
+ (__fp_unlock): Ditto.
+ (__fp_lock_all): New function.
+ (__fp_unlock_all): Ditto.
+
2004-02-10 Christopher Faylor <cgf@redhat.com>
* libm/mathfp/er_gamma.c (gamma): Add new non-reentrant function.
#include <sys/lock.h>
#include "local.h"
+#ifndef __SINGLE_THREAD__
+__LOCK_INIT(static, __sfp_lock);
+#endif
+
static void
std (ptr, flags, file, data)
FILE *ptr;
struct _glue *g;
#ifndef __SINGLE_THREAD__
- __LOCK_INIT(static, lock);
-
- __lock_acquire(lock);
+ __lock_acquire(__sfp_lock);
#endif
if (!_GLOBAL_REENT->__sdidinit)
break;
}
#ifndef __SINGLE_THREAD__
- __lock_release(lock);
+ __lock_release(__sfp_lock);
#endif
d->_errno = ENOMEM;
return NULL;
found:
fp->_flags = 1; /* reserve this slot; caller sets real flags */
#ifndef __SINGLE_THREAD__
- __lock_release(lock);
+ __lock_release(__sfp_lock);
#endif
fp->_p = NULL; /* no current pointer */
fp->_w = 0; /* nothing to read or write */
std (s->_stderr, __SWR | __SNBF, 2, s);
}
+
+#ifndef __SINGLE_THREAD__
+
+/* Walkable file locking routine. */
+static int
+__fp_lock (ptr)
+ FILE * ptr;
+{
+ _flockfile(ptr);
+
+ return 0;
+}
+
+/* Walkable file unlocking routine. */
+static int
+__fp_unlock (ptr)
+ FILE * ptr;
+{
+ _funlockfile(ptr);
+
+ return 0;
+}
+
+void
+__fp_lock_all ()
+{
+ __lock_acquire(__sfp_lock);
+
+ (void) _fwalk (_REENT, __fp_lock);
+}
+
+void
+__fp_unlock_all ()
+{
+ (void) _fwalk (_REENT, __fp_unlock);
+
+ __lock_release(__sfp_lock);
+}
+#endif