- Don't lock tasks in process_task_foreach()
- Wake up processes when they receive signals
task_t *t = proc->p_tasks[i];
if(t) {
- task_lock(t);
ret_val = func(proc, t, data);
- task_unlock(t);
if(ret_val < 0) {
break;
ret_val = -EINVAL;
if(proc && signal >= 0 && signal <= SIGMAX) {
+ pid_t pid;
+
ret_val = -EALREADY;
process_lock(proc);
memcpy(&(proc->p_siginfo), si, sizeof(proc->p_siginfo));
}
- /* process needs to be woken up if it was sleeping */
-
+ pid = proc->p_id;
ret_val = 0;
}
process_unlock(proc);
+
+ if(!ret_val) {
+ /* process needs to be woken up if it was sleeping */
+ sched_raise(pid);
+ }
}
return(ret_val);