Blame nptl/pthread_attr_init.c

Packit 6c4009
/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <errno.h>
Packit 6c4009
#include <string.h>
Packit 6c4009
#include <unistd.h>
Packit 6c4009
#include "pthreadP.h"
Packit 6c4009
Packit 6c4009
#include <shlib-compat.h>
Packit 6c4009
Packit 6c4009
Packit 6c4009
struct pthread_attr *__attr_list;
Packit 6c4009
int __attr_list_lock = LLL_LOCK_INITIALIZER;
Packit 6c4009
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
__pthread_attr_init_2_1 (pthread_attr_t *attr)
Packit 6c4009
{
Packit 6c4009
  struct pthread_attr *iattr;
Packit 6c4009
Packit 6c4009
  ASSERT_TYPE_SIZE (pthread_attr_t, __SIZEOF_PTHREAD_ATTR_T);
Packit 6c4009
  ASSERT_PTHREAD_INTERNAL_SIZE (pthread_attr_t, struct pthread_attr);
Packit 6c4009
Packit 6c4009
  /* Many elements are initialized to zero so let us do it all at
Packit 6c4009
     once.  This also takes care of clearing the bytes which are not
Packit 6c4009
     internally used.  */
Packit 6c4009
  memset (attr, '\0', __SIZEOF_PTHREAD_ATTR_T);
Packit 6c4009
Packit 6c4009
  iattr = (struct pthread_attr *) attr;
Packit 6c4009
Packit 6c4009
  /* Default guard size specified by the standard.  */
Packit 6c4009
  iattr->guardsize = __getpagesize ();
Packit 6c4009
Packit 6c4009
  return 0;
Packit 6c4009
}
Packit 6c4009
versioned_symbol (libpthread, __pthread_attr_init_2_1, pthread_attr_init,
Packit 6c4009
		  GLIBC_2_1);
Packit 6c4009
Packit 6c4009
Packit 6c4009
#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
Packit 6c4009
int
Packit 6c4009
__pthread_attr_init_2_0 (pthread_attr_t *attr)
Packit 6c4009
{
Packit 6c4009
  /* This code is specific to the old LinuxThread code which has a too
Packit 6c4009
     small pthread_attr_t definition.  The struct looked like
Packit 6c4009
     this:  */
Packit 6c4009
  struct old_attr
Packit 6c4009
  {
Packit 6c4009
    int detachstate;
Packit 6c4009
    int schedpolicy;
Packit 6c4009
    struct sched_param schedparam;
Packit 6c4009
    int inheritsched;
Packit 6c4009
    int scope;
Packit 6c4009
  };
Packit 6c4009
  struct pthread_attr *iattr;
Packit 6c4009
Packit 6c4009
  /* Many elements are initialized to zero so let us do it all at
Packit 6c4009
     once.  This also takes care of clearing the bytes which are not
Packit 6c4009
     internally used.  */
Packit 6c4009
  memset (attr, '\0', sizeof (struct old_attr));
Packit 6c4009
Packit 6c4009
  iattr = (struct pthread_attr *) attr;
Packit 6c4009
  iattr->flags |= ATTR_FLAG_OLDATTR;
Packit 6c4009
Packit 6c4009
  /* We cannot enqueue the attribute because that member is not in the
Packit 6c4009
     old attribute structure.  */
Packit 6c4009
  return 0;
Packit 6c4009
}
Packit 6c4009
compat_symbol (libpthread, __pthread_attr_init_2_0, pthread_attr_init,
Packit 6c4009
	       GLIBC_2_0);
Packit 6c4009
#endif