Last change
on this file since 25 was 4, checked in by Mattia Monga, 14 years ago |
Importazione sorgenti libro
|
File size:
1.3 KB
|
Rev | Line | |
---|
[4] | 1 | /* The kernel call that is implemented in this file:
|
---|
| 2 | * m_type: SYS_ENDKSIG
|
---|
| 3 | *
|
---|
| 4 | * The parameters for this kernel call are:
|
---|
| 5 | * m2_i1: SIG_PROC # process for which PM is done
|
---|
| 6 | */
|
---|
| 7 |
|
---|
| 8 | #include "../system.h"
|
---|
| 9 | #include <signal.h>
|
---|
| 10 | #include <sys/sigcontext.h>
|
---|
| 11 |
|
---|
| 12 | #if USE_ENDKSIG
|
---|
| 13 |
|
---|
| 14 | /*===========================================================================*
|
---|
| 15 | * do_endksig *
|
---|
| 16 | *===========================================================================*/
|
---|
| 17 | PUBLIC int do_endksig(m_ptr)
|
---|
| 18 | message *m_ptr; /* pointer to request message */
|
---|
| 19 | {
|
---|
| 20 | /* Finish up after a kernel type signal, caused by a SYS_KILL message or a
|
---|
| 21 | * call to cause_sig by a task. This is called by the PM after processing a
|
---|
| 22 | * signal it got with SYS_GETKSIG.
|
---|
| 23 | */
|
---|
| 24 | register struct proc *rp;
|
---|
| 25 |
|
---|
| 26 | /* Get process pointer and verify that it had signals pending. If the
|
---|
| 27 | * process is already dead its flags will be reset.
|
---|
| 28 | */
|
---|
| 29 | rp = proc_addr(m_ptr->SIG_PROC);
|
---|
| 30 | if (! (rp->p_rts_flags & SIG_PENDING)) return(EINVAL);
|
---|
| 31 |
|
---|
| 32 | /* PM has finished one kernel signal. Perhaps process is ready now? */
|
---|
| 33 | if (! (rp->p_rts_flags & SIGNALED)) /* new signal arrived */
|
---|
| 34 | if ((rp->p_rts_flags &= ~SIG_PENDING)==0) /* remove pending flag */
|
---|
| 35 | lock_enqueue(rp); /* ready if no flags */
|
---|
| 36 | return(OK);
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | #endif /* USE_ENDKSIG */
|
---|
| 40 |
|
---|
Note:
See
TracBrowser
for help on using the repository browser.