
1: /* Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc. 2: This file is part of the GNU C Library. 3: Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. 4: 5: The GNU C Library is free software; you can redistribute it and/or 6: modify it under the terms of the GNU Lesser General Public 7: License as published by the Free Software Foundation; either 8: version 2.1 of the License, or (at your option) any later version. 9: 10: The GNU C Library is distributed in the hope that it will be useful, 11: but WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: Lesser General Public License for more details. 14: 15: You should have received a copy of the GNU Lesser General Public 16: License along with the GNU C Library; if not, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #include <assert.h> 21: #include <errno.h> 22: #include <string.h> 23: #include <unistd.h> 24: #include "pthreadP.h" 25: 26: #include <shlib-compat.h> 27: 28: 29: struct pthread_attr *__attr_list; 30: int __attr_list_lock = LLL_LOCK_INITIALIZER; 31: 32: 33: int 34: __pthread_attr_init_2_1 (attr) 35: pthread_attr_t *attr; 36: { 37: struct pthread_attr *iattr; 38: 39: /* Many elements are initialized to zero so let us do it all at 40: once. This also takes care of clearing the bytes which are not 41: internally used. */ 42: memset (attr, '\0', __SIZEOF_PTHREAD_ATTR_T); 43: 44: assert (sizeof (*attr) >= sizeof (struct pthread_attr)); 45: iattr = (struct pthread_attr *) attr; 46: 47: /* Default guard size specified by the standard. */ 48: iattr->guardsize = __getpagesize (); 49: 50: return 0; 51: } 52: versioned_symbol (libpthread, __pthread_attr_init_2_1, pthread_attr_init, 53: GLIBC_2_1); 54: 55: 56: #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1) 57: int 58: __pthread_attr_init_2_0 (attr) 59: pthread_attr_t *attr; 60: { 61: /* This code is specific to the old LinuxThread code which has a too 62: small pthread_attr_t definition. The struct looked like 63: this: */ 64: struct old_attr 65: { 66: int detachstate; 67: int schedpolicy; 68: struct sched_param schedparam; 69: int inheritsched; 70: int scope; 71: }; 72: struct pthread_attr *iattr; 73: 74: /* Many elements are initialized to zero so let us do it all at 75: once. This also takes care of clearing the bytes which are not 76: internally used. */ 77: memset (attr, '\0', sizeof (struct old_attr)); 78: 79: iattr = (struct pthread_attr *) attr; 80: iattr->flags |= ATTR_FLAG_OLDATTR; 81: 82: /* We cannot enqueue the attribute because that member is not in the 83: old attribute structure. */ 84: return 0; 85: } 86: compat_symbol (libpthread, __pthread_attr_init_2_0, pthread_attr_init, 87: GLIBC_2_0); 88: #endif