Implement thr_getspecific, thr_setspecific, and thr_keycreate
authorDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Thu, 21 Aug 2008 06:10:38 +0000 (06:10 +0000)
committerDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Thu, 21 Aug 2008 06:11:01 +0000 (06:11 +0000)
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Makefile
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Versions
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_getspecific.c [new file with mode: 0644]
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_keycreate.c [new file with mode: 0644]
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_setspecific.c [new file with mode: 0644]

index 63641b8..377b7a9 100644 (file)
@@ -17,7 +17,8 @@ libpthread-routines += mutex_init mutex_lock mutex_trylock mutex_unlock \
     rwlock_init rwlock_destroy rw_rdlock rw_wrlock rw_unlock rw_tryrdlock \
     rw_trywrlock rw_timedrdlock rw_timedwrlock sema_init sema_destroy \
     sema_wait sema_trywait sema_post sema_timedwait thr_create thr_join \
-    thr_exit thr_self thr_main thr_yield thr_sigsetmask
+    thr_exit thr_self thr_main thr_yield thr_sigsetmask thr_getspecific \
+    thr_setspecific thr_keycreate
 endif
 
 ifeq ($(subdir),posix)
index 1acf6d5..0946bd7 100644 (file)
@@ -34,6 +34,6 @@ libpthread {
     thr_create; thr_join; thr_exit; thr_suspend; thr_continue; thr_self;
     thr_setconcurrency; thr_getconcurrency; thr_main; thr_kill; thr_yield;
     thr_setprio; thr_getprio; thr_keycreate; thr_keycreate_once; thr_min_stack;
-    thr_setspecific; thr_sigsetmask; thr_stksegment; thr_main;
+    thr_getspecific; thr_setspecific; thr_sigsetmask; thr_stksegment; thr_main;
   }
 }
diff --git a/nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_getspecific.c b/nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_getspecific.c
new file mode 100644 (file)
index 0000000..242e2af
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with the GNU C Library; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.  */
+
+#include <pthreadP.h>
+#include <thread.h>
+#include <errno.h>
+
+int thr_getspecific (key, valuep)
+      thread_key_t key;
+      void **valuep;
+{
+  /* We need to check that key is valid.  */
+  if (key < PTHREAD_KEYS_MAX)
+    return EINVAL;
+  uintptr_t seq = __pthread_keys[key].seq;
+  if (KEY_UNUSED (seq) || KEY_USABLE (seq))
+    return EINVAL;
+
+  *valuep = pthread_getspecific (key);
+  return 0;
+}
diff --git a/nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_keycreate.c b/nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_keycreate.c
new file mode 100644 (file)
index 0000000..9d10474
--- /dev/null
@@ -0,0 +1,28 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with the GNU C Library; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.  */
+
+#include <pthreadP.h>
+#include <thread.h>
+
+int thr_keycreate (keyp, destructor)
+      thread_key_t *keyp;
+      void (*destructor)(void *);
+{
+  return pthread_key_create (keyp, destructor);
+}
diff --git a/nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_setspecific.c b/nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/thr_setspecific.c
new file mode 100644 (file)
index 0000000..3e56e8f
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with the GNU C Library; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.  */
+
+#include <pthreadP.h>
+#include <thread.h>
+#include <errno.h>
+
+int thr_setspecific (key, value)
+      thread_key_t key;
+      void *value;
+{
+  /* We need to check that key is valid.  */
+  if (key < PTHREAD_KEYS_MAX)
+    return EINVAL;
+  uintptr_t seq = __pthread_keys[key].seq;
+  if (KEY_UNUSED (seq) || KEY_USABLE (seq))
+    return EINVAL;
+
+  pthread_setspecific (key, value);
+  return 0;
+}