MT_FRJOB/SMS.FRJB - Force Remove a Job
Force remove an existing job. The job may be active, if so it will be rendered inactive and then removed.
Call Parameters | Return Register | Return Parameter | |
---|---|---|---|
D0.B | $05 | D0.L | Error code. |
D1.L | Id of job to be removed, or -1 for the current job. | D1.L | Corrupted. |
D2.L | Unused. | D2.L | Corrupted. |
D3.L | Error code to return from killed job to any waiting jobs. | D3.L | Corrupted. |
A0.L | Unused. | A0.L | Corrupted. |
A1.L | Unused. | A1.L | Corrupted. |
A2.L | Unused. | A2.L | Corrupted. |
A3.L | Unused. | A3.L | Corrupted. |
Errors
Error Code | Description |
---|---|
ERR_NJ | Invalid job id. |
Notes
- All registers not shown above are not used on entry and are preserved on exit.
- Job 0 (SuperBasic) cannot be removed.
- This trap is not atomic as it can exit via the scheduler - if the current job is being removed.
- If the job being removed is active, it is inactivated and removed.
- If the job has child jobs, they are removed whether or not they are active.
- The error code in D3.L is passed to any job which is waiting for this job to complete.
- Any resources - channels, memory etc - owned by the job being removed, or its children, are released.
Example
The following shows the use of this call to remove the current job.
...
kill_me moveq #SMS.FRJB,d0 ; Or MT_FRJOB.
moveq #-1,d1 ; Indicate the current job.
moveq #0,d3 ; Don't pass any error codes.
trap #1 ; Kill this job.
bra.s kill_me ; Shouldn't get here, but just in case!