diff options
| author | Bernard Xiong <[email protected]> | 2019-05-12 21:44:28 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2019-05-12 21:44:28 +0800 |
| commit | bb506e8493b3918a36b4854632e177b4b64f30fe (patch) | |
| tree | 31661bcc6c62b6162c74f49b50d85379b0809c7e /components/libc/pthreads | |
| parent | 5d36fa78c0aed2adc23891ad3cee349b522ba0c3 (diff) | |
[pthreads] Add spinlock declare and fix code issue.
Diffstat (limited to 'components/libc/pthreads')
| -rw-r--r-- | components/libc/pthreads/pthread.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/components/libc/pthreads/pthread.c b/components/libc/pthreads/pthread.c index 924fd6a6f9..64ef81d680 100644 --- a/components/libc/pthreads/pthread.c +++ b/components/libc/pthreads/pthread.c @@ -20,6 +20,7 @@ _pthread_data_t *pth_table[PTHREAD_NUM_MAX] = {NULL}; _pthread_data_t *_pthread_get_data(pthread_t thread) { + RT_DECLARE_SPINLOCK(pth_lock); _pthread_data_t *ptd; if (thread >= PTHREAD_NUM_MAX) return NULL; @@ -36,6 +37,7 @@ _pthread_data_t *_pthread_get_data(pthread_t thread) pthread_t _pthread_data_get_pth(_pthread_data_t *ptd) { int index; + RT_DECLARE_SPINLOCK(pth_lock); rt_hw_spin_lock(&pth_lock); for (index = 0; index < PTHREAD_NUM_MAX; index ++) @@ -51,11 +53,12 @@ pthread_t _pthread_data_create(void) { int index; _pthread_data_t *ptd = NULL; + RT_DECLARE_SPINLOCK(pth_lock); ptd = (_pthread_data_t*)rt_malloc(sizeof(_pthread_data_t)); if (!ptd) return PTHREAD_NUM_MAX; - memset(ptd, 0x0, sizeof(sizeof(_pthread_data_t))); + memset(ptd, 0x0, sizeof(_pthread_data_t)); ptd->canceled = 0; ptd->cancelstate = PTHREAD_CANCEL_DISABLE; ptd->canceltype = PTHREAD_CANCEL_DEFERRED; @@ -67,6 +70,7 @@ pthread_t _pthread_data_create(void) if (pth_table[index] == NULL) { pth_table[index] = ptd; + break; } } rt_hw_spin_unlock(&pth_lock); @@ -76,6 +80,8 @@ pthread_t _pthread_data_create(void) void _pthread_data_destroy(pthread_t pth) { + RT_DECLARE_SPINLOCK(pth_lock); + _pthread_data_t *ptd = _pthread_get_data(pth); if (ptd) { |
