COMPILATION LISTING OF SEGMENT tm_abort Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/06/86 1301.4 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 8 /****^ HISTORY COMMENTS: 9* 1) change(86-02-27,Pierret), approve(86-02-27,MCR7340), 10* audit(86-04-28,Newcomb), install(86-05-06,MR12.0-1054): 11* Changed to execute file_mangaer_$post_transaction before unlocking locks. 12* 2) change(86-04-22,Pierret), approve(86-04-22,MCR7340), 13* audit(86-04-28,Newcomb), install(86-05-06,MR12.0-1054): 14* Removed file_manager_$post_commit as it is not used (and does not even 15* exist!). 16* END HISTORY COMMENTS */ 17 18 19 /* format: style4,ifthenstmt,^indproc,^indcomtxt */ 20 /*---------------*/ 21 22 tm_abort: proc (A_txn_id, A_code); 23 24 /* DESCRIPTION: 25* 26* This procedure implements transaction_manager_$abort_txn 27* It rolls back the transaction by undoing all changes to protected files 28* made during the transaction, then writes an aborted mark and ends the 29* transaction. 30**/ 31 32 /* HISTORY: 33*Written by Steve Herbst, 08/10/82. 34*Modified: 35*08/16/82 by Steve Herbst: Added call to bjm_$write_rolled_back_mark and 36* changed to use dm_data_$tm_tdt_ptr. 37*08/23/82 by Steve Herbst: Removed call to bjm_$write_rolled_back_mark. 38*08/27/82 by Steve Herbst: Added calls to flush the transaction. 39*09/09/82 by Steve Herbst: Changed to eliminate locking.K 09/09/82 S. Herbst. 40*09/21/82 by Steve Herbst: Added tm_$priv_abort. 41*09/23/82 by Lindsey Spratt: Changed to use new lock_manager_ calling sequences. 42*10/05/82 by Steve Herbst: Removed tm_$priv_abort again; will be done by 43* tm_$adjust_txn. 44*10/14/82 by Steve Herbst: Changed pfm_ calling sequence and added check for 45* funny states. 46*11/01/82 by Steve Herbst: Changed to turn on tm_tdt.error_sw for error states. 47*11/05/82 by Steve Herbst: Changed to set tm_tdt.error_code on error return. 48*11/05/82 by Steve Herbst: Changed to handle suspended transaction. 49*01/11/83 by Steve Herbst: Changed to log error states. 50*01/17/83 by Steve Herbst: Changed to complete previous error abort, and to 51* call tm_error_state. 52*01/24/83 by Steve Herbst: Changed to work on user's own abandoned transaction. 53*05/27/83 by Steve Herbst: Made to update checkpoint_id & rollback_count in 54* TDT entry. 55*03/28/84 by Lee A. Newcomb: changed tm_get_state_info call to be 56* transaction_manager_$get_state_info. 57*08/23/84 by Steve Herbst: Responded to auditing comments. 58*01/29/85 by Steve Herbst: Changed to ignore dm_error_$file_was_deleted. 59*02/07/85 by S. Cox: Added fm$post_transaction call (moved from lm_per_system_) 60*04/23/85 by Matthew C. Pierret: Switched order of calls to 61* file_manager_$post_transaction and lock_manager_$unlock_all so 62* that post_transaction operates under the safety of the locks 63* acquired by the transaction. 64**/ 65 66 /* DECLARATIONS */ 67 68 /* Parameters */ 69 70 dcl A_txn_id bit (36) aligned parameter; 71 dcl A_code fixed bin (35) parameter; 72 73 /* Constants */ 74 75 dcl ME char (32) int static options (constant) init ("tm_abort"); 76 77 /* Based */ 78 79 /* Static */ 80 81 /* Automatic */ 82 83 dcl person char (22); 84 dcl project char (9); 85 dcl op_name char (32); 86 dcl txn_id bit (36) aligned; 87 dcl txn_index fixed bin; 88 dcl (code, op_error_code) fixed bin (35); 89 90 /* External */ 91 92 dcl dm_data_$current_txn_id bit (36) aligned ext; 93 dcl dm_data_$current_txn_index fixed bin ext; 94 dcl dm_data_$my_process_id bit (36) ext; 95 dcl dm_data_$suspended_txn_index fixed bin ext; 96 dcl dm_data_$tm_tdt_ptr ptr ext; 97 dcl dm_error_$file_was_deleted fixed bin (35) ext; 98 dcl dm_error_$invalid_current_txn fixed bin (35) ext; 99 dcl dm_error_$no_current_transaction fixed bin (35) ext; 100 dcl dm_error_$not_own_transaction fixed bin (35) ext; 101 dcl dm_error_$transaction_not_current fixed bin (35) ext; 102 dcl dm_error_$transaction_suspended fixed bin (35) ext; 103 dcl error_table_$unimplemented_version fixed bin (35) ext; 104 105 /* Entries */ 106 107 dcl before_journal_manager_$flush_transaction entry (bit (36) aligned, fixed bin, fixed bin (35)); 108 dcl before_journal_manager_$rollback entry (bit (36) aligned, fixed bin, fixed bin, fixed bin (35)); 109 dcl before_journal_manager_$write_aborted_mark entry (bit (36) aligned, fixed bin, fixed bin (35)); 110 dcl dm_send_request_$adjust_txn entry (bit (36) aligned, fixed bin, fixed bin (35)); 111 dcl lock_manager_$unlock_all entry; 112 dcl file_manager_$flush_modified_ci entry (bit (36) aligned, fixed bin, fixed bin (35)); 113 dcl file_manager_$post_transaction entry (); 114 dcl tm_cleanup entry (ptr, fixed bin); 115 dcl tm_cleanup$restart_error entry (ptr, fixed bin); 116 dcl tm_error_state entry (fixed bin, fixed bin, fixed bin (35), char (*), char (*)); 117 dcl transaction_manager_$get_state_info entry (fixed bin, char (*), fixed bin (35)); 118 dcl user_info_ entry options (variable); 119 120 /* Builtins */ 121 122 dcl (rtrim, unspec) builtin; 123 124 /* Conditions */ 125 126 dcl cleanup condition; 127 128 /* END OF DECLARATIONS */ 129 130 A_code = 0; 131 132 tm_tdt_ptr = dm_data_$tm_tdt_ptr; 133 134 if tm_tdt.version ^= TM_TDT_VERSION_3 then call ERROR_RETURN (error_table_$unimplemented_version); 135 136 if dm_data_$current_txn_index = 0 then 137 if dm_data_$suspended_txn_index ^= 0 then call ERROR_RETURN (dm_error_$transaction_suspended); 138 else call ERROR_RETURN (dm_error_$no_current_transaction); 139 140 txn_index = dm_data_$current_txn_index; 141 142 if txn_index < 1 | txn_index > tm_tdt.entry_count then 143 call ERROR_RETURN (dm_error_$invalid_current_txn); 144 145 if tm_tdt.abandoned_sw (txn_index) then do; 146 147 call user_info_ (person, project); 148 if tm_tdt.owner_name (txn_index) = rtrim (person) || "." || project then do; 149 /* if txn is abandoned, let daemon adjust it */ 150 call dm_send_request_$adjust_txn (tm_tdt.txn_id (txn_index), txn_index, 0); 151 return; 152 end; 153 end; 154 155 if A_txn_id = "0"b | A_txn_id = tm_tdt.txn_id (txn_index) then 156 txn_id = tm_tdt.txn_id (txn_index); 157 else call ERROR_RETURN (dm_error_$transaction_not_current); 158 159 if tm_tdt.process_id (txn_index) ^= dm_data_$my_process_id then 160 call ERROR_RETURN (dm_error_$not_own_transaction); 161 162 if tm_tdt.state (txn_index) ^= TM_IN_PROGRESS_STATE then do; 163 164 call transaction_manager_$get_state_info ((tm_tdt.state (txn_index)), op_name, op_error_code); 165 if op_name = OP_NAME_ROLLBACK then 166 167 call CONVERT_ROLLBACK_TO_ABORT; 168 169 else if op_name ^= OP_NAME_ABORT then call ERROR_RETURN (op_error_code); 170 171 call tm_cleanup$restart_error (tm_tdt_ptr, txn_index); /* this call completes the abort */ 172 if tm_tdt.error_sw (txn_index) then 173 call ERROR_STATE ((tm_tdt.state (txn_index)), tm_tdt.error_code (txn_index), "tm_cleanup"); 174 return; 175 end; 176 177 on cleanup begin; 178 call tm_cleanup (tm_tdt_ptr, txn_index); 179 end; 180 181 tm_tdt.state (txn_index) = TM_ABORT_FLUSHING_TXN_STATE; 182 183 call before_journal_manager_$flush_transaction (txn_id, txn_index, code); 184 if code ^= 0 then 185 call ERROR_STATE (TM_ABORT_FLUSHING_TXN_ERROR, code, 186 "before_journal_manager_$flush_transaction"); 187 188 tm_tdt.state (txn_index) = TM_ABORT_ROLLING_BACK_STATE; 189 190 call before_journal_manager_$rollback (txn_id, txn_index, 0, code); 191 if code ^= 0 then 192 call ERROR_STATE (TM_ABORT_ROLLING_BACK_ERROR, code, "before_journal_manager_$rollback"); 193 194 tm_tdt.checkpoint_id (txn_index) = 0; 195 tm_tdt.rollback_count (txn_index) = tm_tdt.rollback_count (txn_index) + 1; 196 197 tm_tdt.state (txn_index) = TM_ABORT_FLUSHING_CI_STATE; 198 199 /* Make sure the file itself is really restored to how it was */ 200 201 call file_manager_$flush_modified_ci (txn_id, txn_index, code); 202 if code ^= 0 & code ^= dm_error_$file_was_deleted then 203 /* previous abort may have deleted the file */ 204 call ERROR_STATE (TM_ABORT_FLUSHING_CI_ERROR, code, "file_manager_$flush_modified_ci"); 205 206 tm_tdt.state (txn_index) = TM_ABORT_WRITING_MARK_STATE; 207 208 call before_journal_manager_$write_aborted_mark (txn_id, txn_index, code); 209 if code ^= 0 then 210 call ERROR_STATE (TM_ABORT_WRITING_MARK_ERROR, code, 211 "before_journal_manager_$write_aborted_mark"); 212 213 tm_tdt.state (txn_index) = TM_ABORT_UNLOCKING_STATE; 214 215 call file_manager_$post_transaction (); 216 217 call lock_manager_$unlock_all; 218 219 tm_tdt.state (txn_index) = TM_ABORT_METERING_STATE; 220 221 /* Dump meters here */ 222 223 dm_data_$current_txn_id = "0"b; 224 dm_data_$current_txn_index = 0; 225 226 tm_tdt.state (txn_index) = 0; /* show intent to zero whole entry */ 227 unspec (tm_tdt.transaction (txn_index)) = "0"b; /* transaction is now gone */ 228 229 A_txn_id = "0"b; /* zero caller's arg */ 230 RETURN: 231 return; 232 233 CONVERT_ROLLBACK_TO_ABORT: proc; 234 235 /* Maps rollback states to corresponding abort states, since both do the same calls. 236* However, it maps any state after TM_ROLLBACK_WRITING_MARK_STATE to TM_ABORT_WRITING_MARK_STATE 237* to make sure an abort mark is written. */ 238 239 dcl error_sw bit (1); 240 dcl state fixed bin; 241 242 state = tm_tdt.state (txn_index); 243 if state > TM_ERROR_INCREMENT then do; 244 error_sw = "1"b; 245 state = state - TM_ERROR_INCREMENT; 246 end; 247 248 if state = TM_ROLLBACK_FLUSHING_TXN_STATE then state = TM_ABORT_FLUSHING_TXN_STATE; 249 else if state = TM_ROLLBACK_ROLLING_BACK_STATE then state = TM_ABORT_ROLLING_BACK_STATE; 250 else if state = TM_ROLLBACK_FLUSHING_CI_STATE then state = TM_ABORT_FLUSHING_CI_STATE; 251 else if state = TM_ROLLBACK_WRITING_MARK_STATE | 252 state = TM_ROLLBACK_UNLOCKING_STATE | 253 state = TM_ROLLBACK_METERING_STATE then state = TM_ABORT_WRITING_MARK_STATE; 254 255 if error_sw then state = state + TM_ERROR_INCREMENT; 256 257 tm_tdt.state (txn_index) = state; 258 259 end CONVERT_ROLLBACK_TO_ABORT; 260 261 ERROR_RETURN: proc (P_code); 262 263 dcl P_code fixed bin (35); 264 265 A_code = P_code; 266 go to RETURN; 267 268 end ERROR_RETURN; 269 270 ERROR_STATE: proc (P_state, P_code, P_name); 271 272 dcl P_state fixed bin; 273 dcl P_code fixed bin (35); 274 dcl P_name char (*); 275 276 call tm_error_state (txn_index, P_state, P_code, ME, P_name); 277 278 A_code = P_code; 279 280 go to RETURN; 281 282 end ERROR_STATE; 283 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 */ 284 285 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 */ 286 287 288 289 end tm_abort; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/06/86 1258.3 tm_abort.pl1 >spec>install>1054>tm_abort.pl1 284 1 01/07/85 0900.1 dm_tm_tdt.incl.pl1 >ldd>include>dm_tm_tdt.incl.pl1 286 2 01/07/85 0900.1 dm_tm_states.incl.pl1 >ldd>include>dm_tm_states.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 71 set ref 22 130* 265* 278* A_txn_id parameter bit(36) dcl 70 set ref 22 155 155 229* ME 000026 constant char(32) initial unaligned dcl 75 set ref 276* OP_NAME_ABORT 000010 constant char(32) initial unaligned dcl 2-75 ref 169 OP_NAME_ROLLBACK 000000 constant char(32) initial unaligned dcl 2-75 ref 165 P_code parameter fixed bin(35,0) dcl 263 in procedure "ERROR_RETURN" ref 261 265 P_code parameter fixed bin(35,0) dcl 273 in procedure "ERROR_STATE" set ref 270 276* 278 P_name parameter char unaligned dcl 274 set ref 270 276* P_state parameter fixed bin(17,0) dcl 272 set ref 270 276* TM_ABORT_FLUSHING_CI_ERROR 000021 constant fixed bin(17,0) initial dcl 2-30 set ref 202* TM_ABORT_FLUSHING_CI_STATE constant fixed bin(17,0) initial dcl 2-30 ref 197 250 TM_ABORT_FLUSHING_TXN_ERROR 000023 constant fixed bin(17,0) initial dcl 2-30 set ref 184* TM_ABORT_FLUSHING_TXN_STATE constant fixed bin(17,0) initial dcl 2-30 ref 181 248 TM_ABORT_METERING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 219 TM_ABORT_ROLLING_BACK_ERROR 000022 constant fixed bin(17,0) initial dcl 2-30 set ref 191* TM_ABORT_ROLLING_BACK_STATE constant fixed bin(17,0) initial dcl 2-30 ref 188 249 TM_ABORT_UNLOCKING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 213 TM_ABORT_WRITING_MARK_ERROR 000020 constant fixed bin(17,0) initial dcl 2-30 set ref 209* TM_ABORT_WRITING_MARK_STATE constant fixed bin(17,0) initial dcl 2-30 ref 206 251 TM_ERROR_INCREMENT constant fixed bin(17,0) initial dcl 2-26 ref 243 245 255 TM_IN_PROGRESS_STATE constant fixed bin(17,0) initial dcl 2-30 ref 162 TM_ROLLBACK_FLUSHING_CI_STATE constant fixed bin(17,0) initial dcl 2-30 ref 250 TM_ROLLBACK_FLUSHING_TXN_STATE constant fixed bin(17,0) initial dcl 2-30 ref 248 TM_ROLLBACK_METERING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 251 TM_ROLLBACK_ROLLING_BACK_STATE constant fixed bin(17,0) initial dcl 2-30 ref 249 TM_ROLLBACK_UNLOCKING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 251 TM_ROLLBACK_WRITING_MARK_STATE constant fixed bin(17,0) initial dcl 2-30 ref 251 TM_TDT_VERSION_3 000024 constant char(8) initial unaligned dcl 1-38 ref 134 abandoned_sw 23 based bit(1) array level 4 packed unaligned dcl 1-41 ref 145 before_journal_manager_$flush_transaction 000040 constant entry external dcl 107 ref 183 before_journal_manager_$rollback 000042 constant entry external dcl 108 ref 190 before_journal_manager_$write_aborted_mark 000044 constant entry external dcl 109 ref 208 checkpoint_id 32 based fixed bin(17,0) array level 4 packed unaligned dcl 1-41 set ref 194* cleanup 000126 stack reference condition dcl 126 ref 177 code 000123 automatic fixed bin(35,0) dcl 88 set ref 183* 184 184* 190* 191 191* 201* 202 202 202* 208* 209 209* dm_data_$current_txn_id 000010 external static bit(36) dcl 92 set ref 223* dm_data_$current_txn_index 000012 external static fixed bin(17,0) dcl 93 set ref 136 140 224* dm_data_$my_process_id 000014 external static bit(36) unaligned dcl 94 ref 159 dm_data_$suspended_txn_index 000016 external static fixed bin(17,0) dcl 95 ref 136 dm_data_$tm_tdt_ptr 000020 external static pointer dcl 96 ref 132 dm_error_$file_was_deleted 000022 external static fixed bin(35,0) dcl 97 ref 202 dm_error_$invalid_current_txn 000024 external static fixed bin(35,0) dcl 98 set ref 142* dm_error_$no_current_transaction 000026 external static fixed bin(35,0) dcl 99 set ref 138* dm_error_$not_own_transaction 000030 external static fixed bin(35,0) dcl 100 set ref 159* dm_error_$transaction_not_current 000032 external static fixed bin(35,0) dcl 101 set ref 157* dm_error_$transaction_suspended 000034 external static fixed bin(35,0) dcl 102 set ref 136* dm_send_request_$adjust_txn 000046 constant entry external dcl 110 ref 150 entry 10 based structure array level 2 dcl 1-41 entry_count 6 based fixed bin(17,0) level 2 dcl 1-41 ref 142 entry_flags 23 based structure array level 3 dcl 1-41 error_code 31 based fixed bin(35,0) array level 4 dcl 1-41 set ref 172* error_sw 34(02) based bit(1) array level 5 in structure "tm_tdt" packed unaligned dcl 1-41 in procedure "tm_abort" set ref 172 error_sw 000144 automatic bit(1) unaligned dcl 239 in procedure "CONVERT_ROLLBACK_TO_ABORT" set ref 244* 255 error_table_$unimplemented_version 000036 external static fixed bin(35,0) dcl 103 set ref 134* file_manager_$flush_modified_ci 000052 constant entry external dcl 112 ref 201 file_manager_$post_transaction 000054 constant entry external dcl 113 ref 215 flags 34 based structure array level 4 packed unaligned dcl 1-41 lock_manager_$unlock_all 000050 constant entry external dcl 111 ref 217 op_error_code 000124 automatic fixed bin(35,0) dcl 88 set ref 164* 169* op_name 000111 automatic char(32) unaligned dcl 85 set ref 164* 165 169 owner_name 13 based char(32) array level 3 dcl 1-41 ref 148 person 000100 automatic char(22) unaligned dcl 83 set ref 147* 148 process_id 12 based bit(36) array level 3 dcl 1-41 ref 159 project 000106 automatic char(9) unaligned dcl 84 set ref 147* 148 rollback_count 32(18) based fixed bin(17,0) array level 4 packed unaligned dcl 1-41 set ref 195* 195 rtrim builtin function dcl 122 ref 148 state 000145 automatic fixed bin(17,0) dcl 240 in procedure "CONVERT_ROLLBACK_TO_ABORT" set ref 242* 243 245* 245 248 248* 249 249* 250 250* 251 251 251 251* 255* 255 257 state 30(18) based fixed bin(17,0) array level 4 in structure "tm_tdt" packed unaligned dcl 1-41 in procedure "tm_abort" set ref 162 164 172 181* 188* 197* 206* 213* 219* 226* 242 257* tm_cleanup 000056 constant entry external dcl 114 ref 178 tm_cleanup$restart_error 000060 constant entry external dcl 115 ref 171 tm_error_state 000062 constant entry external dcl 116 ref 276 tm_tdt based structure level 1 dcl 1-41 tm_tdt_entry based structure level 1 dcl 1-59 tm_tdt_ptr 000134 automatic pointer dcl 1-35 set ref 132* 134 142 145 148 150 155 155 159 162 164 171* 172 172 172 178* 181 188 194 195 195 197 206 213 219 226 227 242 257 transaction 24 based structure array level 3 unaligned dcl 1-41 set ref 227* transaction_manager_$get_state_info 000064 constant entry external dcl 117 ref 164 txn_id 24 based bit(36) array level 4 in structure "tm_tdt" dcl 1-41 in procedure "tm_abort" set ref 150* 155 155 txn_id 000121 automatic bit(36) dcl 86 in procedure "tm_abort" set ref 155* 183* 190* 201* 208* txn_index 000122 automatic fixed bin(17,0) dcl 87 set ref 140* 142 142 145 148 150 150* 155 155 159 162 164 171* 172 172 172 178* 181 183* 188 190* 194 195 195 197 201* 206 208* 213 219 226 227 242 257 276* unspec builtin function dcl 122 set ref 227* user_info_ 000066 constant entry external dcl 118 ref 147 version based char(8) level 2 dcl 1-41 ref 134 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. 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 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_COMMIT internal static char(32) initial unaligned dcl 2-75 TM_ABORT_METERING_ERROR 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_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_METERING_STATE 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_UNLOCKING_STATE 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_ROLLBACK_FLUSHING_CI_ERROR 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_METERING_ERROR 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_UNLOCKING_ERROR 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 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. CONVERT_ROLLBACK_TO_ABORT 000766 constant entry internal dcl 233 ref 165 ERROR_RETURN 001046 constant entry internal dcl 261 ref 134 136 138 142 157 159 169 ERROR_STATE 001054 constant entry internal dcl 270 ref 172 184 191 202 209 RETURN 000765 constant label dcl 230 ref 266 280 tm_abort 000131 constant entry external dcl 22 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1602 1672 1221 1612 Length 2136 1221 70 230 360 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tm_abort 188 external procedure is an external procedure. on unit on line 177 70 on unit CONVERT_ROLLBACK_TO_ABORT internal procedure shares stack frame of external procedure tm_abort. ERROR_RETURN internal procedure shares stack frame of external procedure tm_abort. ERROR_STATE internal procedure shares stack frame of external procedure tm_abort. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tm_abort 000100 person tm_abort 000106 project tm_abort 000111 op_name tm_abort 000121 txn_id tm_abort 000122 txn_index tm_abort 000123 code tm_abort 000124 op_error_code tm_abort 000134 tm_tdt_ptr tm_abort 000144 error_sw CONVERT_ROLLBACK_TO_ABORT 000145 state CONVERT_ROLLBACK_TO_ABORT THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return enable shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. before_journal_manager_$flush_transaction before_journal_manager_$rollback before_journal_manager_$write_aborted_mark dm_send_request_$adjust_txn file_manager_$flush_modified_ci file_manager_$post_transaction lock_manager_$unlock_all tm_cleanup tm_cleanup$restart_error tm_error_state transaction_manager_$get_state_info user_info_ 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_$suspended_txn_index dm_data_$tm_tdt_ptr dm_error_$file_was_deleted dm_error_$invalid_current_txn dm_error_$no_current_transaction dm_error_$not_own_transaction dm_error_$transaction_not_current dm_error_$transaction_suspended error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000125 130 000136 132 000140 134 000143 136 000156 138 000172 140 000200 142 000203 145 000216 147 000224 148 000241 150 000307 151 000325 155 000326 157 000343 159 000352 162 000367 164 000401 165 000423 169 000431 171 000437 172 000450 174 000511 177 000512 178 000526 179 000537 181 000540 183 000545 184 000560 188 000570 190 000576 191 000614 194 000624 195 000632 197 000641 201 000644 202 000657 206 000672 208 000700 209 000713 213 000723 215 000731 217 000736 219 000743 223 000751 224 000753 226 000754 227 000757 229 000763 230 000765 233 000766 242 000767 243 000777 244 001001 245 001003 248 001005 249 001013 250 001020 251 001025 255 001035 257 001041 259 001045 261 001046 265 001050 266 001053 270 001054 276 001065 278 001117 280 001123 ----------------------------------------------------------- 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