|  | /* Basic platform-independent macro definitions for mutexes, | 
|  | thread-specific data and parameters for malloc. | 
|  | Copyright (C) 2003-2014 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 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, see | 
|  | <http://www.gnu.org/licenses/>.  */ | 
|  |  | 
|  | #ifndef _MALLOC_MACHINE_H | 
|  | #define _MALLOC_MACHINE_H | 
|  |  | 
|  | #include <atomic.h> | 
|  | #include <lowlevellock.h> | 
|  |  | 
|  | typedef struct spin_pdr_lock mutex_t; | 
|  |  | 
|  | /* These macros expect to take a pointer to the object */ | 
|  | #define mutex_init(m)		spin_pdr_init(m) | 
|  | #define mutex_lock(m)		spin_pdr_lock(m) | 
|  | #define mutex_trylock(m)	({ spin_pdr_trylock(m) ? 0 : EBUSY; }) | 
|  | #define mutex_unlock(m)		spin_pdr_unlock(m) | 
|  | #define MUTEX_INITIALIZER	SPINPDR_INITIALIZER | 
|  |  | 
|  | /* thread specific data for glibc */ | 
|  |  | 
|  | #include <bits/libc-tsd.h> | 
|  |  | 
|  | typedef void* tsd_key_t;	/* no key data structure, libc magic does it */ | 
|  | __libc_tsd_define (static, void *, MALLOC) /* declaration/common definition */ | 
|  | #define tsd_key_create(key, destr) ((void) (key)) | 
|  | #define tsd_setspecific(key, data) __libc_tsd_set (void *, MALLOC, (data)) | 
|  | #define tsd_getspecific(key, vptr) ((vptr) = __libc_tsd_get (void *, MALLOC)) | 
|  |  | 
|  | /* TODO: look into pthread's version.  We might need this, and it could be that | 
|  | * glibc has the fork_cbs already. */ | 
|  | #define thread_atfork(prepare, parent, child) do {} while(0) | 
|  |  | 
|  | #include <sysdeps/generic/malloc-machine.h> | 
|  |  | 
|  | #endif /* !defined(_MALLOC_MACHINE_H) */ |