[613] | 1 | %ZTMS ;SEA/RDS-TaskMan: Submanager, (Entry & Trap) ;11/3/03 13:46
|
---|
| 2 | ;;8.0;KERNEL;**2,18,24,36,67,94,118,127,136,162,275**;Jul 10, 1995
|
---|
| 3 | ;
|
---|
| 4 | START ;Bottom level of submanager
|
---|
| 5 | S $ETRAP="D ERROR^%ZTMS HALT"
|
---|
| 6 | D NOW^%DTC S ZTQUEUED=0,U="^",DT=X
|
---|
| 7 | D KMPR("$STRT ZTMS$")
|
---|
| 8 | D PARAMS G:$D(ZTOUT) QUIT
|
---|
| 9 | I ZTPFLG("XUSCNT") D COUNT^XUSCNT(1)
|
---|
| 10 | D SETNM^%ZOSV("Sub "_$J)
|
---|
| 11 | S ^%ZTSCH("SUB",ZTPFLG("HOME"),0)=0
|
---|
| 12 | I $D(^%ZTSCH("STOP","SUB",ZTPAIR)) G QUIT
|
---|
| 13 | I ZTPFLG("XUSCNT") D SETLOCK^XUSCNT($NA(^%ZTSCH("SUBLK",ZTPFLG("HOME"),$J)))
|
---|
| 14 | G SUBMGR^%ZTMS1
|
---|
| 15 | ;
|
---|
| 16 | KMPR(TAG) ;Call KMPR to log data
|
---|
| 17 | N Y
|
---|
| 18 | I +$G(^%ZTSCH("LOGRSRC")) S Y="" X $G(^%ZOSF("UCI")) I Y[^%ZOSF("PROD") D LOGRSRC^%ZOSV(TAG)
|
---|
| 19 | Q
|
---|
| 20 | QUIT D KMPR("$STOP ZTMS$")
|
---|
| 21 | I ZTPFLG("XUSCNT") D COUNT^XUSCNT(-1)
|
---|
| 22 | Q
|
---|
| 23 | PARAMS ;
|
---|
| 24 | ;START--lookup parameters
|
---|
| 25 | X ^%ZOSF("PRIINQ") S %ZTMS("PRIO")=Y ;Get starting priority
|
---|
| 26 | D GETENV^%ZOSV
|
---|
| 27 | S ZTCPU=$P(Y,U,2),ZTNODE=$P(Y,U,3),ZTPAIR=$P(Y,U,4),ZTUCI=$P(Y,U)_$S(ZTCPU]"":","_ZTCPU,1:"") S:ZTPAIR[":" ZTNODE=$P(ZTPAIR,":",2)
|
---|
| 28 | S ZTPFLG("RT")=0,ZTPFLG("MIN")=1,ZTYPE="",ZTPFLG("ZTREQ")=0
|
---|
| 29 | S ZTPN=$O(^%ZIS(14.7,"B",ZTPAIR,0)),ZTPFLG("ZTPN")=ZTPN
|
---|
| 30 | I ZTPN>0 S %=$G(^%ZIS(14.7,ZTPN,0)) D
|
---|
| 31 | . S ZTPFLG("RT")=+$P(%,U,6),ZTYPE=$P(%,U,9) S:$P(%,U,12)>1 ZTPFLG("MIN")=$P(%,U,12)
|
---|
| 32 | . S ZTPFLG("HOME")=$S($P(%,U,13):$P(^%ZIS(14.7,+$P(%,U,13),0),U),1:ZTPAIR)
|
---|
| 33 | . S ZTPFLG("ZTREQ")=+$G(^%ZIS(14.7,ZTPN,3))
|
---|
| 34 | . Q
|
---|
| 35 | S ZTPFLG("XUSCNT")=0 I ^%ZOSF("OS")["GT.M" S ZTPFLG("XUSCNT")=$L($T(^XUSCNT))
|
---|
| 36 | K ZTMLOG ;Set to log msg about locks
|
---|
| 37 | I "FO"[ZTYPE S ZTOUT=1 Q ;SM only run on C,P,G types
|
---|
| 38 | Q
|
---|
| 39 | ERROR ;START--trap
|
---|
| 40 | I $S(^%ZOSF("OS")["GT.M":$ZS["STACKO",1:$ZE["STKOVR"!($ZE["STACK")) S $ET="Q:$ST>"_($ST-8)_" D ERR2^%ZTMS" Q
|
---|
| 41 | ;set backup trap, prepare to handle error.
|
---|
| 42 | ERR2 S $ETRAP="D ERROR2^%ZTMS0 HALT"
|
---|
| 43 | S %ZTERLGR=$$LGR^%ZOSV
|
---|
| 44 | S %ZTME=$$EC^%ZOSV,ZTERROH=$H
|
---|
| 45 | S %ZTMETSK=$S($D(%ZTTV)#2:$P(%ZTTV,"^",4),$G(ZTSK)>0:ZTSK,1:0)
|
---|
| 46 | I %ZTMETSK L ^%ZTSK(%ZTMETSK) ;Unlock all other locks
|
---|
| 47 | I $G(IO)]"" L +^%ZTSCH("DEV",IO) ;Keep other tasks from IO device.
|
---|
| 48 | ;Check if to record error
|
---|
| 49 | I '$$SCREEN^%ZTER(%ZTME) D
|
---|
| 50 | . D ^%ZTER ;Kernel error file
|
---|
| 51 | . ;log error and context in TaskMan Error file
|
---|
| 52 | . L +^%ZTSCH("ER") H 1 S ZTERROH=$H
|
---|
| 53 | . S ^%ZTSCH("ER",+ZTERROH,$P(ZTERROH,",",2))=%ZTME
|
---|
| 54 | . D XREF^%ZTMS0
|
---|
| 55 | . S ^%ZTSCH("ER",+ZTERROH,$P(ZTERROH,",",2),1)=ZTERROX1
|
---|
| 56 | . L -^%ZTSCH("ER")
|
---|
| 57 | . Q
|
---|
| 58 | ;
|
---|
| 59 | I $D(ZTDEVOK) S $P(^%ZTSCH("IO"),U,2)=ZTDEVOK ;Have others skip dev.
|
---|
| 60 | ;Update Task file entry
|
---|
| 61 | I $G(ZTQUEUED),%ZTMETSK,$D(^%ZTSK(%ZTMETSK)) D STATUS^%ZTMS0
|
---|
| 62 | ;
|
---|
| 63 | ;D KMPR("$ETRP ZTMS$")
|
---|
| 64 | I ZTPFLG("XUSCNT") D COUNT^XUSCNT(-1)
|
---|
| 65 | I ZTQUEUED>.9,%ZTMETSK>0,$G(DUZ)>.9,$D(^DD(8992,.01,0)) D
|
---|
| 66 | . S XQA(DUZ)="",XQAMSG="Your task #"_%ZTMETSK_" stopped because of an error",XQADATA=%ZTMETSK,XQAROU="XQA^XUTMUTL"
|
---|
| 67 | . D SETUP^XQALERT Q
|
---|
| 68 | ;
|
---|
| 69 | CLEAN ;clean up global data related to this process
|
---|
| 70 | I $G(ZTQUEUED)>.9,'$D(^%ZTSCH("TASK",ZTQUEUED,"P")) K ^%ZTSCH("TASK",ZTQUEUED)
|
---|
| 71 | K ^TMP($J),^UTILITY($J),^XUTL("XQ",$J)
|
---|
| 72 | I '$G(ZTQUEUED) D SUB^%ZTMS1(-1)
|
---|
| 73 | I $D(ZTDEVN)#2,$D(%ZTIO)#2,%ZTIO]"" D DEVLK^%ZTMS1(-1,%ZTIO)
|
---|
| 74 | I $D(ZTDEVOK)#2 D DEVBAD^%ZTMS0
|
---|
| 75 | I $G(ZTSYNCFL)]"" S X=$$SYNCFLG^%ZTMS2("S",ZTSYNCFL,"","Stopped because of an error")
|
---|
| 76 | ;
|
---|
| 77 | CLOSE ;close i/o device after error
|
---|
| 78 | D ERCLOZ^%ZTMS0
|
---|
| 79 | I $G(IO)]"" C IO H 5 ;In case of a port problem give it time to reset.
|
---|
| 80 | ;
|
---|
| 81 | D KMPR("$STOP ZTMS$")
|
---|
| 82 | I ZTQUEUED=.5,%ZTMETSK>0,$P($G(^%ZTSK(%ZTMETSK,.12)),"^")<5 D ;Only try 5 times
|
---|
| 83 | . S $P(^(.12),"^")=^%ZTSK(%ZTMETSK,.12)+1
|
---|
| 84 | . S ^%ZTSCH($$NEWH^%ZTMS2($H,600),%ZTMETSK)=""
|
---|
| 85 | HALT ;Start a new process to continue
|
---|
| 86 | ;
|
---|
| 87 | GTM ;Special entry point for GT.M
|
---|
| 88 | S $ZINTERRUPT="I $$JOBEXAM^ZU($ZPOSITION)"
|
---|
| 89 | G START
|
---|