1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
PACKET umgebungswechselmanagerDEFINES umgebungswechsel:LET ack=0,nak=1,
manager=" manager";PROC umgebungswechsel(KNOTEN CONST k,TEXT CONST zieltask,
INT VAR fstatus):INT VAR kanal;pruefezieltask;IF fstatus=ackTHEN gibkanalfrei
;sendedatenbankkennungundkanalanmanager;IF fstatus=ackTHEN
sendesystembaumundaktuellenknotenansohntaskFI ;belegekanalwiederFI .
pruefezieltask:disablestop;TASK VAR zielmanager:=/(zieltask+manager),
stellvertreter;IF iserrorTHEN fstatus:=nakELSE fstatus:=ackFI ;clearerror.
sendedatenbankkennungundkanalanmanager:DATASPACE VAR dsvar:=nilspace;call(
zielmanager,kanal,dsvar,stellvertreter,fstatus);forget(dsvar).
sendesystembaumundaktuellenknotenansohntask:holesystembaumundanfangsknoten;
call(stellvertreter,anfangsknoten,systembaumds,fstatus);forget(systembaumds).
gibkanalfrei:kanal:=channel(myself);break(quiet).belegekanalwieder:continue(
kanal).holesystembaumundanfangsknoten:DATASPACE VAR systembaumds:=systembaum;
INT CONST anfangsknoten:=nummer(k).END PROC umgebungswechsel;PROC call(TASK
CONST zielmanager,INT CONST kanal,DATASPACE VAR ds,TASK VAR stellvertreter,
INT VAR fstatus):call(zielmanager,kanal,ds,fstatus);IF fstatus=ackTHEN BOUND
TASK VAR t:=ds;stellvertreter:=tFI ;forget(ds);break(quiet);END PROC call;
END PACKET umgebungswechselmanager
|