diff options
Diffstat (limited to 'kernel/scheduler.c')
| -rw-r--r-- | kernel/scheduler.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/scheduler.c b/kernel/scheduler.c index e5cdec7..ff46889 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -176,7 +176,7 @@ volatile uint32_t scheduler_run(uint32_t oldesp,uint32_t preference) for(int i=0;i<MAX_TASKS;i++) { int idx=(last_task[cpu]+1+i)%MAX_TASKS; // schedule round robin style - if(preference==-1&&idx==0)continue; +// if(preference==-1&&idx==0)continue; if(idx==preference||idx==2)continue;// skip sleeper and preferred tasks here. @@ -229,6 +229,8 @@ void scheduler_func() volatile int add_task(uint32_t parent_pid,uint32_t vmem, bool thread) { + static bool first=true; + uint32_t parent=task_runs(parent_pid); uint32_t cpu=smp_get(SMP_APIC_ID); @@ -265,7 +267,11 @@ volatile int add_task(uint32_t parent_pid,uint32_t vmem, bool thread) stack[12]=0x1; stack[13]=0; // this task returns pid=0 to the caller - if(!thread)compositor_add_window(vmem); + if(!thread&&first) + { + compositor_add_window(vmem); + //first=false; + } return task_list[cpu][i].pid; } @@ -277,7 +283,8 @@ uint32_t scheduler_wake_worker(uint32_t oldesp) { uint32_t cpu=smp_get(SMP_APIC_ID); task_list[cpu][0].syscall=false; // wake (syscall misused) - return scheduler_run(oldesp,0); + return 0; +// return scheduler_run(oldesp,0); } void scheduler_wake_all() @@ -484,5 +491,6 @@ void task_exit(uint32_t pid) task_list[cpu][i].active=false; } + compositor_del_window(task_list[cpu][idx].vmem); vmem_free_space_dir(task_list[cpu][idx].vmem,task_list[cpu][idx].thread); } |
