cANCLCK ;Functies ivm locks van jobs; cANCLCK ; G YZ ; LCKGEG(PID,VNR,INI) ; Gegevens ivm een lock ophalen ; PID = Process ID ; VNR = volgnummer van de lock N NSPACE,FREF,FNAAM,COUNT,GREF,Q S $ZT="TRAP^cAN000" S NSPACE=$ZU(67,6,PID) I '$L($G(INI)) S INI=$$INI^cANCJOB(PID) I INI="z" G LCKGEGA ; KU-08.12.03 S FREF=$P($G(@("^|"""_NSPACE_"""|cLOG(boot,""Q"",""menu_gref"")")),"(") S Q=$G(^("q")) I '$L(Q) S Q=$P($G(@("^|"""_NSPACE_"""|cLOG(boot,""Q"",NSPACE)")),D,2) S FNAAM=$G(@("^|"""_NSPACE_"""|"_Q_"BA(99,1)")) LCKGEGA I '$L($G(VNR)) G LCKGEGZ S COUNT=$P(LOCKS(VNR),"~",5) ZN "%SYS" D GetEntry^LOCKTAB(VNR) ZN SPACE S GREF=$P(REF,"[")_$P(REF,"]",2) LCKGEGZ Q INI_D_PID_D_$G(VNR)_D_$G(FNAAM)_D_$G(COUNT)_D_$G(GREF) ; LOCKJ(PID,BOUW,INI,SWL) ; ; PID = Process ID ; indien niet meegegeven wordt de volledig locktable opgevraagd ; BOUW= switch die aangeeft of de global opnieuw moet worden opgebouwd ; speelt enkel maar een rol als PID ingevuld wordt ; SWL=1 : komt vanuit ^cANLOCKC K LOCKS N VNR,AANT,STRING,i,SPACE,TEMPGLO,GE,pid,%v N LockTime,context,StartOwner,INDEX,SL,FreeSpace,LockData S $ZT="TRAP^cAN000" S INI=$G(INI),TEMPGLO="LOCKS",SPACE=$ZU(5),SL=24 S LockTime=$H,context="",StartOwner=0,INDEX=SL ZN "%SYS" D GATHER^LOCKTAB ZN SPACE ; indien de locktable van 1 PID opgevraagd wordt I $G(PID) S GE="^TEMP(boot,$J,""JOBS"",INI_"" ""_PID,""LOCKS"",VNR)" I $G(BOUW) K ^TEMP(boot,$J,"JOBS",INI_" "_PID,"LOCKS") ; indien volledige locktable opgevraagd wordt of vanuit ^cANLOCKC I '$G(PID)!$G(SWL) S GE="^TEMP(boot,$J,""LOCKS"",INI_"" ""_pid_"" ""_VNR)",BOUW=1 K ^TEMP(boot,$J,"LOCKS") LOCKJA D CVER^cQ13 I $g(%v(5)) G LOCKJB ; indien Caché 5 ; Caché 4* S VNR=0,AANT=0 F S VNR=$O(LOCKS(VNR)) Q:VNR="" D . S pid=$P(LOCKS(VNR),"~",2) . I $G(PID),pid'=PID Q . S AANT=AANT+1 . S STRING=$$LCKGEG(pid,VNR,INI) . ; S INI=$P(STRING,D) . I $G(BOUW) S @GE=$P(STRING,D,+$G(PID)'=0*4+1,6) G LOCKJZ LOCKJB ; Caché 5 S AANT=0 n BYTAVAIL,rc,prev,info,Owners,nOwner,prev,rc,data,REF S prev=context LOCKJC S rc=$s(StartOwner:1,1:$$LIST^%LM(.BYTAVAIL,.LockData,.context,1,0,1)) ; one entry with waiters I +rc=0,prev="" G LOCKJZ ; empty I +rc=0 s context="" G LOCKJC F D I +$$LIST^%LM(.BYTAVAIL,.LockData,.context,1,0,1)=0 s context="" q . S data=$LI(LockData,1) . S StartOwner=$g(StartOwner,1) I StartOwner=0 S StartOwner=1 . S VNR=$LI(data,1),info=$LI(data,2) . S REF=$TR($LI(info,1),D,"/"),Owners=$LI(info,2) . S nOwner=$LL(Owners) . I 'nOwner q . F i=1:1:nOwner d .. s pid=$s(($zversion(1)=1):$ZH(""_$LIST($LIST(Owners,i),1)),1:$LIST($LIST(Owners,i),1)) .. I $g(PID),pid'=PID q .. S AANT=AANT+1 .. S STRING=$$LCKGEG(pid,,INI) ; ,INI=$P(STRING,D) .. S $P(STRING,D,3)=VNR .. S $P(STRING,D,5)=$LIST($LIST(Owners,StartOwner),2)+$LIST($LIST(Owners,StartOwner),3) .. S $P(STRING,D,6)=$P(REF,"[")_$P(REF,"]",2) .. S $P(STRING,D,7)=$TR($P($P(REF,"[",2),"]"),D,"/") .. I $G(BOUW) S @GE=$P(STRING,D,(+$G(PID)'=0&'$G(SWL))*4+1,99) LOCKJZ Q AANT ; LOCKT ; Opbouwen van lock-table S K=$$LOCKJ() LOCKTZ Q ; RLOCKE(VNR,PID) ; Restore lock-entry ; VNR = volgnummer van de lock ; PID = Process ID N DUMMY,SPACE,TEMPGLO,%v S $ZT="TRAP^cAN000" S TEMPGLO="LOCKS",SPACE=$ZU(5) ZN "%SYS" D CVER^cQ13 I $G(%v(5)) S K=$$DELETEONE^%LM(VNR) G RLOCKEA S K=$$DELETE^LOCKTAB(VNR) RLOCKEA ZN SPACE ; indien voor één PID I $G(PID) S DUMMY=$$LOCKJ(PID,1) G RLOCKEZ ; indien vanuit algemeen overzicht D LOCKT RLOCKEZ Q ; RLOCKT(VNR) ; Restore lock-entry vanuit de lock-table ; VNR = volgnummer van de lock D RLOCKE($G(VNR)) RLOCKTZ Q ; YZ Q ; ZZ ; 19.03.07 - 15 u 31 * V8.08