qdosmsq:traps:trap_1:rmjb

MT_RJOB/SMS_RMJB

Remove an existing (inactive) job. If you need to remove an active job then you need MT_FRJOB/SMS_FRJB.

Call ParametersReturn Parameters
D0.B$04D0.LError code.
D1.LId of job to be removed, or -1 for the current job.D1.LCorrupted.
D2.LUnused.D2.LCorrupted.
D3.LError code to return from killed job to any waiting jobs.D3.LCorrupted.
A0.LUnused.A0.LCorrupted.
A1.LUnused.A1.LCorrupted.
A2.LUnused.A2.LCorrupted.
A3.LUnused.A3.LCorrupted.
ERR_NCNot complete. The job being killed is still active.
ERR_NJInvalid job id.
  • 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, then ERR_BC (not complete) is returned. This tends to imply that passing -1 (current job) as the id of the job to be killed is a non-starter!
  • If the job has child jobs, they are removed whether or not they are active - (probably) using MT_FRJOB/SMS_FRJB below.
  • 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.

The following shows the use of this call to remove the job with id $00010666.

start   moveq   #mt_rjob,d0       ; Trap code.
        moveq   #$00010666,d1     ; I want to kill the job with this id.
        moveq   #0,d3             ; Don't pass any error codes to the job I'm killing.
        trap    #1                ; Kill this job. 
        tst.l   d0                ; Did it work?
        bne.s   <error handler>   ; It appears not.
        :
  • qdosmsq/traps/trap_1/rmjb.txt
  • Last modified: 2008/06/25 12:54
  • by norman