summaryrefslogtreecommitdiff
path: root/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h')
-rw-r--r--trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h b/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h
new file mode 100644
index 00000000000..c661be47eef
--- /dev/null
+++ b/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/crit.h
@@ -0,0 +1,127 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 1994, 1995. Netscape Communications Corporation. All
+ * rights reserved.
+ *
+ * Use of this software is governed by the terms of the license agreement for
+ * the Netscape Communications or Netscape Comemrce Server between the
+ * parties.
+ */
+
+
+/* ------------------------------------------------------------------------ */
+
+
+/*
+ * crit.h: Critical section abstraction. Used in threaded servers to protect
+ * areas where two threads can interfere with each other.
+ *
+ * Condvars are condition variables that are used for thread-thread
+ * synchronization.
+ *
+ * Rob McCool
+ */
+
+#ifndef CRIT_H
+#define CRIT_H
+
+
+#ifdef USE_NSPR
+#include <nspr/prmon.h>
+typedef PRMonitor* CRITICAL;
+#else
+typedef void *CRITICAL;
+#endif
+
+/*
+ * crit_init creates and returns a new critical section variable. At the
+ * time of creation no one has entered it.
+ */
+#ifdef USE_NSPR
+#define crit_init() PR_NewMonitor(0)
+#else
+#define crit_init() (NULL)
+#endif
+
+/*
+ * crit_enter enters a critical section. If someone is already in the
+ * section, the calling thread is blocked until that thread exits.
+ */
+#ifdef USE_NSPR
+#define crit_enter(id) PR_EnterMonitor(id)
+#else
+#define crit_enter(id) (0)
+#endif
+
+/*
+ * crit_exit exits a critical section. If another thread is blocked waiting
+ * to enter, it will be unblocked and given ownership of the section.
+ */
+#ifdef USE_NSPR
+#define crit_exit(id) PR_ExitMonitor(id)
+#else
+#define crit_exit(id) (0)
+#endif
+
+/*
+ * crit_terminate removes a previously allocated critical section variable.
+ */
+#ifdef USE_NSPR
+#define crit_terminate(id) PR_DestroyMonitor(id)
+#else
+#define crit_terminate(id) (0)
+#endif
+
+
+#ifdef USE_NSPR
+typedef PRMonitor* CONDVAR;
+#else
+typedef void* CONDVAR;
+#endif
+
+/*
+ * condvar_init initializes and returns a new condition variable. You
+ * must provide a critical section to be associated with this condition
+ * variable.
+ */
+#ifdef USE_NSPR
+#define condvar_init(crit) (crit)
+#else
+#define condvar_init(crit) (crit)
+#endif
+
+/*
+ * condvar_wait blocks on the given condition variable. The calling thread
+ * will be blocked until another thread calls condvar_notify on this variable.
+ * The caller must have entered the critical section associated with this
+ * condition variable prior to waiting for it.
+ */
+#ifdef USE_NSPR
+#define condvar_wait(cv) (PR_Wait(cv, LL_MAXINT))
+#else
+#define condvar_wait(cv) (0)
+#endif
+
+/*
+ * condvar_notify awakens any threads blocked on the given condition
+ * variable. The caller must have entered the critical section associated
+ * with this variable first.
+ */
+#ifdef USE_NSPR
+#define condvar_notify(cv) (PR_Notify(cv))
+#else
+#define condvar_notify(cv) (0)
+#endif
+
+/*
+ * condvar_terminate frees the given previously allocated condition variable
+ */
+#ifdef USE_NSPR
+#define condvar_terminate(cv) (0)
+#else
+#define condvar_terminate(cv) (0)
+#endif
+
+
+#endif