pid管理修正
This commit is contained in:
@@ -104,6 +104,20 @@ static int task_lock_2(spinlock_t *sp0, spinlock_t *sp1, int *st0, int *st1)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
int task_set_pid(task_t *task, pid_t pid)
|
||||
{
|
||||
task_t *cur_task = thread_get_current_task();
|
||||
|
||||
if (cur_task->pid == 0)
|
||||
{
|
||||
task->pid = pid;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -EACCES;
|
||||
}
|
||||
}
|
||||
static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f)
|
||||
{
|
||||
task_t *cur_task = thread_get_current_task();
|
||||
@@ -186,15 +200,7 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i
|
||||
break;
|
||||
case TASK_SET_PID:
|
||||
{
|
||||
if (tag_task->pid == (pid_t)(-1))
|
||||
{
|
||||
tag_task->pid = f->r[0];
|
||||
tag = msg_tag_init4(0, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
tag = msg_tag_init4(0, 0, 0, -EACCES);
|
||||
}
|
||||
tag = msg_tag_init4(0, 0, 0, task_set_pid(tag_task, f->r[0]));
|
||||
}
|
||||
break;
|
||||
case TASK_GET_PID:
|
||||
|
||||
@@ -70,6 +70,7 @@ static void knl_init_2(void)
|
||||
void *sp_addr = (char *)init_task->mm_space.mm_block + app->i.stack_offset - app->i.data_offset;
|
||||
void *sp_addr_top = (char *)sp_addr + app->i.stack_size;
|
||||
|
||||
task_set_pid(&init_task, 0);
|
||||
thread_set_msg_bug(init_thread, (char *)(init_task->mm_space.mm_block) + app->i.ram_size);
|
||||
thread_bind(init_thread, &init_task->kobj);
|
||||
thread_user_pf_set(init_thread, (void *)(KNL_TEXT + INIT_OFFSET), (void *)((umword_t)sp_addr_top - 8),
|
||||
|
||||
Reference in New Issue
Block a user