2008-05-17 Samuel Thibault * include/pthread/pthread.h (pthread_getattr_np): New declaration. * pthread/pt-getattr.c: New file. * Makefile (SRCS): Add pt-getattr.c. Index: libpthread/Makefile =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/Makefile,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- libpthread/Makefile 19 Nov 2007 17:37:02 -0000 1.7 +++ libpthread/Makefile 17 May 2008 20:07:55 -0000 1.8 @@ -45,6 +45,7 @@ \ pt-alloc.c \ pt-create.c \ + pt-getattr.c \ pt-equal.c \ pt-dealloc.c \ pt-detach.c \ Index: libpthread/include/pthread/pthread.h =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/include/pthread/pthread.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- libpthread/include/pthread/pthread.h 1 Jan 2008 04:07:13 -0000 1.10 +++ libpthread/include/pthread/pthread.h 17 May 2008 20:07:56 -0000 1.11 @@ -188,6 +188,13 @@ /* Set the value of the stacksize attribute in *ATTR to STACKSIZE. */ extern int pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize); + +#ifdef __USE_GNU +/* Initialize thread attribute *ATTR with attributes corresponding to the + already running thread THREAD. It shall be called on an uninitialized ATTR + and destroyed with pthread_attr_destroy when no longer needed. */ +extern int pthread_getattr_np (pthread_t thread, pthread_attr_t *attr); +#endif /* Create a thread with attributes given by ATTR, executing --- /dev/null 2008-05-16 23:43:09.480010765 +0200 +++ libpthread/pthread/pt-getattr.c 2008-05-17 22:07:56.000000000 +0200 @@ -0,0 +1,49 @@ +/* Thread attributes retrieval. + Copyright (C) 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include + +#include + +/* Initialize thread attribute *ATTR with attributes corresponding to the + already running thread THREAD. It shall be called on an uninitialized ATTR + and destroyed with pthread_attr_destroy when no longer needed. */ +int +pthread_getattr_np (pthread_t thread, pthread_attr_t *attr) +{ + struct __pthread *pthread; + + pthread = __pthread_getid(thread); + if (pthread == NULL) + return ESRCH; + + /* Some attributes (schedparam, inheritsched, contentionscope and schedpolicy) + are not supported yet, so fill them with our default values. */ + *attr = __pthread_default_attr; + + attr->stackaddr = pthread->stackaddr; + attr->stacksize = pthread->stacksize; + attr->guardsize = pthread->guardsize; + attr->detachstate = (pthread->state == PTHREAD_DETACHED + ? PTHREAD_CREATE_DETACHED : PTHREAD_CREATE_JOINABLE); + + return 0; +}