pid管理修正
This commit is contained in:
@@ -27,3 +27,4 @@ void task_init(task_t *task, ram_limit_t *ram, int is_knl);
|
||||
task_t *task_create(ram_limit_t *lim, int is_knl);
|
||||
int task_alloc_base_ram(task_t *tk, ram_limit_t *lim, size_t size);
|
||||
void task_kill(task_t *tk);
|
||||
int task_set_pid(task_t *task, pid_t pid);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -61,7 +61,6 @@ int main(int argc, char *args[])
|
||||
|
||||
ulog_write_str(LOG_PROT, "init..\n");
|
||||
test();
|
||||
task_set_pid(TASK_THIS, 0);
|
||||
env = u_get_global_env();
|
||||
rpc_meta_init(THREAD_MAIN, &env->ns_hd);
|
||||
namespace_init();
|
||||
|
||||
Reference in New Issue
Block a user