76,6 → 76,9 |
|
PID p; |
int index, oldindex; |
fsf_server_id_t server; |
SYS_FLAGS f; |
f=kern_fsave(); |
|
index=hash_fun(*synch_handle); |
|
84,16 → 87,23 |
index = (index + 1) % MAX_HASH_ENTRY; |
// find |
while (htable[index].id != *synch_handle && index!=oldindex) index=(index+1) % MAX_HASH_ENTRY; |
if (index==oldindex) return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
if (index==oldindex) { |
kern_frestore(f); |
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
} |
} |
|
//if (!synch_handle) return FSF_ERR_INVALID_SYNCH_OBJECT_HANDLE; |
|
if ((p = iq_getfirst(&(htable[index].threads))) != NIL) |
if ((p = iq_getfirst(&(htable[index].threads))) != NIL) { |
fsf_get_server(p, &server); |
fsf_settask_preemptive(&server, p); |
task_activate(p); |
} |
else |
htable[index].events++; |
|
kern_frestore(f); |
return 0; |
|
} |
123,7 → 133,6 |
} |
|
int restart_task(PID p) { |
int budget, local_scheduler_level, scheduler_id; |
fsf_server_id_t server; |
|
fsf_get_server(p, &server); |
225,6 → 234,7 |
TIME T,Q,D; |
int index,oldindex; |
int budget, local_scheduler_level, scheduler_id; |
fsf_server_id_t server; |
SYS_FLAGS f; |
|
f=kern_fsave(); |
293,8 → 303,11 |
if (htable[index].events > 0) { |
task_activate(exec_shadow); |
htable[index].events--; |
} else |
} else { |
fsf_get_server(exec_shadow, &server); |
fsf_settask_nopreemptive(&server, exec_shadow); |
iq_insertlast(exec_shadow,&(htable[index].threads)); |
} |
|
#ifdef FSF_DEBUG |
kern_printf("(Synch_Handle Events %d)",synch_handle->events); |