summaryrefslogtreecommitdiff
path: root/components/libc/pthreads
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-05-12 21:44:28 +0800
committerBernard Xiong <[email protected]>2019-05-12 21:44:28 +0800
commitbb506e8493b3918a36b4854632e177b4b64f30fe (patch)
tree31661bcc6c62b6162c74f49b50d85379b0809c7e /components/libc/pthreads
parent5d36fa78c0aed2adc23891ad3cee349b522ba0c3 (diff)
[pthreads] Add spinlock declare and fix code issue.
Diffstat (limited to 'components/libc/pthreads')
-rw-r--r--components/libc/pthreads/pthread.c8
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)
{