summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/pthreadequal.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-01-25 23:20:52 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-01-25 23:20:52 +0000
commit03598b162e66b6f3df8d9ed55ac18865c5ad2a22 (patch)
tree46278571b5897f389d05c312b444c8776e18792a /cpukit/posix/src/pthreadequal.c
parentAdded enough prototypes to allow most of POSIX Threads Manager to be (diff)
downloadrtems-03598b162e66b6f3df8d9ed55ac18865c5ad2a22.tar.bz2
Split most of POSIX Threads Manager into multiple files.
Diffstat (limited to 'cpukit/posix/src/pthreadequal.c')
-rw-r--r--cpukit/posix/src/pthreadequal.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/cpukit/posix/src/pthreadequal.c b/cpukit/posix/src/pthreadequal.c
new file mode 100644
index 0000000000..083eda0c9f
--- /dev/null
+++ b/cpukit/posix/src/pthreadequal.c
@@ -0,0 +1,79 @@
+/*
+ * 16.1.7 Compare Thread IDs, p1003.1c/Draft 10, p. 153
+ *
+ * NOTE: POSIX does not define the behavior when either thread id is invalid.
+ *
+ * COPYRIGHT (c) 1989-1998.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <pthread.h>
+#include <errno.h>
+
+#include <rtems/system.h>
+#include <rtems/score/thread.h>
+
+int pthread_equal(
+ pthread_t t1,
+ pthread_t t2
+)
+{
+ /*
+ * If the system is configured for debug, then we will do everything we
+ * can to insure that both ids are valid. Otherwise, we will do the
+ * cheapest possible thing to determine if they are equal.
+ */
+
+#ifndef RTEMS_DEBUG
+ return _Objects_Are_ids_equal( t1, t2 );
+#else
+ int status;
+ Objects_Locations location;
+
+ /*
+ * By default this is not a match.
+ */
+
+ status = 0;
+
+ /*
+ * Validate the first id and return 0 if it is not valid
+ */
+
+ (void) _POSIX_Threads_Get( t1, &location );
+ switch ( location ) {
+ case OBJECTS_ERROR:
+ case OBJECTS_REMOTE:
+ break;
+
+ case OBJECTS_LOCAL:
+
+ /*
+ * Validate the second id and return 0 if it is not valid
+ */
+
+ (void) _POSIX_Threads_Get( t2, &location );
+ switch ( location ) {
+ case OBJECTS_ERROR:
+ case OBJECTS_REMOTE:
+ break;
+ case OBJECTS_LOCAL:
+ status = _Objects_Are_ids_equal( t1, t2 );
+ break;
+ }
+ _Thread_Unnest_dispatch();
+ break;
+ }
+
+ _Thread_Enable_dispatch();
+ return status;
+#endif
+}
+