Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 38 → Rev 37

/shark/trunk/kernel/signal.c
18,11 → 18,11
 
/**
------------
CVS : $Id: signal.c,v 1.3 2003-01-07 17:07:49 pj Exp $
CVS : $Id: signal.c,v 1.2 2002-11-11 08:34:09 pj Exp $
 
File: $File$
Revision: $Revision: 1.3 $
Last update: $Date: 2003-01-07 17:07:49 $
Revision: $Revision: 1.2 $
Last update: $Date: 2002-11-11 08:34:09 $
------------
 
This file contains:
334,7 → 334,7
iq_extract(p, &sigwaiters);
 
l = proc_table[p].task_level;
level_table[l]->public_unblock(l,p);
level_table[l]->task_insert(l,p);
 
}
 
481,10 → 481,10
/* Reactivate the task... */
iq_extract(task, &sigwaiters);
l = proc_table[task].task_level;
level_table[l]->public_unblock(l,task);
level_table[l]->task_insert(l,task);
 
if (proc_table[task].delay_timer != -1) {
kern_event_delete(proc_table[task].delay_timer);
event_delete(proc_table[task].delay_timer);
proc_table[task].delay_timer = -1;
}
 
627,10 → 627,10
iq_extract(task, &sigwaiters);
 
l = proc_table[task].task_level;
level_table[l]->public_unblock(l,task);
level_table[l]->task_insert(l,task);
 
if (proc_table[task].delay_timer != -1) {
kern_event_delete(proc_table[task].delay_timer);
event_delete(proc_table[task].delay_timer);
proc_table[task].delay_timer = -1;
}
 
700,7 → 700,7
iq_extract(p, &sigwaiters);
 
l = proc_table[p].task_level;
level_table[l]->public_unblock(l,p);
level_table[l]->task_insert(l,p);
 
event_need_reschedule();
}
718,6 → 718,8
proc_des *pthread = &proc_table[exec_shadow];
int thissig;
 
struct timespec ty;
TIME tx;
LEVEL l;
 
task_testcancel();
812,10 → 814,18
/* now, we really block the task... */
proc_table[exec_shadow].context = kern_context_save();
kern_epilogue_macro();
 
/* SAME AS SCHEDULER... manage the capacity event and the load_info */
ll_gettime(TIME_EXACT, &schedule_time);
SUBTIMESPEC(&schedule_time, &cap_lasttime, &ty);
tx = TIMESPEC2USEC(&ty);
proc_table[exec_shadow].avail_time -= tx;
jet_update_slice(tx);
if (cap_timer != NIL) {
event_delete(cap_timer);
cap_timer = NIL;
}
l = proc_table[exec_shadow].task_level;
level_table[l]->public_block(l,exec_shadow);
level_table[l]->task_extract(l,exec_shadow);
/*
* Add this thread to the list of threads in sigwait. Once that is
831,7 → 841,7
/* we can use the delaytimer because if we are here we are not in a
task_delay */
struct timespec t, abstime;
kern_gettime(&t);
ll_gettime(TIME_EXACT, &t);
ADDTIMESPEC(&t, timeout, &abstime);
 
proc_table[exec_shadow].delay_timer =
1017,6 → 1027,8
{
proc_des *pthread = &proc_table[exec_shadow];
 
struct timespec ty;
TIME tx;
LEVEL l;
 
task_testcancel();
1044,9 → 1056,18
/* now, we really block the task... */
proc_table[exec_shadow].context = kern_context_save();
kern_epilogue_macro();
/* SAME AS SCHEDULER... manage the capacity event and the load_info */
ll_gettime(TIME_EXACT, &schedule_time);
SUBTIMESPEC(&schedule_time, &cap_lasttime, &ty);
tx = TIMESPEC2USEC(&ty);
proc_table[exec_shadow].avail_time -= tx;
jet_update_slice(tx);
if (cap_timer != NIL) {
event_delete(cap_timer);
cap_timer = NIL;
}
l = proc_table[exec_shadow].task_level;
level_table[l]->public_block(l,exec_shadow);
level_table[l]->task_extract(l,exec_shadow);
 
iq_insertfirst(exec_shadow, &sigwaiters);
proc_table[exec_shadow].status = WAIT_SIGSUSPEND;
1095,7 → 1116,7
 
kern_cli();
 
kern_gettime(&temp);
ll_gettime(TIME_EXACT, &temp);
 
if (alarm_timer == -1)
returnvalue.tv_sec = 0;
1102,7 → 1123,7
else {
SUBTIMESPEC(&alarm_time, &temp, &returnvalue);
 
kern_event_delete(alarm_timer);
event_delete(alarm_timer);
}
 
if (seconds) {
1476,7 → 1497,7
if (proc_table[i].status == WAIT_SIG) {
 
if (proc_table[i].delay_timer != -1) {
kern_event_delete(proc_table[i].delay_timer);
event_delete(proc_table[i].delay_timer);
proc_table[i].delay_timer = -1;
}
 
1483,7 → 1504,7
iq_extract(i, &sigwaiters);
 
l = proc_table[i].task_level;
level_table[l]->public_unblock(l,i);
level_table[l]->task_insert(l,i);
 
return 1;
}
1490,7 → 1511,7
else if (proc_table[i].status == WAIT_SIGSUSPEND) {
 
l = proc_table[i].task_level;
level_table[l]->public_unblock(l,i);
level_table[l]->task_insert(l,i);
 
return 1;
}