[pthreads] Add spinlock declare and fix code issue.
This commit is contained in:
parent
5d36fa78c0
commit
bb506e8493
@ -20,6 +20,7 @@ _pthread_data_t *pth_table[PTHREAD_NUM_MAX] = {NULL};
|
|||||||
|
|
||||||
_pthread_data_t *_pthread_get_data(pthread_t thread)
|
_pthread_data_t *_pthread_get_data(pthread_t thread)
|
||||||
{
|
{
|
||||||
|
RT_DECLARE_SPINLOCK(pth_lock);
|
||||||
_pthread_data_t *ptd;
|
_pthread_data_t *ptd;
|
||||||
|
|
||||||
if (thread >= PTHREAD_NUM_MAX) return NULL;
|
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)
|
pthread_t _pthread_data_get_pth(_pthread_data_t *ptd)
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
|
RT_DECLARE_SPINLOCK(pth_lock);
|
||||||
|
|
||||||
rt_hw_spin_lock(&pth_lock);
|
rt_hw_spin_lock(&pth_lock);
|
||||||
for (index = 0; index < PTHREAD_NUM_MAX; index ++)
|
for (index = 0; index < PTHREAD_NUM_MAX; index ++)
|
||||||
@ -51,11 +53,12 @@ pthread_t _pthread_data_create(void)
|
|||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
_pthread_data_t *ptd = NULL;
|
_pthread_data_t *ptd = NULL;
|
||||||
|
RT_DECLARE_SPINLOCK(pth_lock);
|
||||||
|
|
||||||
ptd = (_pthread_data_t*)rt_malloc(sizeof(_pthread_data_t));
|
ptd = (_pthread_data_t*)rt_malloc(sizeof(_pthread_data_t));
|
||||||
if (!ptd) return PTHREAD_NUM_MAX;
|
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->canceled = 0;
|
||||||
ptd->cancelstate = PTHREAD_CANCEL_DISABLE;
|
ptd->cancelstate = PTHREAD_CANCEL_DISABLE;
|
||||||
ptd->canceltype = PTHREAD_CANCEL_DEFERRED;
|
ptd->canceltype = PTHREAD_CANCEL_DEFERRED;
|
||||||
@ -67,6 +70,7 @@ pthread_t _pthread_data_create(void)
|
|||||||
if (pth_table[index] == NULL)
|
if (pth_table[index] == NULL)
|
||||||
{
|
{
|
||||||
pth_table[index] = ptd;
|
pth_table[index] = ptd;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rt_hw_spin_unlock(&pth_lock);
|
rt_hw_spin_unlock(&pth_lock);
|
||||||
@ -76,6 +80,8 @@ pthread_t _pthread_data_create(void)
|
|||||||
|
|
||||||
void _pthread_data_destroy(pthread_t pth)
|
void _pthread_data_destroy(pthread_t pth)
|
||||||
{
|
{
|
||||||
|
RT_DECLARE_SPINLOCK(pth_lock);
|
||||||
|
|
||||||
_pthread_data_t *ptd = _pthread_get_data(pth);
|
_pthread_data_t *ptd = _pthread_get_data(pth);
|
||||||
if (ptd)
|
if (ptd)
|
||||||
{
|
{
|
||||||
|
@ -157,6 +157,7 @@ extern rt_hw_spinlock_t _rt_critical_lock;
|
|||||||
(rt_hw_spinlock_t) __RT_HW_SPIN_LOCK_INITIALIZER(lockname)
|
(rt_hw_spinlock_t) __RT_HW_SPIN_LOCK_INITIALIZER(lockname)
|
||||||
|
|
||||||
#define RT_DEFINE_SPINLOCK(x) rt_hw_spinlock_t x = __RT_HW_SPIN_LOCK_UNLOCKED(x)
|
#define RT_DEFINE_SPINLOCK(x) rt_hw_spinlock_t x = __RT_HW_SPIN_LOCK_UNLOCKED(x)
|
||||||
|
#define RT_DECLARE_SPINLOCK(x)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ipi function
|
* ipi function
|
||||||
@ -172,6 +173,13 @@ void rt_hw_secondary_cpu_up(void);
|
|||||||
* secondary cpu idle function
|
* secondary cpu idle function
|
||||||
*/
|
*/
|
||||||
void rt_hw_secondary_cpu_idle_exec(void);
|
void rt_hw_secondary_cpu_idle_exec(void);
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define RT_DEFINE_SPINLOCK(x)
|
||||||
|
#define RT_DECLARE_SPINLOCK(x) rt_ubase_t x
|
||||||
|
|
||||||
|
#define rt_hw_spin_lock(lock) *(lock) = rt_hw_interrupt_disable()
|
||||||
|
#define rt_hw_spin_unlock(lock) rt_hw_interrupt_enable(*(lock))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user