Request table position value is not preserved by ssu_$add_request_table when adding a new request table to an ssu_ subsystem.
Therefore, subsequent ssu_$add_request_table calls cannot compare the requested table position with position specified for each existing request table.
To correct this deficiency, the version of the structure in ssu_request_tables_list.incl.pl1 must be incremented to version 2 so the given table position can be preserved. It will occupy storage space formerly defined as a .pad element in the version 1 structure.
Recommend changes to ssu_request_tables_list structure are shown below.
cpa [lpn ssu_request_tables_list.ip] ==
A1 /* BEGIN INCLUDE FILE ... ssu_request_tables_list.incl.pl1 */
Changed by B to:
B1 /* START OF: ssu_request_tables_list.incl.pl1 * * * * * * * * * * * * * * * * * * * */
B2
A4 /* The list of request tables in use by a subsystem invocation */
Changed by B to:
B5 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
B6 /* */
B7 /* The list of request tables in use by a subsystem invocation. The caller of */
B8 /* ssu_$add_request_table declares a request table by name as a fixed bin external static */
B9 /* variable. For example: */
B10 /* */
B11 /* dcl azm_request_table_$azm_request_table_ fixed bin external static; */
B12 /* */
B13 /* The request_tables_list.table_ptr points to that variable. This permits the caller to obtain */
B14 /* pointers to the current request table(s) without knowing their internal format. */
B15 /* */
B16 /* Existing callers are encouraged to upgrade their calls to ssu_$list_request_tables to request */
B17 /* the REQUEST_TABLES_LIST_VERSION_2 structure, which is shown below. */
B18 /* */
B19 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
A9 3 version fixed binary, /* version of this structure */
A10 3 n_tables fixed binary, /* # of request tables in the list */
A11 2 tables (request_tables_list_n_tables refer (request_tables_list.n_tables)),
A12 3 table_ptr pointer, /* -> this request table */
A13 3 flags,
A14 4 table_valid bit (1) unaligned, /* "1"b => this request table is valid */
A15 4 pad bit (35) unaligned,
A16 3 pad bit (36);
A17
A18 dcl rtl_ptr pointer;
A19
A20 dcl request_tables_list_n_tables fixed binary; /* for allocating the above structure */
Changed by B to:
B24 3 version fixed binary, /* version of this structure */
B25 3 n_tables fixed binary, /* # of request tables in the list */
B26 2 tables (request_tables_list_n_tables refer (request_tables_list.n_tables)),
B27 3 table_ptr pointer, /* -> this request table */
B28 3 flags,
B29 4 table_valid bit (1) unaligned, /* "1"b => this request table is valid */
B30 4 pad bit (35) unaligned,
B31 3 table_position fixed binary; /* Position of this request table related to the others. */
B32 /* Version 1 of this structure declares this element */
B33 /* as: pad bit(36) aligned. */
B34 dcl rtl_ptr pointer;
B35
B36 dcl request_tables_list_n_tables fixed binary; /* for allocating the above structure */
A23
A24 /* END INCLUDE FILE ... ssu_request_tables_list.incl.pl1 */
Changed by B to:
B39 dcl REQUEST_TABLES_LIST_VERSION_2 fixed binary static options (constant) initial (2);
B40
B41 /* END OF: ssu_request_tables_list.incl.pl1 * * * * * * * * * * * * * * * * * * * */
Comparison finished: 4 differences, 49 lines.
This defect was corrected by MCR10152b in ssu_request_mgr_.pl1.