Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2004-09-17 01:16:59 +0400
committerJeff Johnston <jjohnstn@redhat.com>2004-09-17 01:16:59 +0400
commit5c44c2e54639389e7b72d6307ca0a5863bfe142b (patch)
tree0af88c2a3ab8fb566870e100f22f6795cd8cfc01 /newlib/libc/time/tzlock.c
parent14613e5e74b633aeaa4f69e7ea096074ba94cb1f (diff)
2004-09-16 Antony King <antony.king@st.com>
* libc/time/tzlock.c: Add default stubs that use generic locking code.
Diffstat (limited to 'newlib/libc/time/tzlock.c')
-rw-r--r--newlib/libc/time/tzlock.c26
1 files changed, 19 insertions, 7 deletions
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 <<tzset>> 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 <<localtime>>, <<mktime>>, <<ctime>>, and <<strftime>> are undefined.
+The <<tzset>> 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 <<localtime>>, <<mktime>>, <<ctime>>, and <<strftime>>
+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 <sys/lock.h>
+
+#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
}