Allgemeines
Anwendungsgebiet: | Distributed-Lock-Manager (DLM); siehe "Distributed-Lock-Manager (DLM)" |
Makrotyp: | S-Typ, MF-Format 3: C-/D-/L-/M-/E-Form; siehe "S-Typ-Makroaufrufe" |
Makrobeschreibung
Der Makro LKDEQ gibt eine Lock-Anforderung aus der Warteschlange eines existierenden Locks frei. Wird die letzte (einzige) Lock-Anforderung freigegeben, wird der Lock selbst gelöscht. Der Makro LKDEQ kann synchron oder asynchron aufgerufen werden. Der Lock wird über seine Lock-Kurzkennung (LOCKID) identifiziert, die vom LKENQ-Makro zurückgeliefert wird. Diese Lock-Kurzkennung (LOCKID) muss beim Aufruf des Makros LKDEQ mitangegeben werden.
Der Benutzer kann angeben, dass während der Freigabe eines Locks im PW- oder EX-Modus, der Lock-Value-Block verändert wird (LVBCTL=*MOVE).
Makroaufrufformat und Operandenbeschreibung
LKDEQ |
MF=C / D / L / M / E ,ASYNCTL=*SYNCH / *ASYNCH / <var: enum-of _asyncctl_s:1> ,DEQEVTT=*SYNCH / *TUCONTI / *TUEVENT / <var: enum-of _evttype_s:1> ,DEQID=0 / <var: int:4> ,LOCKID=0 / <var: int:4> ,LSBADR=<var: pointer> ,LVBCTL=*IGNORE / *MOVE / <var: enum-of _lvbctl_s:l> ,STATUS=*UNCHANGE / *RESET / *INVALIDATE / <var: enum-of _status_s:1> ,USERPAR=0 / <var: int:4> ,PARAM=<var: pointer> / (reg: pointer>) ,PREFIX=N / p ,MACID=LDD / mac |
In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.
ASYNCTL=
Steuerung einer asynchronen Lock-Anforderung. Kann die Lock-Anforderung sofort aus der Warteschlange freigegeben werden, kann ein Contingency-Prozess oder ein Ereignis-Signal unterdrückt werden.
*SYNCH
Kann die Lock-Anforderung sofort freigegeben werden, wird ein Contingency-Prozess oder ein Ereignis-Signal unterdrückt.
*ASYNCH
Auch wenn die Lock-Anforderung sofort freigegeben werden kann, wird ein Contingency-Prozess oder ein Ereignis-Signal erstellt.
<var: enum-of _asyncctl_s:1>
Name des Feldes mit der asynchronen Lock-Anforderung zum Ausführungszeitpunkt.
DEQEVTT=
Beschreibt in welcher Art Freigabe-Informationen zurückgeliefert werden sollen. Es gibt drei Methoden zur Steuerung. Die angegebene Kurzkennung (Contingency-Kurzkennung oder Ereigniskennung) ist gültig für die aktuelle Freigabe-Anforderung. Andere Freigabe-Anforderungen von anderen Tasks können andere Kurzkennungen angeben.
*SYNCH
Synchrone Lock-Anforderung den Lock aus der Warteschlange freizugeben. Rücksprung aus dem Makro, wenn der Lock freigegeben oder eine Fehlerbedingung erkannt wurde. Die Freigabe-Information wird im Returncode zurückgeliefert.
*TUCONTI
Contingency-Prozess. Dieser Wert muss angegeben werden, um eine Bestätigung der Freigabe-Anforderung während der Contingency-Verarbeitung zu erhalten.
*TUEVENT
Ereignissteuerung (Eventing). Um die Freigabe-Information zu erhalten, kann eine Ereignisvariable benutzt werden. Durch Aufruf des SOLSIG-Makros wird die Freigabe-Information geliefert.
<var:enum-of _evttype_s:1>
Name des Feldes mit dem Typ der Freigabe-Information zum Ausführungszeitpunkt.
DEQID=
Kurzkennung für die Lock-Freigabe. Gibt an, welche Contingency-Kurzkennung oder Ereigniskennung bei asynchronen Lock-Anforderungen die Information erhält, dass der Lock jetzt freigegeben wurde.
<var: int:4>
Voreinstellung ist 0. Die Contingency-Kurzkennung oder Ereigniskennung.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. PREFIX, MACID und PARAM) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form, D-Form oder M-Form des Makroaufrufs kann ein Präfix PREFIX und bei der C-Form oder M-Form zusätzlich eine Macid MACID angegeben werden.
LOCKID=
Lock-Kurzkennung des Locks, der aus der Warteschlange freigegeben werden soll.
<var: int:4>
Voreinstellung ist 0.
Lock-Kurzkennung eines früheren LKENQ-Makro-Aufruf, die aus der Warteschlange freigegeben werden soll.
LSBADR=
Feld mit der Adresse des Lock-Status-Blocks. Der Lock-Status-Block enthält den Lock-Value-Block.
<var: pointer>
Name des Feldes mit der Adresse des Lock-Status-Blocks.
LVBCTL=
Steuerung des Lock-Value-Blocks.
*IGNORE
Der Lock-Value-Block wird nicht benutzt.
*MOVE
Den Lock-Value-Block lesen oder schreiben. Der Lock-Value-Block kann gelesen werden, wenn der Lock zugeteilt wurde. Er kann geschrieben werden, wenn der Lock im PW- oder EX-Modus freigegeben wurde.
<var: enum-of _lvbctl_s:1>
Name des Feldes mit der Steuerung des Lock-Value-Blocks zum Ausführungszeitpunkt.
STATUS=
Gibt an, ob der Lock-Status zurückgesetzt (= validated) wird, wenn ein Lock im PW- oder EX-Modus freigegeben wird.
*UNCHANGE
Während der Freigabe eines Locks im PW- oder EX-Modus wird der Lock-Status nicht verändert.
*RESET
Während der Freigabe eines Locks im PW- oder EX-Modus wird der Lock-Status wieder auf VALID gesetzt.
*INVALIDATE
Während der Freigabe eines Locks im PW- oder EX-Modus wird der Lock-Status auf INVALID gesetzt.
<var: enum-of _status_s:1>
Name des Feldes mit dem Lock-Status-Änderungsparameter zum Ausführungszeitpunkt.
USERPAR=
Die Parameter für asynchrone Mitteilungen, die an den Contingency-Prozess oder die Ereignissteuerung übergeben werden sollen.
<var: int:4>
Voreinstellung ist 0.Benutzerdefinierte Werte.
Rückinformation und Fehleranzeigen
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros LKDEQ wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'00' | X'0000' | Der Makro wurde normal ausgeführt. Der Lock wurde aus der |
X'00' | X'00' | X'0001' | Der Makro wurde normal ausgeführt. Die Freigabe-Anforderung wurde |
X'00' | X'01' | X'1005' | Der Lock-Status-Block ist nicht verfügbar. |
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'01' | X'100C' | Die Angabe im Operanden LOCKID ist ungültig. |
X'00' | X'01' | X'1006' | Der Typ aus DEQID ist nicht derselbe wie in DEQEVTT vereinbart. |
X'00' | X'01' | X'10FF' | Es wurde ein falscher Parameter angegeben, der keinen spezifischen |
X'00' | X'20' | X'2001' | Es trat ein interner Fehler auf. |
X'00' | X'20' | X'2003' | Es trat ein interner Fehler im Zusammenhang mit dem Ressourcen- |
X'00' | X'20' | X'2004' | Es trat ein interner Fehler im Zusammenhang mit Zeitlimitüberschreitung |
X'00' | X'20' | X'2005' | Es trat ein interner Fehler im Zusammenhang mit der Lock-Anforderung |
X'00' | X'20' | X'2006' | Es trat ein interner Fehler im Zusammenhang mit XCS auf. |
X'00' | X'40' | X'4003' | Die vorherige Lock-Anforderung ist noch nicht beendet. |
X'00' | X'82' | X'8004' | Der Lock wurde bereits freigegeben. |
Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.