diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 09843bf33..c24d76cfe 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2004-09-16 Antony King + + * libc/time/tzlock.c: Add default stubs that use generic + locking code. + 2004-09-16 Antony King * libc/ctype/ctype.tex: Added missing documentation. diff --git a/newlib/libc/time/tzlock.c b/newlib/libc/time/tzlock.c index 66fa1c366..f3c289620 100644 --- a/newlib/libc/time/tzlock.c +++ b/newlib/libc/time/tzlock.c @@ -17,13 +17,14 @@ TRAD_SYNOPSIS void __tz_unlock(); DESCRIPTION -The <> facility functions call these functions when they need -to ensure the values of global variables. The version of these routines supplied -in the library do not do anything. If multiple threads of execution -can call the time functions and give up scheduling in the middle, then you -you need to define your own versions of these functions in order to -safely lock the time zone variables during a call. If you do not, the results -of <>, <>, <>, and <> are undefined. +The <> facility functions call these functions when they need to +ensure the values of global variables. The version of these routines +supplied in the library use the lock API defined in sys/lock.h. If multiple +threads of execution can call the time functions and give up scheduling in +the middle, then you you need to define your own versions of these functions +in order to safely lock the time zone variables during a call. If you do +not, the results of <>, <>, <>, and <> +are undefined. The lock <<__tz_lock>> may not be called recursively; that is, a call <<__tz_lock>> will always lock all subsequent <<__tz_lock>> calls @@ -32,13 +33,24 @@ until the corresponding <<__tz_unlock>> call on the same thread is made. #include <_ansi.h> #include "local.h" +#include + +#ifndef __SINGLE_THREAD__ +__LOCK_INIT(static, __tz_lock_object); +#endif _VOID _DEFUN_VOID (__tz_lock) { +#ifndef __SINGLE_THREAD__ + __lock_acquire(__tz_lock_object); +#endif } _VOID _DEFUN_VOID (__tz_unlock) { +#ifndef __SINGLE_THREAD__ + __lock_release(__tz_lock_object); +#endif }