[lwp] Fix a bug when lwp_pid_get_locked cannot find pid.Same thing with tid.
This commit is contained in:
parent
7066761510
commit
c17f205119
|
@ -80,11 +80,13 @@ static pid_t lwp_pid_get_locked(void)
|
|||
{
|
||||
struct lwp_avl_struct *p;
|
||||
pid_t pid = 0;
|
||||
int head_recover_flag = 0;
|
||||
|
||||
p = lwp_pid_free_head;
|
||||
if (p)
|
||||
{
|
||||
lwp_pid_free_head = (struct lwp_avl_struct *)p->avl_right;
|
||||
head_recover_flag = 1;
|
||||
}
|
||||
else if (lwp_pid_ary_alloced < RT_LWP_MAX_NR)
|
||||
{
|
||||
|
@ -115,10 +117,23 @@ static pid_t lwp_pid_get_locked(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (found_noused == 1)
|
||||
{
|
||||
p->avl_key = pid;
|
||||
lwp_avl_insert(p, &lwp_pid_root);
|
||||
current_pid = pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
pid = 0;
|
||||
if (head_recover_flag == 1)
|
||||
{
|
||||
/* recover lwp_pid_free_head */
|
||||
lwp_pid_free_head = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
return pid;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,12 +46,14 @@ int lwp_tid_get(void)
|
|||
{
|
||||
struct lwp_avl_struct *p;
|
||||
int tid = 0;
|
||||
int head_recover_flag = 0;
|
||||
|
||||
lwp_mutex_take_safe(&tid_lock, RT_WAITING_FOREVER, 0);
|
||||
p = lwp_tid_free_head;
|
||||
if (p)
|
||||
{
|
||||
lwp_tid_free_head = (struct lwp_avl_struct *)p->avl_right;
|
||||
head_recover_flag = 1;
|
||||
}
|
||||
else if (lwp_tid_ary_alloced < LWP_TID_MAX_NR)
|
||||
{
|
||||
|
@ -82,10 +84,23 @@ int lwp_tid_get(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (found_noused == 1)
|
||||
{
|
||||
p->avl_key = tid;
|
||||
lwp_avl_insert(p, &lwp_tid_root);
|
||||
current_tid = tid;
|
||||
}
|
||||
else
|
||||
{
|
||||
tid = 0;
|
||||
if (head_recover_flag == 1)
|
||||
{
|
||||
/* recover lwp_tid_free_head */
|
||||
lwp_tid_free_head = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
lwp_mutex_release_safe(&tid_lock);
|
||||
return tid;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue