[rtems commit] posix: Add support method to compare two pthread attribute structures.

Jennifer Averett jennifer at rtems.org
Fri Mar 7 15:08:50 UTC 2014


Module:    rtems
Branch:    master
Commit:    baa426a074924b2e1766e2a07a6cce40fdc313cb
Changeset: http://git.rtems.org/rtems/commit/?id=baa426a074924b2e1766e2a07a6cce40fdc313cb

Author:    Jennifer Averett <jennifer.averett at oarcorp.com>
Date:      Thu Feb  6 12:56:34 2014 -0600

posix: Add support method to compare two pthread attribute structures.

---

 cpukit/posix/Makefile.am              |    3 +
 cpukit/posix/src/pthreadattrcompare.c |   92 +++++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am
index ea6d3d9..45562da 100644
--- a/cpukit/posix/Makefile.am
+++ b/cpukit/posix/Makefile.am
@@ -139,6 +139,9 @@ libposix_a_SOURCES += src/pthreadatfork.c src/pthreadattrdestroy.c \
     src/pthreadsetschedparam.c src/pthreadsigmask.c \
     src/psxpriorityisvalid.c src/psxtransschedparam.c
 
+## RTEMS specific support methods
+libposix_a_SOURCES += src/pthreadattrcompare.c 
+
 ## PSIGNAL_C_FILES
 libposix_a_SOURCES += src/psignal.c src/alarm.c src/kill.c src/killinfo.c \
     src/kill_r.c src/pause.c src/psignalclearprocesssignals.c \
diff --git a/cpukit/posix/src/pthreadattrcompare.c b/cpukit/posix/src/pthreadattrcompare.c
new file mode 100644
index 0000000..8ec6fec
--- /dev/null
+++ b/cpukit/posix/src/pthreadattrcompare.c
@@ -0,0 +1,92 @@
+/**
+ * @file
+ *
+ * @brief RTEMS specific pthread attribute comparison
+ * @ingroup POSIX_PTHREADS Private Threads
+ */
+
+/*
+ *  COPYRIGHT (c) 1989-2014.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.com/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <stdio.h>
+
+#include <errno.h>
+#include <pthread.h>
+#include <string.h>
+#include <rtems/posix/pthreadimpl.h>
+
+int rtems_pthread_attribute_compare(
+  const pthread_attr_t *attr1,
+  const pthread_attr_t *attr2
+)
+{
+  if ( attr1->is_initialized  !=  attr2->is_initialized )
+    return 1;
+
+  if ( attr1->stackaddr != attr2->stackaddr )
+    return 1;
+
+  if ( attr1->stacksize != attr2->stacksize )
+    return 1;
+
+  if ( attr1->contentionscope != attr2->contentionscope )
+    return 1;
+
+  if ( attr1->inheritsched != attr2->inheritsched )
+    return 1;
+
+  if ( attr1->schedpolicy != attr2->schedpolicy )
+    return 1;
+
+  if (memcmp(
+    &attr1->schedparam, 
+    &attr2->schedparam, 
+    sizeof(struct sched_param)
+  ))
+    return 1;
+
+  #if HAVE_DECL_PTHREAD_ATTR_SETGUARDSIZE
+    if ( attr1->guardsize != attr2->guardsize )
+      return 1;
+  #endif
+
+  #if defined(_POSIX_THREAD_CPUTIME)
+    if ( attr1->cputime_clock_allowed != attr2->cputime_clock_allowed )
+      return 1;
+  #endif
+
+  if ( attr1->detachstate != attr2->detachstate )
+    return 1;
+
+  #if defined(__RTEMS_HAVE_SYS_CPUSET_H__)
+    if ( attr1->affinitysetsize != attr2->affinitysetsize )
+      return 1;
+
+    if (!CPU_EQUAL_S( 
+      attr1->affinitysetsize, 
+      attr1->affinityset, 
+      attr2->affinityset
+    ))
+      return 1;
+
+    if (!CPU_EQUAL_S(
+      attr1->affinitysetsize, 
+      &attr1->affinitysetpreallocated, 
+      &attr2->affinitysetpreallocated
+    ))
+      return 1;
+  #endif
+
+  return 0;
+}
+
+




More information about the vc mailing list