| /* |
| * pthread_mutexattr_settype.c |
| * |
| * Description: |
| * This translation unit implements mutual exclusion (mutex) primitives. |
| * |
| * -------------------------------------------------------------------------- |
| * |
| * Pthreads-win32 - POSIX Threads Library for Win32 |
| * Copyright(C) 1998 John E. Bossom |
| * Copyright(C) 1999,2005 Pthreads-win32 contributors |
| * |
| * Contact Email: rpj@callisto.canberra.edu.au |
| * |
| * The current list of contributors is contained |
| * in the file CONTRIBUTORS included with the source |
| * code distribution. The list can also be seen at the |
| * following World Wide Web location: |
| * http://sources.redhat.com/pthreads-win32/contributors.html |
| * |
| * This 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 of the License, or (at your option) any later version. |
| * |
| * This 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 this library in the file COPYING.LIB; |
| * if not, write to the Free Software Foundation, Inc., |
| * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
| */ |
| |
| #include "pthread.h" |
| #include "implement.h" |
| |
| |
| int |
| pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind) |
| /* |
| * ------------------------------------------------------ |
| * |
| * DOCPUBLIC |
| * The pthread_mutexattr_settype() and |
| * pthread_mutexattr_gettype() functions respectively set and |
| * get the mutex type attribute. This attribute is set in the |
| * type parameter to these functions. |
| * |
| * PARAMETERS |
| * attr |
| * pointer to an instance of pthread_mutexattr_t |
| * |
| * type |
| * must be one of: |
| * |
| * PTHREAD_MUTEX_DEFAULT |
| * |
| * PTHREAD_MUTEX_NORMAL |
| * |
| * PTHREAD_MUTEX_ERRORCHECK |
| * |
| * PTHREAD_MUTEX_RECURSIVE |
| * |
| * DESCRIPTION |
| * The pthread_mutexattr_settype() and |
| * pthread_mutexattr_gettype() functions respectively set and |
| * get the mutex type attribute. This attribute is set in the |
| * type parameter to these functions. The default value of the |
| * type attribute is PTHREAD_MUTEX_DEFAULT. |
| * |
| * The type of mutex is contained in the type attribute of the |
| * mutex attributes. Valid mutex types include: |
| * |
| * PTHREAD_MUTEX_NORMAL |
| * This type of mutex does not detect deadlock. A |
| * thread attempting to relock this mutex without |
| * first unlocking it will deadlock. Attempting to |
| * unlock a mutex locked by a different thread |
| * results in undefined behavior. Attempting to |
| * unlock an unlocked mutex results in undefined |
| * behavior. |
| * |
| * PTHREAD_MUTEX_ERRORCHECK |
| * This type of mutex provides error checking. A |
| * thread attempting to relock this mutex without |
| * first unlocking it will return with an error. A |
| * thread attempting to unlock a mutex which another |
| * thread has locked will return with an error. A |
| * thread attempting to unlock an unlocked mutex will |
| * return with an error. |
| * |
| * PTHREAD_MUTEX_DEFAULT |
| * Same as PTHREAD_MUTEX_NORMAL. |
| * |
| * PTHREAD_MUTEX_RECURSIVE |
| * A thread attempting to relock this mutex without |
| * first unlocking it will succeed in locking the |
| * mutex. The relocking deadlock which can occur with |
| * mutexes of type PTHREAD_MUTEX_NORMAL cannot occur |
| * with this type of mutex. Multiple locks of this |
| * mutex require the same number of unlocks to |
| * release the mutex before another thread can |
| * acquire the mutex. A thread attempting to unlock a |
| * mutex which another thread has locked will return |
| * with an error. A thread attempting to unlock an |
| * unlocked mutex will return with an error. This |
| * type of mutex is only supported for mutexes whose |
| * process shared attribute is |
| * PTHREAD_PROCESS_PRIVATE. |
| * |
| * RESULTS |
| * 0 successfully set attribute, |
| * EINVAL 'attr' or 'type' is invalid, |
| * |
| * ------------------------------------------------------ |
| */ |
| { |
| int result = 0; |
| |
| if ((attr != NULL && *attr != NULL)) |
| { |
| switch (kind) |
| { |
| case PTHREAD_MUTEX_FAST_NP: |
| case PTHREAD_MUTEX_RECURSIVE_NP: |
| case PTHREAD_MUTEX_ERRORCHECK_NP: |
| (*attr)->kind = kind; |
| break; |
| default: |
| result = EINVAL; |
| break; |
| } |
| } |
| else |
| { |
| result = EINVAL; |
| } |
| |
| return (result); |
| } /* pthread_mutexattr_settype */ |