REQUEST=DETACH allows you to free one or more memory objects.
The requirements for the caller are:
Environmental factor | Requirement |
---|---|
Minimum authorization: | Problem state and PSW key 8-15. The caller must be running in supervisor state or with PSW key 0-7 to use the following parameters:
|
Dispatchable unit mode: | Task or SRB |
Cross memory mode: | Any PASN, any HASN, any SASN Note: Note that problem
state caller running in PSW key 8-15 can use DETACH only when
the primary address space is the home address space.
|
AMODE: | 31- or 64-bit |
ASC mode: | Primary or access register (AR) |
Interrupt status: | Enabled for I/O and external interrupts |
Locks: | A local lock may be held, subject to the following
limitation: When a local lock is held for a request for non-shared memory objects, the lock must be for the address space specified (or defaulted) by the input ALETVALUE. |
Control parameters: | Control parameters must be in the primary address space and can reside both below and above the bar. |
None
This macro supports multiple versions. Some keywords are unique to certain versions. See PLISTVER parameter description.
Before issuing the IARV64 macro, the caller does not have to place any information into any register unless using it in register notation for a particular parameter, or using it as a base register.
Some callers depend on register contents remaining the same before and after issuing a service. If the system changes the contents of registers on which the caller depends, the caller must save them before issuing the service, and restore them after the system returns control.
None
The REQUEST=DETACH option of the IARV64 macro is written as follows:
Syntax | Description |
---|---|
name | name: symbol. Begin name in column 1. |
␢ | One or more blanks must precede IARV64. |
IARV64 | |
␢ | One or more blanks must follow IARV64. |
REQUEST=DETACH | |
,MATCH=SINGLE | Default: MATCH=SINGLE |
,MATCH=MOTOKEN | |
,MATCH=USERTOKEN | |
,MEMOBJSTART=memobjstart | memobjstart: RS-type address or address in register (2) - (12). |
,MOTKN=motkn | motkn: RS-type address or address in register (2) – (12). |
,USERTKN=usertkn | usertkn: RS-type address or address in register (2) - (12). |
,USERTKN=NO_USERTKN | Default: USERTKN=NO_USERTKN |
,MOTKNCREATOR=USER | Default: MOTKNCREATOR=USER |
,MOTKNCREATOR=SYSTEM | |
,AFFINITY=LOCAL | Default: AFFINITY=LOCAL |
,AFFINITY=SYSTEM | |
,OWNER=YES | Default: OWNER=YES |
,OWNER=NO | |
,TTOKEN=ttoken | ttoken: RS-type address or address in register (2) - (12). |
,TTOKEN=NO_TTOKEN | Default: TTOKEN=NO_TTOKEN |
,V64COMMON=NO | Default: V64COMMON=NO |
,V64COMMON=YES | |
,ALETVALUE=aletvalue | aletvalue: RS-type address or address in register (2) - (12). |
,ALETVALUE=0 | Default: ALETVALUE=0 |
,COND=NO | Default: COND=NO |
,COND=YES | |
,RETCODE=retcode | retcode: RS-type address or register (2) - (12). |
,RSNCODE=rsncode | rsncode: RS-type address or register (2) - (12). |
,PLISTVER=IMPLIED_VERSION | Default: PLISTVER=IMPLIED_VERSION |
,PLISTVER=MAX | |
,PLISTVER=0, 1, 2, 3 or 4 | |
,MF=S | Default: MF=S |
,MF=(L,list addr) | list addr: RS-type address or register (1) - (12). |
,MF=(L,list addr,attr) | |
,MF=(L,list addr,0D) | |
,MF=(E,list addr) | |
,MF=(E,list addr,COMPLETE) |
|
The parameters are explained as follows:
A memory object can be affected by DETACH when MATCH=SINGLE is specified without MOTKN/USERTKN. Other invocations of DETACH will affect nonshared memory objects only when a matching user token is passed.
A shared memory object can be affected by DETACH only when a matching user token is passed.
When DETACH MATCH=USERTOKEN AFFINITY=LOCAL is specified and the input user token matches the usertoken provided for a given memory object created through GETSTOR MOTKN, that memory object is freed. If the memory object was created through GETSHARED and the input user token represents current shared interest by the address space, then that interest will be removed. The same two observations as in the prior list apply.
When DETACH MATCH=USERTOKEN AFFINITY=SYSTEM is specified, only shared memory objects are affected. When the input user token matches the system interest, the system interest will be removed. If there is no remaining local interest, then the shared memory object is freed.
All I/O into each memory object specified must be complete before the DETACH is requested. If the DETACH service finds a PAGEFIXed page in the memory object, the memory object will not be freed, but any prior pages will have indeterminate data and the caller will be abnormally ended.
For nonshared memory objects, all memory objects associated with this memory object token are freed unless it is a problem state program with PSW key 8-15 trying to free a memory object created with CONTROL=AUTH.
For shared memory objects, when AFFINITY=LOCAL is given, the shared interest in memory objects associated with this memory object token is to be removed (for the ALET specified through ALETVALUE). If a given shared memory object no longer has outstanding shared interest then it will be freed.
For shared memory objects, when AFFINITY=SYSTEM is given, the system interest in memory objects associated with this memory object token is to be freed. If a specified shared memory object no longer has outstanding shared interest then it will be freed.
If the system encounters an error in processing a qualifying memory object, for example, an unexpected pagefixed page, then the processing ends. The system does not process that page or any further pages or memory objects and abnormally ends the caller.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
Each shared memory object can be associated with multiple memory object tokens. For AFFINITY=LOCAL, the shared interest in a shared memory object associated with this memory object token is to be removed for the address space. For AFFINITY=SYSTEM, the shared interest created by GETSHARED is to be removed or the 64-bit common memory object is to be freed. For either specification of AFFINITY, when a given shared memory object no longer has outstanding shared interest, it is freed.
When the memory object is not associated with the input token value, it is not processed.
To code: Specify the RS-type address, or address in register (2)-(12), of a doubleword field, or specify a literal decimal value.
The default can be used only for memory objects created by GETSTOR. When the memory object is created by GETSHARED, it is necessary to specify the memory object token to uniquely identify which shared interest is to be freed.
To code: Specify the RS-type address, or address in register (2)-(12), of a doubleword field, or specify a literal decimal value.
The default is MOTKNCREATOR=USER.
Shared memory objects for which an appropriate SHAREMEMOBJ has been done by the address space defined by the input ALETVALUE will also by affected by AFFINITY=LOCAL.
64-Bit Common memory objects are not affected by AFFINITY=LOCAL.
AFFINITY=SYSTEM can be used only by callers running in supervisor state of with PSW key 0–7.
If TTOKEN is not specified, the task issuing the DETACH request must be the owner of the memory object.
The task identified by the TTOKEN must be in the address space specified or defaulted by the ALETVALUE keyword.
When the TTOKEN parameter is used by problem state programs with PSW key 8-15, the target task must represent the calling task OR the jobstep task for the calling task OR the mother task. The mother task may not be given however when the calling task is itself a jobstep task.
If the TTOKEN parameter is not specified, and the caller is a TCB, the currently dispatched task must be the owner of the memory object. When OWNER=YES is specified by an SRB, the caller will be abnormally ended if the TTOKEN value is not supplied. The default is NO_TTOKEN.
To code: Specify the RS-type address, or address in register (2)-(12), of a 16-character field.
The only supported values are 0 (primary) and 2 (home). The ALETVALUE parameter can be used only by programs running in supervisor state or with PSW key 0-7. The default is 0.
To code: Specify the RS-type address, or address in register (2)-(12), of a fullword field, or specify a literal decimal value.
To code: Specify the RS-type address of a fullword field, or register (2)-(12) or register (15).
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
If you can tolerate the size change, IBM® recommends that you always specify PLISTVER=MAX on the list form of the macro. Specifying MAX ensures that the list-form parameter list is always long enough to hold all the parameters you might specify on the execute form, when both are assembled with the same level of the system. In this way, MAX ensures that the parameter list does not overwrite nearby storage.
Use MF=S to specify the standard form of the macro, which builds an inline parameter list and generates the macro invocation to transfer control to the service. MF=S is the default.
Use MF=L to specify the list form of the macro. Use the list form together with the execute form of the macro for applications that require reentrant code. The list form defines an area of storage that the execute form uses to store the parameters. Only the PLISTVER parameter may be coded with the list form of the macro.
Use MF=E to specify the execute form of the macro. Use the execute form together with the list form of the macro for applications that require reentrant code. The execute form of the macro stores the parameters into the storage area defined by the list form, and generates the macro invocation to transfer control to the service.