COMPILATION LISTING OF SEGMENT tm_abandon Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/06/86 1259.8 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(86-02-27,Pierret), approve(86-02-27,MCR7340), 12* audit(86-04-28,Newcomb), install(86-05-06,MR12.0-1054): 13* Changed to execute file_mangaer_$post_transaction before unlocking locks. 14* END HISTORY COMMENTS */ 15 16 17 /* format: style4,ifthenstmt,^indproc,^indcomtxt */ 18 /*---------------*/ 19 20 tm_abandon: proc (A_txn_id, A_code); 21 22 /* DESCRIPTION: 23* 24* The entry point $tm_abandon abandons the user's current transaction by 25* turning on its abandoned_sw and giving the user process a new TDT slot 26* to work with. 27* 28* The entry point $tm_kill kills a user's own transaction by deleting it 29* without a rollback. This is done immediately if the transaction belongs to 30* the user's current process and has not already been abandoned, otherwise 31* a message is sent to the daemon to perform the kill. 32* 33*/* HISTORY: 34*Written by Steve Herbst 10/12/82 35*Modified: 36*12/10/82 by Steve Herbst: Made to call lock_manager_$(adopt abandon). 37*01/13/83 by Steve Herbst: Added $tm_kill and made $tm_abandon work on the 38* user's own transaction. 39*02/22/83 by Steve Herbst: Changed to not call lock_manager_$abandon. 40*03/14/83 by Steve Herbst: Fixed argument validation. 41*04/29/83 by Steve Herbst: Changed to call file_manager_$adopt before 42* calling before_journal_manager_$adopt. 43*05/03/83 by Steve Herbst: Changed $tm_kill to kill immediately if same 44* process and txn not abandoned. 45*05/04/83 by Steve Herbst: Split tm_adopt into tm_abandon (this module) and 46* tm_daemon_adopt for daemon to call. 47*05/11/83 by Steve Herbst: Changed kill to allow killing another user's 48* transaction. 49*05/13/83 by Steve Herbst: Changed to call fm_$abandon. 50*08/23/84 by Steve Herbst: Responded to audit comments. 51*02/07/85 by S. Cox: Added fm$post_transaction call (moved from lm_per_system_) 52*03/05/85 by Steve Herbst: Replaced dm_log_ with dm_misc_util_$log. 53*04/23/85 by Matthew C. Pierret: Switched order of calls to 54* file_manager_$post_transaction and lock_manager_$unlock_all. 55* Having the file_manager_ call first allows it to operate under the 56* locks acquired by the transaction. 57**/ 58 59 /* DECLARATIONS */ 60 61 /* Parameters */ 62 63 dcl A_txn_id bit (36) aligned parameter; 64 dcl A_code fixed bin (35) parameter; 65 66 67 /* Constants */ 68 69 /* Based */ 70 71 /* Static */ 72 73 /* Automatic */ 74 75 dcl txn_id bit (36) aligned; 76 dcl txn_index fixed bin; 77 78 /* External */ 79 80 dcl dm_data_$current_txn_id bit (36) aligned external; 81 dcl dm_data_$current_txn_index fixed bin external; 82 dcl dm_data_$my_process_id bit (36) aligned external; 83 dcl dm_data_$my_tdt_index fixed bin external; 84 dcl dm_data_$suspended_txn_index fixed bin external; 85 dcl dm_data_$tm_tdt_ptr ptr external; 86 dcl dm_error_$invalid_current_txn fixed bin (35) ext; 87 dcl dm_error_$no_current_transaction fixed bin (35) ext; 88 dcl dm_error_$not_own_transaction fixed bin (35) external; 89 dcl dm_error_$tdt_full fixed bin (35) ext; 90 dcl dm_error_$transaction_not_current fixed bin (35) ext; 91 dcl dm_error_$transaction_suspended fixed bin (35) ext; 92 93 /* Entries */ 94 95 dcl before_journal_manager_$write_aborted_mark entry (bit (36) aligned, fixed bin, fixed bin (35)); 96 dcl dm_misc_util_$log entry options (variable); 97 dcl dm_send_request_$adjust_txn entry (bit (36) aligned, fixed bin, fixed bin (35)); 98 dcl file_manager_$abandon entry (bit (36) aligned, fixed bin, fixed bin (35)); 99 dcl file_manager_$post_transaction entry (); 100 dcl get_process_id_ entry returns (bit (36) aligned); 101 dcl lock_manager_$unlock_all entry; 102 dcl tm_get_txn_index entry (bit (36) aligned, fixed bin (35)) returns (fixed bin); 103 104 /* Builtins */ 105 106 dcl (addr, before, fixed, stac, unspec) builtin; 107 108 /* Conditions */ 109 110 dcl cleanup condition; 111 112 /* END OF DECLARATIONS */ 113 114 /* When a process abandons its own transaction, the transaction goes into an abandoned state (abandoned_sw = "1"b). 115* When it is in this state, only the Daemon can touch it. The owner process gets a new TDT entry and 116* can begin transactions */ 117 118 A_code = 0; 119 120 tm_tdt_ptr = dm_data_$tm_tdt_ptr; 121 122 if dm_data_$current_txn_index = 0 then 123 if dm_data_$suspended_txn_index ^= 0 then call ERROR_RETURN (dm_error_$transaction_suspended); 124 else call ERROR_RETURN (dm_error_$no_current_transaction); 125 126 txn_index = dm_data_$current_txn_index; 127 128 if txn_index < 1 | txn_index > tm_tdt.entry_count then 129 call ERROR_RETURN (dm_error_$invalid_current_txn); 130 131 if A_txn_id = "0"b | A_txn_id = tm_tdt.txn_id (txn_index) then 132 txn_id = tm_tdt.txn_id (txn_index); 133 else call ERROR_RETURN (dm_error_$transaction_not_current); 134 135 if tm_tdt.process_id (txn_index) ^= dm_data_$my_process_id then 136 call ERROR_RETURN (dm_error_$not_own_transaction); 137 138 tm_tdt.abandoned_sw (txn_index) = "1"b; 139 140 call file_manager_$abandon (txn_id, txn_index, A_code); 141 if A_code ^= 0 then call ERROR_RETURN (A_code); 142 143 call GET_NEW_TDT_SLOT; 144 145 call dm_send_request_$adjust_txn (txn_id, txn_index, 0); 146 147 call dm_misc_util_$log (INFORM_SV, "User abandoned transaction ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d", 148 txn_index, fixed (tm_tdt.txn_id (txn_index)), tm_tdt.process_id (txn_index), 149 PERSON_ID (txn_index), tm_tdt.state (txn_index)); 150 151 RETURN: 152 return; 153 154 tm_kill: entry (A_txn_id, A_code); 155 156 /* Killing a transaction causes it to disappear from the TDT even if it cannot be aborted or otherwise completed. 157* The transaction to be killed must be the user's own, either in the current process or in a previous process. 158* If the transaction belongs to the user's current process and has not already been abandoned, it is killed 159* immediately. Otherwise, the transaction's kill_sw is turned on and a message is sent to the daemon to perform 160* the actual kill. In the latter case, the user's process immediately gets a new TDT entry to play with. */ 161 162 A_code = 0; 163 164 tm_tdt_ptr = dm_data_$tm_tdt_ptr; 165 166 if A_txn_id = "0"b then do; 167 txn_index = dm_data_$current_txn_index; 168 if txn_index = 0 then call ERROR_RETURN (dm_error_$no_current_transaction); 169 else if txn_index < 1 | txn_index > tm_tdt.entry_count then 170 call ERROR_RETURN (dm_error_$invalid_current_txn); 171 txn_id = tm_tdt.txn_id (txn_index); 172 end; 173 174 else do; 175 txn_id = A_txn_id; 176 txn_index = tm_get_txn_index (txn_id, A_code); 177 if A_code ^= 0 then call ERROR_RETURN (A_code); 178 end; 179 180 if tm_tdt.abandoned_sw (txn_index) | /* previously abandoned; daemon must kill */ 181 tm_tdt.process_id (txn_index) ^= dm_data_$my_process_id then do; /* same for old process's txn */ 182 183 tm_tdt.abandoned_sw (txn_index) = "1"b; /* abandon for sure */ 184 185 if get_process_id_ () = tm_tdt.process_id (txn_index) then call GET_NEW_TDT_SLOT; 186 187 tm_tdt.kill_sw (txn_index) = "1"b; /* mark the old slot killed in any case */ 188 189 call dm_send_request_$adjust_txn (txn_id, txn_index, 0); 190 191 call dm_misc_util_$log (INFORM_SV, 192 "User requested kill, transaction ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d", 193 txn_index, fixed (tm_tdt.txn_id (txn_index)), tm_tdt.process_id (txn_index), 194 PERSON_ID (txn_index), tm_tdt.state (txn_index)); 195 196 return; 197 end; 198 199 /* Kill the transaction immediately */ 200 201 if OK_TO_WRITE_MARK ((tm_tdt.state (txn_index))) then 202 call before_journal_manager_$write_aborted_mark (txn_id, txn_index, 0); 203 204 call file_manager_$post_transaction; 205 206 call lock_manager_$unlock_all; 207 208 unspec (tm_tdt.transaction (txn_index)) = "0"b; 209 210 call file_manager_$abandon (txn_id, txn_index, 0); 211 212 dm_data_$current_txn_id = "0"b; 213 dm_data_$current_txn_index = 0; 214 215 call dm_misc_util_$log (INFORM_SV, "User killed transaction ^d, pid = ^w, owner = ^a", 216 txn_index, tm_tdt.process_id (txn_index), PERSON_ID (txn_index)); 217 218 return; 219 220 ERROR_RETURN: proc (P_code); 221 222 dcl P_code fixed bin (35); 223 224 A_code = P_code; 225 go to RETURN; 226 227 end ERROR_RETURN; 228 229 GET_NEW_TDT_SLOT: proc; 230 231 dcl tdt_index fixed bin; 232 233 do tdt_index = 1 to tm_tdt.entry_count; 234 235 if stac (addr (tm_tdt.process_id (tdt_index)), dm_data_$my_process_id) then do; /* a free one */ 236 237 tm_tdt.owner_name (tdt_index) = tm_tdt.owner_name (txn_index); 238 tm_tdt.event_channel (tdt_index) = tm_tdt.event_channel (txn_index); 239 240 on cleanup call SET_DM_DATA; 241 242 call SET_DM_DATA; 243 244 return; 245 end; 246 end; 247 248 call ERROR_RETURN (dm_error_$tdt_full); 249 250 251 SET_DM_DATA: proc; 252 253 dm_data_$my_tdt_index = tdt_index; 254 dm_data_$current_txn_index = 0; 255 dm_data_$current_txn_id = "0"b; 256 257 end SET_DM_DATA; 258 259 end GET_NEW_TDT_SLOT; 260 261 OK_TO_WRITE_MARK: proc (P_state) returns (bit (1)); 262 263 dcl (P_state, state) fixed bin; 264 265 state = P_state; 266 267 if state > TM_ERROR_INCREMENT then state = state - TM_ERROR_INCREMENT; 268 269 if state ^= TM_ABORT_UNLOCKING_STATE /* don't write a second abort mark if possible */ 270 & state ^= TM_ABORT_METERING_STATE 271 272 & state ^= TM_COMMIT_UNLOCKING_STATE /* also don't abort if commit mark has been written */ 273 & state ^= TM_COMMIT_METERING_STATE then return ("1"b); 274 275 else return ("0"b); 276 277 end OK_TO_WRITE_MARK; 278 279 PERSON_ID: proc (P_txn_index) returns (char (32)); 280 281 dcl P_txn_index fixed bin; 282 dcl name char (32); 283 284 name = tm_tdt.owner_name (P_txn_index); 285 return (before (name, ".")); 286 287 end PERSON_ID; 288 1 1 /* START OF: dm_tm_tdt.incl.pl1 */ 1 2 1 3 /* Transaction Definition Table for transaction_manager_ */ 1 4 /* This structure is used to reference the TDT. The process_id field for the 1 5* i'th TDT entry, for example, is usually referenced as tm_tdt.process_id (i). 1 6* A TDT entry is in use by a process when its process_id field is nonzero. 1 7* An entry is reserved by using the stacq builtin to set process_id, if and 1 8* only if it is already zero. The entry is being used for a transaction when 1 9* tm_tdt.txn_id (i) is nonzero. The possible values of tm_tdt.state (i) are 1 10* listed in dm_tm_states.incl.pl1. If state = 0, no operation has been 1 11* performed yet on the transaction. */ 1 12 1 13 1 14 /* HISTORY: 1 15*Designed by Matt Pierret, 01/26/82. 1 16*Coded by Steve Herbst, 07/27/82. 1 17*Modified: 1 18*08/05/82 by Steve Herbst: Added tm_tdt.operation and padded last_uid to full word. 1 19*08/05/82 by Steve Herbst: Changed creator_process_id to bit (36). 1 20*08/16/82 by Steve Herbst: Added contents of dm_tm_tdt_entry.incl.pl1. 1 21*09/09/82 by Steve Herbst: Removed in_use flag from TDT entry and rearranged fields. 1 22*09/20/82 by Steve Herbst: Removed tm_tdt.operation. 1 23*11/01/82 by Steve Herbst: Added event_channel and error_sw to tm_tdt_entry. 1 24*11/05/82 by Steve Herbst: Added suspended_sw and error_code to tm_tdt_entry. 1 25*11/11/82 by Steve Herbst: Deleted tm_tdt_entry.alloc_complete. 1 26*11/23/82 by Steve Herbst: Compacted, changed some numbers to unsigned. 1 27*12/14/82 by Steve Herbst: Added tm_tdt_entry.daemon_error_sw. 1 28*01/11/83 by Steve Herbst: Added owner_name, abandoned_sw & kill_sw to tm_tdt_entry. 1 29*01/24/83 by Steve Herbst: Replaced daemon_error_sw with daemon_adjust_count. 1 30*01/25/83 by Steve Herbst: Moved abandoned_sw from transaction portion to entry header portion. 1 31*05/13/83 by Steve Herbst: Version 3, changed all fixed bin (18) unal uns numbers to fixed bin (17) unaligned. 1 32*05/26/83 by Steve Herbst: Added rollback_count and checkpoint_id. 1 33**/ 1 34 1 35 dcl tm_tdt_ptr ptr; 1 36 dcl tdt_max_count fixed bin; 1 37 1 38 dcl TM_TDT_VERSION_3 char (8) int static options (constant) init ("TM-TDT 3"); 1 39 1 40 1 41 dcl 1 tm_tdt aligned based (tm_tdt_ptr), 1 42 2 version char (8), /* = "TM-TDT 3" */ 1 43 2 lock fixed bin (71), /* (currently not used) */ 1 44 2 last_uid bit (27) aligned, /* last transaction uid assigned */ 1 45 2 flags, 1 46 3 no_begins bit (1) unaligned, /* ON => only priv process can begin transaction */ 1 47 3 mbz1 bit (35) unaligned, 1 48 2 entry_count fixed bin, /* number of slots allocated */ 1 49 2 mbz2 fixed bin, /* for even word boundary */ 1 50 2 entry (tdt_max_count refer (tm_tdt.entry_count)) 1 51 like tm_tdt_entry; 1 52 1 53 1 54 1 55 /* TDT entries: */ 1 56 1 57 dcl tm_tdt_entry_ptr ptr; 1 58 1 59 dcl 1 tm_tdt_entry aligned based (tm_tdt_entry_ptr), 1 60 2 event_channel fixed bin (71), /* for communication with the process */ 1 61 2 process_id bit (36) aligned, /* process for which this entry is reserved */ 1 62 2 owner_name char (32), /* person.project of owner process */ 1 63 2 entry_flags, 1 64 3 abandoned_sw bit (1) unaligned, /* ON => owner has called tm_$abandon on this entry */ 1 65 3 mbz3 bit (35) unaligned, 1 66 2 transaction unaligned, 1 67 3 txn_id bit (36) aligned, /* unique identifier assigned at begin time */ 1 68 3 date_time_created fixed bin (71) aligned, 1 69 3 mode fixed bin (17) unaligned, /* mode specified with transaction begin */ 1 70 3 state fixed bin (17) unaligned, /* state transaction is currently in */ 1 71 3 error_code fixed bin (35) aligned, /* goes along with error_sw and error state */ 1 72 3 checkpoint_id fixed bin (17) unaligned, /* identifier of the current rollback checkpoint */ 1 73 3 rollback_count fixed bin (17) unaligned, /* number of times bjm_$rollback has been called */ 1 74 3 daemon_adjust_count fixed bin (17) unaligned, /* number of times daemon has tried to adjust since user */ 1 75 3 return_idx fixed bin (17) unaligned, /* parent transaction, or zero */ 1 76 3 flags, 1 77 4 dead_process_sw bit (1) unaligned, /* ON => treat process as dead even if it isn't yet */ 1 78 4 suspended_sw bit (1) unaligned, /* ON => suspended by tm_$suspend_txn */ 1 79 4 error_sw bit (1) unaligned, /* ON => state is one of the error states */ 1 80 4 kill_sw bit (1) unaligned, /* ON => being processed by tm_$kill */ 1 81 4 mbz4 bit (29) unaligned, 1 82 3 post_commit_flags, 1 83 4 (fmgr, 1 84 bjmgr, 1 85 ajmgr) bit (1) unaligned, 1 86 3 mbz4 fixed bin; 1 87 1 88 1 89 /* END OF: dm_tm_tdt.incl.pl1 */ 289 290 2 1 /* START OF: dm_tm_states.incl.pl1 */ 2 2 2 3 /* HISTORY: 2 4* 2 5*Designed by Matthew Pierret, 01/26/82. 2 6*Coded by Steve Herbst, 08/05/82. 2 7*Modified: 2 8*09/20/82 by Steve Herbst: States renames for distinct operations. 2 9*10/05/82 by Steve Herbst: Added TM_ABORT_POST_COMMIT_STATE. 2 10*01/14/83 by Steve Herbst: Added TM_ERROR_INCREMENT. 2 11*01/18/83 by Steve Herbst: Added HIGHEST_ABORT_STATE, etc. 2 12*08/23/84 by Steve Herbst: Added OP_NAME... constants. 2 13**/ 2 14 2 15 2 16 /* NOTE: Changing this file necessitates changes tm_cleanup */ 2 17 2 18 dcl (HIGHEST_STATE init (96), 2 19 LOWEST_ABORT_STATE init (21), 2 20 HIGHEST_ABORT_STATE init (30), 2 21 LOWEST_COMMIT_STATE init (31), 2 22 HIGHEST_COMMIT_STATE init (40), 2 23 LOWEST_ROLLBACK_STATE init (41), 2 24 HIGHEST_ROLLBACK_STATE init (50)) fixed bin int static options (constant); 2 25 2 26 dcl TM_ERROR_INCREMENT fixed bin int static options (constant) init (50); 2 27 /* error state = corresponding pre-call state + 50 */ 2 28 2 29 2 30 dcl ( TM_IN_PROGRESS_STATE init (1), 2 31 2 32 TM_BEGIN_STARTING_STATE init (11), 2 33 2 34 TM_ABORT_FLUSHING_TXN_STATE init (21), 2 35 TM_ABORT_FLUSHING_TXN_ERROR init (71), 2 36 TM_ABORT_ROLLING_BACK_STATE init (22), 2 37 TM_ABORT_ROLLING_BACK_ERROR init (72), 2 38 TM_ABORT_FLUSHING_CI_STATE init (23), 2 39 TM_ABORT_FLUSHING_CI_ERROR init (73), 2 40 TM_ABORT_WRITING_MARK_STATE init (24), 2 41 TM_ABORT_WRITING_MARK_ERROR init (74), 2 42 TM_ABORT_UNLOCKING_STATE init (25), 2 43 TM_ABORT_UNLOCKING_ERROR init (75), 2 44 TM_ABORT_METERING_STATE init (26), 2 45 TM_ABORT_METERING_ERROR init (76), 2 46 2 47 TM_COMMIT_FLUSHING_TXN_STATE init (31), 2 48 TM_COMMIT_FLUSHING_TXN_ERROR init (81), 2 49 TM_COMMIT_FLUSHING_CI_STATE init (32), 2 50 TM_COMMIT_FLUSHING_CI_ERROR init (82), 2 51 TM_COMMIT_WRITING_MARK_STATE init (33), 2 52 TM_COMMIT_WRITING_MARK_ERROR init (83), 2 53 TM_COMMIT_POST_COMMIT_STATE init (34), 2 54 TM_COMMIT_POST_COMMIT_ERROR init (84), 2 55 TM_COMMIT_UNLOCKING_STATE init (35), 2 56 TM_COMMIT_UNLOCKING_ERROR init (85), 2 57 TM_COMMIT_METERING_STATE init (36), 2 58 TM_COMMIT_METERING_ERROR init (86), 2 59 2 60 TM_ROLLBACK_FLUSHING_TXN_STATE init (41), 2 61 TM_ROLLBACK_FLUSHING_TXN_ERROR init (91), 2 62 TM_ROLLBACK_ROLLING_BACK_STATE init (42), 2 63 TM_ROLLBACK_ROLLING_BACK_ERROR init (92), 2 64 TM_ROLLBACK_FLUSHING_CI_STATE init (43), 2 65 TM_ROLLBACK_FLUSHING_CI_ERROR init (93), 2 66 TM_ROLLBACK_WRITING_MARK_STATE init (44), 2 67 TM_ROLLBACK_WRITING_MARK_ERROR init (94), 2 68 TM_ROLLBACK_UNLOCKING_STATE init (45), 2 69 TM_ROLLBACK_UNLOCKING_ERROR init (95), 2 70 TM_ROLLBACK_METERING_STATE init (46), 2 71 TM_ROLLBACK_METERING_ERROR init (96)) 2 72 2 73 fixed bin int static options (constant); 2 74 2 75 dcl (OP_NAME_ABORT init ("abort"), 2 76 OP_NAME_COMMIT init ("commit"), 2 77 OP_NAME_ROLLBACK init ("rollback")) char (32) int static options (constant); 2 78 2 79 /* END OF: dm_tm_states.incl.pl1 */ 291 292 3 1 /* BEGIN INCLUDE FILE dm_log_sv_codes.incl.pl1 */ 3 2 3 3 /* format: ^indcom */ 3 4 3 5 /* DESCRIPTION: 3 6* These are the severity codes used by the dms daemon when calling its logger. 3 7* The severity is ranked thusly: 3 8* 3 9* severity log write situation 3 10* -------- --- ----- --------- 3 11* 0 no yes standard output, query, etc. 3 12* 1 yes yes fatal error, terminate dms daemon. 3 13* 2 yes yes nonfatal error. 3 14* 3 yes yes informative message. 3 15* 4 yes no log information only. 3 16**/ 3 17 3 18 /* HISTORY: 3 19* 3 20*Written by M. Pandolf, 10/06/82. 3 21*Modified: 3 22*12/10/84 by R. Michael Tague: Rename and reformat description/history. 3 23*01/13/85 by Lee A. Newcomb: Renamed to dm_log_sv_codes from 3 24* dm_daemon_sv_codes as the severity codes for the DM log are not 3 25* restrained to the DM Daemon's use. 3 26*01/24/85 by Lee A. Newcomb: Fixed to say dm_log_sv_codes.incl.pl1 in the 3 27* BEGIN and END INCLUDE comments, instead of dm_daemon_sv_codes.==. 3 28**/ 3 29 3 30 /* format: style5 */ 3 31 3 32 dcl (PRINT_SV, QUERY_SV) fixed bin internal static 3 33 options (constant) init (0); 3 34 dcl (CRASH_SV, FATAL_SV) fixed bin internal static 3 35 options (constant) init (1); 3 36 dcl ERROR_SV fixed bin internal static 3 37 options (constant) init (2); 3 38 dcl INFORM_SV fixed bin internal static 3 39 options (constant) init (3); 3 40 dcl LOG_SV fixed bin internal static 3 41 options (constant) init (4); 3 42 3 43 /* END INCLUDE FILE dm_log_sv_codes.incl.pl1 */ 293 294 295 296 end tm_abandon; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/06/86 1257.6 tm_abandon.pl1 >spec>install>1054>tm_abandon.pl1 289 1 01/07/85 0900.1 dm_tm_tdt.incl.pl1 >ldd>include>dm_tm_tdt.incl.pl1 291 2 01/07/85 0900.1 dm_tm_states.incl.pl1 >ldd>include>dm_tm_states.incl.pl1 293 3 03/06/85 1031.1 dm_log_sv_codes.incl.pl1 >ldd>include>dm_log_sv_codes.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. A_code parameter fixed bin(35,0) dcl 64 set ref 20 118* 140* 141 141* 154 162* 176* 177 177* 224* A_txn_id parameter bit(36) dcl 63 ref 20 131 131 154 166 175 INFORM_SV 000000 constant fixed bin(17,0) initial dcl 3-38 set ref 147* 191* 215* P_code parameter fixed bin(35,0) dcl 222 ref 220 224 P_state parameter fixed bin(17,0) dcl 263 ref 261 265 P_txn_index parameter fixed bin(17,0) dcl 281 ref 279 284 TM_ABORT_METERING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 269 TM_ABORT_UNLOCKING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 269 TM_COMMIT_METERING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 269 TM_COMMIT_UNLOCKING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 269 TM_ERROR_INCREMENT constant fixed bin(17,0) initial dcl 2-26 ref 267 267 abandoned_sw 23 based bit(1) array level 4 packed unaligned dcl 1-41 set ref 138* 180 183* addr builtin function dcl 106 ref 235 before builtin function dcl 106 ref 285 before_journal_manager_$write_aborted_mark 000040 constant entry external dcl 95 ref 201 cleanup 000000 stack reference condition dcl 110 ref 240 dm_data_$current_txn_id 000010 external static bit(36) dcl 80 set ref 212* 255* dm_data_$current_txn_index 000012 external static fixed bin(17,0) dcl 81 set ref 122 126 167 213* 254* dm_data_$my_process_id 000014 external static bit(36) dcl 82 ref 135 180 235 dm_data_$my_tdt_index 000016 external static fixed bin(17,0) dcl 83 set ref 253* dm_data_$suspended_txn_index 000020 external static fixed bin(17,0) dcl 84 ref 122 dm_data_$tm_tdt_ptr 000022 external static pointer dcl 85 ref 120 164 dm_error_$invalid_current_txn 000024 external static fixed bin(35,0) dcl 86 set ref 128* 169* dm_error_$no_current_transaction 000026 external static fixed bin(35,0) dcl 87 set ref 124* 168* dm_error_$not_own_transaction 000030 external static fixed bin(35,0) dcl 88 set ref 135* dm_error_$tdt_full 000032 external static fixed bin(35,0) dcl 89 set ref 248* dm_error_$transaction_not_current 000034 external static fixed bin(35,0) dcl 90 set ref 133* dm_error_$transaction_suspended 000036 external static fixed bin(35,0) dcl 91 set ref 122* dm_misc_util_$log 000042 constant entry external dcl 96 ref 147 191 215 dm_send_request_$adjust_txn 000044 constant entry external dcl 97 ref 145 189 entry 10 based structure array level 2 dcl 1-41 entry_count 6 based fixed bin(17,0) level 2 dcl 1-41 ref 128 169 233 entry_flags 23 based structure array level 3 dcl 1-41 event_channel 10 based fixed bin(71,0) array level 3 dcl 1-41 set ref 238* 238 file_manager_$abandon 000046 constant entry external dcl 98 ref 140 210 file_manager_$post_transaction 000050 constant entry external dcl 99 ref 204 fixed builtin function dcl 106 ref 147 147 191 191 flags 34 based structure array level 4 packed unaligned dcl 1-41 get_process_id_ 000052 constant entry external dcl 100 ref 185 kill_sw 34(03) based bit(1) array level 5 packed unaligned dcl 1-41 set ref 187* lock_manager_$unlock_all 000054 constant entry external dcl 101 ref 206 name 000122 automatic char(32) unaligned dcl 282 set ref 284* 285 owner_name 13 based char(32) array level 3 dcl 1-41 set ref 237* 237 284 process_id 12 based bit(36) array level 3 dcl 1-41 set ref 135 147* 180 185 191* 215* 235 stac builtin function dcl 106 ref 235 state 30(18) based fixed bin(17,0) array level 4 in structure "tm_tdt" packed unaligned dcl 1-41 in procedure "tm_abandon" set ref 147* 191* 201 state 000112 automatic fixed bin(17,0) dcl 263 in procedure "OK_TO_WRITE_MARK" set ref 265* 267 267* 267 269 269 269 269 tdt_index 000100 automatic fixed bin(17,0) dcl 231 set ref 233* 235 237 238* 253 tm_get_txn_index 000056 constant entry external dcl 102 ref 176 tm_tdt based structure level 1 dcl 1-41 tm_tdt_entry based structure level 1 dcl 1-59 tm_tdt_ptr 000102 automatic pointer dcl 1-35 set ref 120* 128 131 131 135 138 147 147 147 147 164* 169 171 180 180 183 185 187 191 191 191 191 201 208 215 233 235 237 237 238 238 284 transaction 24 based structure array level 3 unaligned dcl 1-41 set ref 208* txn_id 24 based bit(36) array level 4 in structure "tm_tdt" dcl 1-41 in procedure "tm_abandon" set ref 131 131 147 147 171 191 191 txn_id 000100 automatic bit(36) dcl 75 in procedure "tm_abandon" set ref 131* 140* 145* 171* 175* 176* 189* 201* 210* txn_index 000101 automatic fixed bin(17,0) dcl 76 set ref 126* 128 128 131 131 135 138 140* 145* 147* 147 147 147 147* 147* 147 167* 168 169 169 171 176* 180 180 183 185 187 189* 191* 191 191 191 191* 191* 191 201 201* 208 210* 215* 215 215* 215* 237 238 unspec builtin function dcl 106 set ref 208* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CRASH_SV internal static fixed bin(17,0) initial dcl 3-34 ERROR_SV internal static fixed bin(17,0) initial dcl 3-36 FATAL_SV internal static fixed bin(17,0) initial dcl 3-34 HIGHEST_ABORT_STATE internal static fixed bin(17,0) initial dcl 2-18 HIGHEST_COMMIT_STATE internal static fixed bin(17,0) initial dcl 2-18 HIGHEST_ROLLBACK_STATE internal static fixed bin(17,0) initial dcl 2-18 HIGHEST_STATE internal static fixed bin(17,0) initial dcl 2-18 LOG_SV internal static fixed bin(17,0) initial dcl 3-40 LOWEST_ABORT_STATE internal static fixed bin(17,0) initial dcl 2-18 LOWEST_COMMIT_STATE internal static fixed bin(17,0) initial dcl 2-18 LOWEST_ROLLBACK_STATE internal static fixed bin(17,0) initial dcl 2-18 OP_NAME_ABORT internal static char(32) initial unaligned dcl 2-75 OP_NAME_COMMIT internal static char(32) initial unaligned dcl 2-75 OP_NAME_ROLLBACK internal static char(32) initial unaligned dcl 2-75 PRINT_SV internal static fixed bin(17,0) initial dcl 3-32 QUERY_SV internal static fixed bin(17,0) initial dcl 3-32 TM_ABORT_FLUSHING_CI_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_FLUSHING_CI_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_FLUSHING_TXN_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_FLUSHING_TXN_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_METERING_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_ROLLING_BACK_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_ROLLING_BACK_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_UNLOCKING_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_WRITING_MARK_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ABORT_WRITING_MARK_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_BEGIN_STARTING_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_FLUSHING_CI_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_FLUSHING_CI_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_FLUSHING_TXN_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_FLUSHING_TXN_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_METERING_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_POST_COMMIT_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_POST_COMMIT_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_UNLOCKING_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_WRITING_MARK_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_COMMIT_WRITING_MARK_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_IN_PROGRESS_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_FLUSHING_CI_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_FLUSHING_CI_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_FLUSHING_TXN_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_FLUSHING_TXN_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_METERING_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_METERING_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_ROLLING_BACK_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_ROLLING_BACK_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_UNLOCKING_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_UNLOCKING_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_WRITING_MARK_ERROR internal static fixed bin(17,0) initial dcl 2-30 TM_ROLLBACK_WRITING_MARK_STATE internal static fixed bin(17,0) initial dcl 2-30 TM_TDT_VERSION_3 internal static char(8) initial unaligned dcl 1-38 tdt_max_count automatic fixed bin(17,0) dcl 1-36 tm_tdt_entry_ptr automatic pointer dcl 1-57 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 000757 constant entry internal dcl 220 ref 122 124 128 133 135 141 168 169 177 248 GET_NEW_TDT_SLOT 000775 constant entry internal dcl 229 ref 143 185 OK_TO_WRITE_MARK 001123 constant entry internal dcl 261 ref 201 PERSON_ID 001156 constant entry internal dcl 279 ref 147 147 191 191 215 215 RETURN 000357 constant label dcl 151 ref 225 SET_DM_DATA 001110 constant entry internal dcl 251 ref 240 242 tm_abandon 000105 constant entry external dcl 20 tm_kill 000362 constant entry external dcl 154 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1560 1640 1216 1570 Length 2124 1216 60 250 341 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tm_abandon 190 external procedure is an external procedure. ERROR_RETURN 64 internal procedure is called by several nonquick procedures. GET_NEW_TDT_SLOT 82 internal procedure enables or reverts conditions. on unit on line 240 64 on unit SET_DM_DATA 64 internal procedure is called by several nonquick procedures. OK_TO_WRITE_MARK internal procedure shares stack frame of external procedure tm_abandon. PERSON_ID internal procedure shares stack frame of external procedure tm_abandon. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME GET_NEW_TDT_SLOT 000100 tdt_index GET_NEW_TDT_SLOT tm_abandon 000100 txn_id tm_abandon 000101 txn_index tm_abandon 000102 tm_tdt_ptr tm_abandon 000112 state OK_TO_WRITE_MARK 000122 name PERSON_ID THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return tra_ext stac enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. before_journal_manager_$write_aborted_mark dm_misc_util_$log dm_send_request_$adjust_txn file_manager_$abandon file_manager_$post_transaction get_process_id_ lock_manager_$unlock_all tm_get_txn_index THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_data_$current_txn_id dm_data_$current_txn_index dm_data_$my_process_id dm_data_$my_tdt_index dm_data_$suspended_txn_index dm_data_$tm_tdt_ptr dm_error_$invalid_current_txn dm_error_$no_current_transaction dm_error_$not_own_transaction dm_error_$tdt_full dm_error_$transaction_not_current dm_error_$transaction_suspended LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 000101 118 000112 120 000114 122 000117 124 000132 126 000140 128 000143 131 000156 133 000173 135 000202 138 000217 140 000224 141 000240 143 000251 145 000255 147 000271 151 000357 154 000360 162 000367 164 000371 166 000375 167 000377 168 000401 169 000411 171 000424 172 000431 175 000432 176 000433 177 000445 180 000456 183 000471 185 000473 187 000514 189 000521 191 000535 196 000623 201 000624 204 000651 206 000656 208 000663 210 000672 212 000706 213 000710 215 000711 218 000755 220 000756 224 000764 225 000771 229 000774 233 001002 235 001013 237 001025 238 001042 240 001045 242 001067 244 001073 246 001074 248 001076 259 001106 251 001107 253 001115 254 001120 255 001121 257 001122 261 001123 265 001125 267 001127 269 001133 275 001151 279 001156 284 001160 285 001167 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved