51,9 → 51,15 |
fsf_create_synch_obj(fsf_synch_obj_handle_t *synch_handle) |
{ |
int index,oldindex; |
SYS_FLAGS f; |
f=kern_fsave(); |
|
index=hash_fun(synch_handle); |
|
index=hash_fun(synch_handle); |
if (index<0) exit(-1); |
if (index<0 || index>=MAX_HASH_ENTRY) { |
kern_frestore(f); |
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
} |
|
if (htable[index].id==1) { |
oldindex=index; |
60,7 → 66,10 |
index = (index + 1) % MAX_HASH_ENTRY; |
// find |
while (htable[index].id == 1 && index!=oldindex) index=(index+1) % MAX_HASH_ENTRY; |
if (index==oldindex) return FSF_ERR_TOO_MANY_SYNCH_OBJS; |
if (index==oldindex) { |
kern_frestore(f); |
return FSF_ERR_TOO_MANY_SYNCH_OBJS; |
} |
} |
//if (!synch_handle) return FSF_ERR_INVALID_SYNCH_OBJECT_HANDLE; |
|
67,6 → 76,9 |
iq_init(&(htable[index].threads), NULL, 0); |
htable[index].events = 0; |
htable[index].id = 1; |
|
kern_frestore(f); |
|
*synch_handle=index; |
|
return 0; |
82,7 → 94,12 |
fsf_server_id_t server; |
SYS_FLAGS f; |
f=kern_fsave(); |
|
|
if (synch_handle<0 || synch_handle>=MAX_HASH_ENTRY) { |
kern_frestore(f); |
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
} |
|
if (htable[index].id==-1) { |
kern_frestore(f); |
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
109,6 → 126,12 |
int index=synch_handle; |
SYS_FLAGS f; |
f=kern_fsave(); |
|
if (synch_handle<0 || synch_handle>=MAX_HASH_ENTRY) { |
kern_frestore(f); |
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
} |
|
if (htable[index].id==-1) { |
kern_frestore(f); |
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE; |
118,6 → 141,7 |
|
while (iq_getfirst(&(htable[index].threads)) != NIL); |
htable[index].events = 0; |
kern_frestore(f); |
|
return 0; |
|
143,12 → 167,6 |
SYS_FLAGS f; |
fsf_server_id_t server; |
|
if (next_budget->tv_sec < 0 || next_budget->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
if (next_period->tv_sec < 0 || next_period->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
if (at_absolute_time->tv_sec < 0 || at_absolute_time->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
239,12 → 257,6 |
fsf_server_id_t server; |
SYS_FLAGS f; |
|
if (next_budget->tv_sec < 0 || next_budget->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
if (next_period->tv_sec < 0 || next_period->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
f=kern_fsave(); |
|
local_scheduler_level = SERVER_get_local_scheduler_level_from_pid(fsf_server_level, exec_shadow); |
337,12 → 349,6 |
|
SYS_FLAGS f; |
|
if (next_budget->tv_sec < 0 || next_budget->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
if (next_period->tv_sec < 0 || next_period->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
if (abs_timeout->tv_sec < 0 || abs_timeout->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|