sched/pthread: Use -1 instead of 0 as PID for unclaimed mutexes

This commit is contained in:
Juha Niskanen 2015-06-16 08:27:38 -06:00 committed by Gregory Nutt
parent ba55e8c7d8
commit d16053c33c
6 changed files with 12 additions and 13 deletions

View File

@ -137,8 +137,8 @@
/* Definitions to map some non-standard, BSD thread management interfaces to /* Definitions to map some non-standard, BSD thread management interfaces to
* the non-standard Linux-like prctl() interface. Since these are simple * the non-standard Linux-like prctl() interface. Since these are simple
* mappings to prctl, they will return 0 sucess and -1 on failure with the * mappings to prctl, they will return 0 on success and -1 on failure with the
* err number in errno. This is an inconsistency with out pthread interfaces. * err number in errno. This is an inconsistency with the pthread interfaces.
*/ */
#define pthread_setname_np(thread, name) \ #define pthread_setname_np(thread, name) \
@ -160,14 +160,13 @@ extern "C"
typedef int pthread_key_t; typedef int pthread_key_t;
typedef FAR void *pthread_addr_t; typedef FAR void *pthread_addr_t;
typedef pthread_addr_t any_t;
typedef pthread_addr_t (*pthread_startroutine_t)(pthread_addr_t); typedef pthread_addr_t (*pthread_startroutine_t)(pthread_addr_t);
typedef pthread_startroutine_t pthread_func_t; typedef pthread_startroutine_t pthread_func_t;
struct pthread_attr_s struct pthread_attr_s
{ {
size_t stacksize; /* Size of the stack allocated for the pthead */ size_t stacksize; /* Size of the stack allocated for the pthread */
int16_t priority; /* Priority of the pthread */ int16_t priority; /* Priority of the pthread */
uint8_t policy; /* Pthread scheduler policy */ uint8_t policy; /* Pthread scheduler policy */
uint8_t inheritsched; /* Inherit parent prio/policy? */ uint8_t inheritsched; /* Inherit parent prio/policy? */
@ -206,9 +205,9 @@ struct pthread_mutex_s
typedef struct pthread_mutex_s pthread_mutex_t; typedef struct pthread_mutex_s pthread_mutex_t;
#ifdef CONFIG_MUTEX_TYPES #ifdef CONFIG_MUTEX_TYPES
# define PTHREAD_MUTEX_INITIALIZER {0, SEM_INITIALIZER(1), PTHREAD_MUTEX_DEFAULT, 0} # define PTHREAD_MUTEX_INITIALIZER {-1, SEM_INITIALIZER(1), PTHREAD_MUTEX_DEFAULT, 0}
#else #else
# define PTHREAD_MUTEX_INITIALIZER {0, SEM_INITIALIZER(1)} # define PTHREAD_MUTEX_INITIALIZER {-1, SEM_INITIALIZER(1)}
#endif #endif
struct pthread_barrierattr_s struct pthread_barrierattr_s
@ -307,7 +306,7 @@ void pthread_yield(void);
/* Compare two thread IDs. */ /* Compare two thread IDs. */
#define pthread_equal(t1,t2) (t1 == t2) #define pthread_equal(t1,t2) ((t1) == (t2))
/* Thread scheduling parameters */ /* Thread scheduling parameters */

View File

@ -270,7 +270,7 @@ int pthread_cond_timedwait(FAR pthread_cond_t *cond, FAR pthread_mutex_t *mutex,
{ {
/* Give up the mutex */ /* Give up the mutex */
mutex->pid = 0; mutex->pid = -1;
ret = pthread_givesemaphore((sem_t*)&mutex->sem); ret = pthread_givesemaphore((sem_t*)&mutex->sem);
if (ret) if (ret)
{ {

View File

@ -113,7 +113,7 @@ int pthread_cond_wait(FAR pthread_cond_t *cond, FAR pthread_mutex_t *mutex)
sdbg("Give up mutex / take cond\n"); sdbg("Give up mutex / take cond\n");
sched_lock(); sched_lock();
mutex->pid = 0; mutex->pid = -1;
ret = pthread_givesemaphore((sem_t*)&mutex->sem); ret = pthread_givesemaphore((sem_t*)&mutex->sem);
/* Take the semaphore */ /* Take the semaphore */
@ -127,7 +127,7 @@ int pthread_cond_wait(FAR pthread_cond_t *cond, FAR pthread_mutex_t *mutex)
ret |= pthread_takesemaphore((sem_t*)&mutex->sem); ret |= pthread_takesemaphore((sem_t*)&mutex->sem);
if (!ret) if (!ret)
{ {
mutex->pid = getpid();; mutex->pid = getpid();
} }
} }

View File

@ -108,7 +108,7 @@ int pthread_mutex_destroy(FAR pthread_mutex_t *mutex)
/* Is the semaphore available? */ /* Is the semaphore available? */
if (mutex->pid != 0) if (mutex->pid != -1)
{ {
ret = EBUSY; ret = EBUSY;
} }

View File

@ -115,7 +115,7 @@ int pthread_mutex_init(FAR pthread_mutex_t *mutex, FAR const pthread_mutexattr_t
/* Indicate that the semaphore is not held by any thread. */ /* Indicate that the semaphore is not held by any thread. */
mutex->pid = 0; mutex->pid = -1;
/* Initialize the mutex like a semaphore with initial count = 1 */ /* Initialize the mutex like a semaphore with initial count = 1 */

View File

@ -148,7 +148,7 @@ int pthread_mutex_unlock(FAR pthread_mutex_t *mutex)
{ {
/* Nullify the pid and lock count then post the semaphore */ /* Nullify the pid and lock count then post the semaphore */
mutex->pid = 0; mutex->pid = -1;
#ifdef CONFIG_MUTEX_TYPES #ifdef CONFIG_MUTEX_TYPES
mutex->nlocks = 0; mutex->nlocks = 0;
#endif #endif