123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "pthread.h"
- #include "implement.h"
- int
- pthread_mutex_destroy (pthread_mutex_t * mutex)
- {
- int result = 0;
- pthread_mutex_t mx;
-
-
- if (*mutex < PTHREAD_ERRORCHECK_MUTEX_INITIALIZER)
- {
- mx = *mutex;
- result = pthread_mutex_trylock (&mx);
-
- if (result == 0)
- {
- if (mx->kind != PTHREAD_MUTEX_RECURSIVE || 1 == mx->recursive_count)
- {
-
- *mutex = NULL;
- result = pthread_mutex_unlock (&mx);
- if (result == 0)
- {
- pte_osSemaphoreDelete(mx->handle);
- free(mx);
- }
- else
- {
-
- *mutex = mx;
- }
- }
- else
- {
-
- mx->recursive_count--;
- result = EBUSY;
- }
- }
- }
- else
- {
-
- pte_osMutexLock (pte_mutex_test_init_lock);
-
- if (*mutex >= PTHREAD_ERRORCHECK_MUTEX_INITIALIZER)
- {
-
- *mutex = NULL;
- }
- else
- {
-
- result = EBUSY;
- }
- pte_osMutexUnlock(pte_mutex_test_init_lock);
- }
- return (result);
- }
|