COMPILATION LISTING OF SEGMENT tm_daemon_adjust Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/04/85 0948.6 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 /* format: style4,ifthenstmt,^indproc,^indcomtxt */ 7 /* --------------- */ 8 9 tm_daemon_adjust: proc; 10 11 /* DESCRIPTION: 12* 13* Called only by the Data Management Daemon, $tm_adjust_tdt_entry cleans up 14* a transaction belonging to a dead or "suspended" (to be defined) process. 15* If a "committed" mark may have been written for the transaction, the 16* transaction is committed. Otherwise, it is aborted. 17* 18* The entry point $tm_adjust_process_id adjusts the transaction 19* belonging to a specified process_id, only if the process is dead. 20**/ 21 22 /* HISTORY: 23* 24*Written by Steve Herbst, 10/12/82. 25*Modified: 26*11/01/82 by Steve Herbst: Changed to not adjust if txn's error_sw is on. 27*11/08/82 by Steve Herbst: Added $tm_adjust_process_id. 28*11/11/82 by Steve Herbst: Made to respect tm_tdt_entry.dead_process_sw. 29*11/22/82 by Steve Herbst: Changed to just return if passed a zero txn_id. 30*11/22/82 by Steve Herbst: Changed to free TDT entry when done. 31*12/07/82 by Steve Herbst: Changed to call other mgrs' adjusters, and free TDT 32* entry, if txn not in error state. 33*12/14/82 by Steve Herbst: Changed to return error if tm_cleanup$restart_error 34* couldn't adjust the transaction. 35*01/11/83 by Steve Herbst: Added code for tm_tdt.kill_sw="1"b, adjusting 36* requested by tm_$kill. 37*01/11/83 by Steve Herbst: Changed to always adjust an error txn, a live 38* abandoned txn, or one to be killed. 39*01/17/83 by Steve Herbst: Changed abort heuristic: only force abort of 40* IN-PROGRESS txns, else finish up op 41*01/24/83 by Steve Herbst: Fixed to free entry despite no txn, call 42* bjm_$adjust... only for dead proc, log adjust_txn 43*04/14/83 by Benson Margulies: Removed the code to unlock all, and removed a 44* bad substr argument in process_id. 45*04/19/83 by Steve Herbst: Fixed adjust_txn internal proc to copy its arg. 46*04/20/83 by Lee A. Newcomb: Removed temp hack to pause in $tm_adjust_process_id 47* since answering service (dpg_) is fixed. 48*04/26/83 by Steve Herbst: Added logging of "kill" path. 49*05/02/83 by Steve Herbst: Separated out the kill code into kill_txn, changed 50* to kill without calling tm_cleanup. 51*05/04/83 by Steve Herbst: Converted tm_adopt calls to tm_daemon_adopt calls. 52*05/11/83 by Steve Herbst: Renamed module to tm_daemon_adjust; tm_adjust will 53* be for user to call. 54*05/16/83 by Steve Herbst: Changed to send mail to owner if it can't adjust 55* a transaction. 56*10/20/83 by Steve Herbst: Fixed bug preventing TDT entry from being freed if 57* owner process still active. 58*03/28/84 by Lee A. Newcomb: Changed tm_get_state_info call to be 59* transaction_manager_$get_state_info. 60*10/19/84 by Steve Herbst: Changed in response to audit comments. 61*01/23/84 by R. Michael Tague: Changed it so that the $adjust_tdt_entry would 62* use the supplied txn_id if the supplied txn_index is zero. 63*03/05/85 by Steve Herbst: Replaced dm_log_ with dm_misc_util_$log. 64*03/18/85 by Steve Herbst: Removed logging except for error situations. 65**/ 66 67 /* DECLARATIONS */ 68 69 /* Parameters */ 70 71 dcl A_txn_id bit (36) aligned parameter; 72 dcl A_txn_index fixed bin parameter; 73 dcl A_code fixed bin (35) parameter; 74 dcl A_process_id bit (36) aligned; 75 76 77 /* Constants */ 78 79 /* Based */ 80 81 /* Static */ 82 83 /* Automatic */ 84 85 dcl message char (256); 86 dcl error_message char (100) aligned; 87 dcl (ME, op_name) char (32); 88 89 dcl txn_id bit (36) aligned; 90 dcl process_id bit (36); 91 dcl (dead_process_sw, kill_sw, process_id_entry_sw) bit (1); 92 dcl txn_index fixed bin; 93 dcl message_len fixed bin (21); 94 dcl code fixed bin (35); 95 96 /* External */ 97 98 dcl dm_data_$current_txn_id bit (36) aligned ext; 99 dcl dm_data_$current_txn_index fixed bin ext; 100 dcl dm_data_$tm_tdt_ptr ptr external; 101 dcl dm_error_$not_daemon fixed bin (35) ext; 102 dcl dm_error_$tdt_entry_in_use fixed bin (35) ext; 103 dcl dm_system_data_$initializer_processid bit (36) ext; 104 dcl error_table_$badcall fixed bin (35) ext; 105 dcl dm_error_$process_not_found fixed bin (35) ext; 106 dcl error_table_$unimplemented_version fixed bin (35) ext; 107 108 /* Entries */ 109 110 dcl before_journal_manager_$adjust_process_id entry (bit (36) aligned, fixed bin (35)); 111 dcl before_journal_manager_$write_aborted_mark entry (bit (36) aligned, fixed bin, fixed bin (35)); 112 dcl dm_misc_util_$log entry options (variable); 113 dcl convert_status_code_ entry (fixed bin (35), char (8) aligned, char (100) aligned); 114 dcl get_process_id_ entry returns (bit (36)); 115 dcl hcs_$validate_processid entry (bit (36) aligned, fixed bin (35)); 116 dcl ioa_$rs entry options (variable); 117 dcl lock_manager_$unlock_all entry; 118 dcl send_mail_ entry (char (*), char (*), ptr, fixed bin (35)); 119 dcl tm_cleanup$restart_error entry (ptr, fixed bin); 120 dcl tm_daemon_adopt$tm_daemon_abandon entry (bit (36) aligned, fixed bin, fixed bin (35)); 121 dcl tm_daemon_adopt entry (bit (36) aligned, fixed bin, fixed bin (35)); 122 dcl transaction_manager_$get_state_info entry (fixed bin, char (*), fixed bin (35)); 123 124 /* Builtins */ 125 126 dcl (addr, before, fixed, null, stacq, string, substr, unspec) builtin; 127 128 /* Conditions */ 129 130 /* END OF DECLARATIONS */ 131 132 tm_adjust_tdt_entry: entry (A_txn_id, A_txn_index, A_code); 133 134 process_id_entry_sw = "0"b; 135 ME = "tm_adjust_tdt_entry"; 136 txn_id = A_txn_id; 137 txn_index = A_txn_index; 138 A_code = 0; 139 140 go to COMMON; 141 142 tm_adjust_process_id: entry (A_process_id, A_code); 143 144 process_id_entry_sw = "1"b; 145 ME = "tm_adjust_process_id"; 146 process_id = A_process_id; 147 A_code = 0; 148 txn_index = 0; 149 150 COMMON: 151 /* must be called by Data_Management.Daemon */ 152 if get_process_id_ () ^= dm_system_data_$initializer_processid then do; 153 A_code = dm_error_$not_daemon; 154 return; 155 end; 156 157 tm_tdt_ptr = dm_data_$tm_tdt_ptr; 158 159 tm_tdt_entry_ptr = null; /* tested by ERROR_RETURN, in case next line errs */ 160 161 if tm_tdt.version ^= TM_TDT_VERSION_3 then call ERROR_RETURN (error_table_$unimplemented_version); 162 163 if process_id_entry_sw then do; 164 165 txn_index = SEARCH_FOR_PROCESS (process_id); 166 167 txn_id = tm_tdt.txn_id (txn_index); 168 end; 169 else do; 170 if txn_index = 0 then 171 txn_index = SEARCH_FOR_ID (txn_id); 172 if txn_index < 1 | txn_index > tm_tdt.entry_count then call ERROR_RETURN (error_table_$badcall); 173 else if tm_tdt.process_id (txn_index) = "0"b then return; /* nothing to adjust */ 174 end; 175 176 tm_tdt_entry_ptr = addr (tm_tdt.entry (txn_index)); 177 178 call hcs_$validate_processid (tm_tdt_entry.process_id, code); 179 dead_process_sw = (code ^= 0); 180 kill_sw = tm_tdt_entry.kill_sw; 181 182 if ^dead_process_sw 183 & ^tm_tdt_entry.dead_process_sw /* flagged as expected to die, same as dead */ 184 & ^tm_tdt_entry.abandoned_sw then /* can't adjust a living process' slot unless abandoned */ 185 call ERROR_RETURN (dm_error_$tdt_entry_in_use); 186 187 tm_tdt_entry.daemon_adjust_count = tm_tdt_entry.daemon_adjust_count + 1; /* intend to adjust */ 188 189 /* If there is still a transaction in the slot, adjust it */ 190 191 if tm_tdt_entry.txn_id ^= "0"b then 192 193 if kill_sw then call KILL_TXN (tm_tdt_entry.txn_id); 194 195 else call ADJUST_TXN (tm_tdt_entry.txn_id); 196 197 /* Tell other managers to clean up their data on this process */ 198 /* If they are all successful (no pending transactions indicated), free the TDT entry */ 199 200 if tm_tdt_entry.txn_id = "0"b then do; /* unless transaction is in an error state */ 201 202 if dead_process_sw then do; 203 204 call before_journal_manager_$adjust_process_id (tm_tdt_entry.process_id, A_code); 205 /* Call other managers too? */ 206 if A_code ^= 0 then do; 207 call dm_misc_util_$log (ERROR_SV, A_code, ME, 208 " Error calling bjm_$adjust_process_id; TDT entry not freed. (index = ^d, pid = ^w)", 209 txn_index, tm_tdt_entry.process_id); 210 go to RETURN; 211 end; 212 end; 213 214 tm_tdt_entry.owner_name = ""; 215 tm_tdt_entry.event_channel = 0; 216 unspec (tm_tdt_entry.entry_flags) = "0"b; 217 218 if stacq (tm_tdt_entry.process_id, "0"b, tm_tdt_entry.process_id) then ; 219 /* free entry indivisibly */ 220 end; 221 222 RETURN: 223 return; 224 225 ADJUST_TXN: proc (A_txn_id); 226 227 dcl (A_txn_id, txn_id) bit (36) aligned; 228 229 /* Adjusts a transaction and zeros the transaction portion of the TDT entry. */ 230 231 txn_id = A_txn_id; 232 233 call tm_daemon_adopt (txn_id, txn_index, A_code); 234 if A_code ^= 0 then do; 235 call dm_misc_util_$log (ERROR_SV, A_code, ME, 236 " (index = ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d) From tm_daemon_adopt.", 237 txn_index, fixed (tm_tdt_entry.txn_id), tm_tdt_entry.process_id, 238 PERSON_ID (), tm_tdt_entry.state); 239 go to RETURN; 240 end; 241 242 /* If transaction is in progress (normal), cause tm_cleanup$restart_error to abort it by setting the state. 243* Else let tm_cleanup$restart_error finish up the unfinished operation. */ 244 245 if tm_tdt_entry.state = TM_IN_PROGRESS_STATE then 246 tm_tdt_entry.state = TM_ABORT_FLUSHING_TXN_STATE; 247 248 call tm_cleanup$restart_error (tm_tdt_ptr, txn_index); 249 if tm_tdt_entry.error_sw then do; 250 A_code = tm_tdt_entry.error_code; 251 call dm_misc_util_$log (ERROR_SV, A_code, ME, 252 " Failed to adjust txn ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d", 253 txn_index, fixed (tm_tdt_entry.txn_id), tm_tdt_entry.process_id, 254 PERSON_ID (), tm_tdt_entry.state); 255 256 /* Send mail to owner */ 257 258 send_mail_info.version = 2; 259 send_mail_info.sent_from = ""; 260 unspec (send_mail_info.switches) = "0"b; 261 send_mail_info.always_add = "1"b; 262 263 call transaction_manager_$get_state_info ((tm_tdt_entry.state), op_name, 0); 264 265 call convert_status_code_ (A_code, "", error_message); 266 267 call ioa_$rs ("Failed to adjust transaction ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d^/^a: ^a", 268 message, message_len, 269 txn_index, fixed (tm_tdt_entry.txn_id), tm_tdt_entry.process_id, 270 PERSON_ID (), tm_tdt_entry.state, op_name, error_message); 271 272 call send_mail_ ((tm_tdt_entry.owner_name), substr (message, 1, message_len), 273 addr (send_mail_info), 0); 274 275 send_mail_info.notify, send_mail_info.never_add = "1"b; 276 send_mail_info.always_add = "0"b; 277 call send_mail_ ((tm_tdt_entry.owner_name), "", addr (send_mail_info), 0); 278 /* also send mail notification to terminal */ 279 end; 280 281 call tm_daemon_adopt$tm_daemon_abandon (txn_id, txn_index, code); 282 if code ^= 0 then 283 call dm_misc_util_$log (ERROR_SV, code, ME, 284 " (index = ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d) From tm_daemon_adopt$tm_daemon_abandon", 285 txn_index, fixed (tm_tdt_entry.txn_id), tm_tdt_entry.process_id, 286 PERSON_ID (), tm_tdt_entry.state); 287 288 end ADJUST_TXN; 289 290 ERROR_RETURN: proc (P_code); 291 292 dcl P_code fixed bin (35); 293 294 A_code = P_code; 295 296 if process_id_entry_sw then call dm_misc_util_$log (ERROR_SV, P_code, ME, "(pid = ^w)", process_id); 297 298 else if tm_tdt_entry_ptr = null then call dm_misc_util_$log (ERROR_SV, P_code, ME, "(index = ^d)", txn_index); 299 300 else call dm_misc_util_$log (ERROR_SV, P_code, ME, "(index = ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d)", 301 txn_index, fixed (tm_tdt_entry.txn_id), tm_tdt_entry.process_id, 302 PERSON_ID (), tm_tdt_entry.state); 303 304 go to RETURN; 305 306 end ERROR_RETURN; 307 308 KILL_TXN: proc (A_txn_id); 309 310 dcl (A_txn_id, txn_id) bit (36) aligned; 311 312 /* Kills a transaction and zeros the transaction portion of the TDT entry. */ 313 314 txn_id = A_txn_id; 315 316 call tm_daemon_adopt (txn_id, txn_index, A_code); 317 if A_code ^= 0 then do; 318 319 /* If can't adopt, fake it and kill anyway */ 320 321 dm_data_$current_txn_id = txn_id; 322 dm_data_$current_txn_index = txn_index; 323 324 call KILL; 325 326 return; 327 end; 328 329 /* Write an abort mark (kludge) so bjm can keep track of things. */ 330 331 if OK_TO_WRITE_MARK ((tm_tdt_entry.state)) then 332 call before_journal_manager_$write_aborted_mark (txn_id, txn_index, 0); 333 334 call KILL; 335 336 call tm_daemon_adopt$tm_daemon_abandon (txn_id, txn_index, code); 337 if code ^= 0 then 338 call dm_misc_util_$log (ERROR_SV, code, ME, 339 " (index = ^d, TID = ^o, pid = ^w, owner = ^a, state = ^d) From tm_daemon_adopt$tm_daemon_abandon", 340 txn_index, fixed (tm_tdt_entry.txn_id), tm_tdt_entry.process_id, 341 PERSON_ID (), tm_tdt_entry.state); 342 343 KILL: proc (); 344 345 call lock_manager_$unlock_all; 346 347 unspec (tm_tdt_entry.transaction) = "0"b; 348 349 dm_data_$current_txn_id = "0"b; 350 dm_data_$current_txn_index = 0; 351 352 call dm_misc_util_$log (INFORM_SV, "Killed transaction ^d, TID = ^o, pid = ^w, owner = ^a", 353 A_txn_index, fixed (tm_tdt_entry.txn_id), 354 tm_tdt_entry.process_id, PERSON_ID ()); 355 356 end KILL; 357 358 end KILL_TXN; 359 360 OK_TO_WRITE_MARK: proc (P_state) returns (bit (1)); 361 362 dcl (P_state, state) fixed bin; 363 364 state = P_state; 365 366 if state > TM_ERROR_INCREMENT then state = state - TM_ERROR_INCREMENT; 367 368 if state ^= TM_ABORT_UNLOCKING_STATE /* don't write a second abort mark if possible */ 369 & state ^= TM_ABORT_METERING_STATE 370 371 & state ^= TM_COMMIT_UNLOCKING_STATE /* also don't abort if commit mark has been written */ 372 & state ^= TM_COMMIT_METERING_STATE then return ("1"b); 373 374 else return ("0"b); 375 376 end OK_TO_WRITE_MARK; 377 378 PERSON_ID: proc () returns (char (22)); 379 380 dcl name char (32); 381 382 name = tm_tdt_entry.owner_name; 383 return (before (name, ".")); 384 385 end PERSON_ID; 386 387 SEARCH_FOR_PROCESS: proc (P_process_id) returns (fixed bin); 388 389 dcl P_process_id bit (36); 390 dcl txn_index fixed bin; 391 392 do txn_index = 1 to tm_tdt.entry_count; 393 if tm_tdt.process_id (txn_index) = P_process_id then return (txn_index); 394 end; 395 396 A_code = dm_error_$process_not_found; 397 go to RETURN; 398 399 end SEARCH_FOR_PROCESS; 400 401 /* ************************************************************************* 402* * SEARCH_FOR_ID - Given a transaction ID, this routine returns that * 403* * transaction's index in the TDT if it exists. If it doesn't exist, * 404* * zero is returned. * 405* ************************************************************************* */ 406 407 SEARCH_FOR_ID: proc (sfi_p_txn_id) returns (fixed bin); 408 409 dcl sfi_p_txn_id bit (36) aligned; 410 dcl sfi_txn_index fixed bin; 411 412 do sfi_txn_index = 1 to tm_tdt.entry_count; 413 if tm_tdt.txn_id (sfi_txn_index) = sfi_p_txn_id then return (sfi_txn_index); 414 end; 415 return (0); 416 end SEARCH_FOR_ID; 417 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 */ 418 419 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 */ 420 421 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 */ 422 423 4 1 /* BEGIN send_mail_info include file */ 4 2 4 3 dcl send_mail_info_version_2 fixed bin init(2); 4 4 4 5 dcl 1 send_mail_info aligned, 4 6 2 version fixed bin, /* = 2 */ 4 7 2 sent_from char(32) aligned, 4 8 2 switches, 4 9 3 wakeup bit(1) unal, 4 10 3 mbz1 bit(1) unal, 4 11 3 always_add bit(1) unal, 4 12 3 never_add bit(1) unal, 4 13 3 notify bit(1) unal, 4 14 3 acknowledge bit(1) unal, 4 15 3 mbz bit(30) unal; 4 16 4 17 /* END send_mail_info include file */ 424 425 426 end tm_daemon_adjust; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/04/85 0827.1 tm_daemon_adjust.pl1 >spec>on>7192.pbf-04/04/85>tm_daemon_adjust.pl1 418 1 01/07/85 0900.1 dm_tm_tdt.incl.pl1 >ldd>include>dm_tm_tdt.incl.pl1 420 2 01/07/85 0900.1 dm_tm_states.incl.pl1 >ldd>include>dm_tm_states.incl.pl1 422 3 03/06/85 1031.1 dm_log_sv_codes.incl.pl1 >ldd>include>dm_log_sv_codes.incl.pl1 424 4 04/27/78 1504.4 send_mail_info.incl.pl1 >ldd>include>send_mail_info.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 73 set ref 132 138* 142 147* 153* 204* 206 207* 233* 234 235* 250* 251* 265* 294* 316* 317 396* A_process_id parameter bit(36) dcl 74 ref 142 146 A_txn_id parameter bit(36) dcl 310 in procedure "KILL_TXN" ref 308 314 A_txn_id parameter bit(36) dcl 71 in procedure "tm_daemon_adjust" ref 132 136 A_txn_id parameter bit(36) dcl 227 in procedure "ADJUST_TXN" ref 225 231 A_txn_index parameter fixed bin(17,0) dcl 72 set ref 132 137 352* ERROR_SV 000031 constant fixed bin(17,0) initial dcl 3-36 set ref 207* 235* 251* 282* 296* 298* 300* 337* INFORM_SV 000024 constant fixed bin(17,0) initial dcl 3-38 set ref 352* ME 000231 automatic char(32) unaligned dcl 87 set ref 135* 145* 207* 235* 251* 282* 296* 298* 300* 337* P_code parameter fixed bin(35,0) dcl 292 set ref 290 294 296* 298* 300* P_process_id parameter bit(36) unaligned dcl 389 ref 387 393 P_state parameter fixed bin(17,0) dcl 362 ref 360 364 TM_ABORT_FLUSHING_TXN_STATE constant fixed bin(17,0) initial dcl 2-30 ref 245 TM_ABORT_METERING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 368 TM_ABORT_UNLOCKING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 368 TM_COMMIT_METERING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 368 TM_COMMIT_UNLOCKING_STATE constant fixed bin(17,0) initial dcl 2-30 ref 368 TM_ERROR_INCREMENT constant fixed bin(17,0) initial dcl 2-26 ref 366 366 TM_IN_PROGRESS_STATE constant fixed bin(17,0) initial dcl 2-30 ref 245 TM_TDT_VERSION_3 000000 constant char(8) initial unaligned dcl 1-38 ref 161 abandoned_sw 13 based bit(1) level 3 packed unaligned dcl 1-59 set ref 182 addr builtin function dcl 126 ref 176 272 272 277 277 always_add 11(02) 000267 automatic bit(1) level 3 packed unaligned dcl 4-5 set ref 261* 276* before builtin function dcl 126 ref 383 before_journal_manager_$adjust_process_id 000032 constant entry external dcl 110 ref 204 before_journal_manager_$write_aborted_mark 000034 constant entry external dcl 111 ref 331 code 000260 automatic fixed bin(35,0) dcl 94 set ref 178* 179 281* 282 282* 336* 337 337* convert_status_code_ 000040 constant entry external dcl 113 ref 265 daemon_adjust_count 23 based fixed bin(17,0) level 3 packed unaligned dcl 1-59 set ref 187* 187 dead_process_sw 000253 automatic bit(1) unaligned dcl 91 in procedure "tm_daemon_adjust" set ref 179* 182 202 dead_process_sw 24 based bit(1) level 4 in structure "tm_tdt_entry" packed unaligned dcl 1-59 in procedure "tm_daemon_adjust" set ref 182 dm_data_$current_txn_id 000010 external static bit(36) dcl 98 set ref 321* 349* dm_data_$current_txn_index 000012 external static fixed bin(17,0) dcl 99 set ref 322* 350* dm_data_$tm_tdt_ptr 000014 external static pointer dcl 100 ref 157 dm_error_$not_daemon 000016 external static fixed bin(35,0) dcl 101 ref 153 dm_error_$process_not_found 000026 external static fixed bin(35,0) dcl 105 ref 396 dm_error_$tdt_entry_in_use 000020 external static fixed bin(35,0) dcl 102 set ref 182* dm_misc_util_$log 000036 constant entry external dcl 112 ref 207 235 251 282 296 298 300 337 352 dm_system_data_$initializer_processid 000022 external static bit(36) unaligned dcl 103 ref 150 entry 10 based structure array level 2 dcl 1-41 set ref 176 entry_count 6 based fixed bin(17,0) level 2 dcl 1-41 ref 172 392 412 entry_flags 13 based structure level 2 dcl 1-59 set ref 216* error_code 21 based fixed bin(35,0) level 3 dcl 1-59 set ref 250 error_message 000200 automatic char(100) dcl 86 set ref 265* 267* error_sw 24(02) based bit(1) level 4 packed unaligned dcl 1-59 set ref 249 error_table_$badcall 000024 external static fixed bin(35,0) dcl 104 set ref 172* error_table_$unimplemented_version 000030 external static fixed bin(35,0) dcl 106 set ref 161* event_channel based fixed bin(71,0) level 2 dcl 1-59 set ref 215* fixed builtin function dcl 126 ref 235 235 251 251 267 267 282 282 300 300 337 337 352 352 flags 24 based structure level 3 packed unaligned dcl 1-59 get_process_id_ 000042 constant entry external dcl 114 ref 150 hcs_$validate_processid 000044 constant entry external dcl 115 ref 178 ioa_$rs 000046 constant entry external dcl 116 ref 267 kill_sw 000254 automatic bit(1) unaligned dcl 91 in procedure "tm_daemon_adjust" set ref 180* 191 kill_sw 24(03) based bit(1) level 4 in structure "tm_tdt_entry" packed unaligned dcl 1-59 in procedure "tm_daemon_adjust" set ref 180 lock_manager_$unlock_all 000050 constant entry external dcl 117 ref 345 message 000100 automatic char(256) unaligned dcl 85 set ref 267* 272 272 message_len 000257 automatic fixed bin(21,0) dcl 93 set ref 267* 272 272 name 000356 automatic char(32) unaligned dcl 380 set ref 382* 383 never_add 11(03) 000267 automatic bit(1) level 3 packed unaligned dcl 4-5 set ref 275* notify 11(04) 000267 automatic bit(1) level 3 packed unaligned dcl 4-5 set ref 275* null builtin function dcl 126 ref 159 298 op_name 000241 automatic char(32) unaligned dcl 87 set ref 263* 267* owner_name 3 based char(32) level 2 dcl 1-59 set ref 214* 272 277 382 process_id 2 based bit(36) level 2 in structure "tm_tdt_entry" dcl 1-59 in procedure "tm_daemon_adjust" set ref 178* 204* 207* 218 218 235* 251* 267* 282* 300* 337* 352* process_id 000252 automatic bit(36) unaligned dcl 90 in procedure "tm_daemon_adjust" set ref 146* 165* 296* process_id 12 based bit(36) array level 3 in structure "tm_tdt" dcl 1-41 in procedure "tm_daemon_adjust" set ref 173 393 process_id_entry_sw 000255 automatic bit(1) unaligned dcl 91 set ref 134* 144* 163 296 send_mail_ 000052 constant entry external dcl 118 ref 272 277 send_mail_info 000267 automatic structure level 1 dcl 4-5 set ref 272 272 277 277 send_mail_info_version_2 000266 automatic fixed bin(17,0) initial dcl 4-3 set ref 4-3* sent_from 1 000267 automatic char(32) level 2 dcl 4-5 set ref 259* sfi_p_txn_id parameter bit(36) dcl 409 ref 407 413 sfi_txn_index 000404 automatic fixed bin(17,0) dcl 410 set ref 412* 413 413* stacq builtin function dcl 126 ref 218 state 20(18) based fixed bin(17,0) level 3 in structure "tm_tdt_entry" packed unaligned dcl 1-59 in procedure "tm_daemon_adjust" set ref 235* 245 245* 251* 263 267* 282* 300* 331 337* state 000346 automatic fixed bin(17,0) dcl 362 in procedure "OK_TO_WRITE_MARK" set ref 364* 366 366* 366 368 368 368 368 substr builtin function dcl 126 ref 272 272 switches 11 000267 automatic structure level 2 dcl 4-5 set ref 260* tm_cleanup$restart_error 000054 constant entry external dcl 119 ref 248 tm_daemon_adopt 000060 constant entry external dcl 121 ref 233 316 tm_daemon_adopt$tm_daemon_abandon 000056 constant entry external dcl 120 ref 281 336 tm_tdt based structure level 1 dcl 1-41 tm_tdt_entry based structure level 1 dcl 1-59 tm_tdt_entry_ptr 000264 automatic pointer dcl 1-57 set ref 159* 176* 178 180 182 182 187 187 191 191 195 200 204 207 214 215 216 218 218 235 235 235 235 245 245 249 250 251 251 251 251 263 267 267 267 267 272 277 282 282 282 282 298 300 300 300 300 331 337 337 337 337 347 352 352 352 382 tm_tdt_ptr 000262 automatic pointer dcl 1-35 set ref 157* 161 167 172 173 176 248* 392 393 412 413 transaction 24 based structure array level 3 in structure "tm_tdt" unaligned dcl 1-41 in procedure "tm_daemon_adjust" transaction 14 based structure level 2 in structure "tm_tdt_entry" unaligned dcl 1-59 in procedure "tm_daemon_adjust" set ref 347* transaction_manager_$get_state_info 000062 constant entry external dcl 122 ref 263 txn_id 000251 automatic bit(36) dcl 89 in procedure "tm_daemon_adjust" set ref 136* 167* 170* txn_id 24 based bit(36) array level 4 in structure "tm_tdt" dcl 1-41 in procedure "tm_daemon_adjust" set ref 167 413 txn_id 14 based bit(36) level 3 in structure "tm_tdt_entry" dcl 1-59 in procedure "tm_daemon_adjust" set ref 191 191* 195* 200 235 235 251 251 267 267 282 282 300 300 337 337 352 352 txn_id 000312 automatic bit(36) dcl 227 in procedure "ADJUST_TXN" set ref 231* 233* 281* txn_id 000330 automatic bit(36) dcl 310 in procedure "KILL_TXN" set ref 314* 316* 321 331* 336* txn_index 000256 automatic fixed bin(17,0) dcl 92 in procedure "tm_daemon_adjust" set ref 137* 148* 165* 167 170 170* 172 172 173 176 207* 233* 235* 248* 251* 267* 281* 282* 298* 300* 316* 322 331* 336* 337* txn_index 000374 automatic fixed bin(17,0) dcl 390 in procedure "SEARCH_FOR_PROCESS" set ref 392* 393 393* unspec builtin function dcl 126 set ref 216* 260* 347* version based char(8) level 2 in structure "tm_tdt" dcl 1-41 in procedure "tm_daemon_adjust" ref 161 version 000267 automatic fixed bin(17,0) level 2 in structure "send_mail_info" dcl 4-5 in procedure "tm_daemon_adjust" set ref 258* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CRASH_SV internal static fixed bin(17,0) initial dcl 3-34 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_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_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 string builtin function dcl 126 tdt_max_count automatic fixed bin(17,0) dcl 1-36 NAMES DECLARED BY EXPLICIT CONTEXT. ADJUST_TXN 000652 constant entry internal dcl 225 ref 195 COMMON 000363 constant label dcl 150 ref 140 ERROR_RETURN 001447 constant entry internal dcl 290 ref 161 172 182 KILL 002026 constant entry internal dcl 343 ref 324 334 KILL_TXN 001645 constant entry internal dcl 308 ref 191 OK_TO_WRITE_MARK 002112 constant entry internal dcl 360 ref 331 PERSON_ID 002145 constant entry internal dcl 378 ref 235 235 251 251 267 267 282 282 300 300 337 337 352 352 RETURN 000651 constant label dcl 222 ref 210 239 304 397 SEARCH_FOR_ID 002221 constant entry internal dcl 407 ref 170 SEARCH_FOR_PROCESS 002165 constant entry internal dcl 387 ref 165 tm_adjust_process_id 000340 constant entry external dcl 142 tm_adjust_tdt_entry 000310 constant entry external dcl 132 tm_daemon_adjust 000275 constant entry external dcl 9 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2672 2756 2316 2702 Length 3264 2316 64 271 353 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tm_daemon_adjust 632 external procedure is an external procedure. ADJUST_TXN internal procedure shares stack frame of external procedure tm_daemon_adjust. ERROR_RETURN internal procedure shares stack frame of external procedure tm_daemon_adjust. KILL_TXN internal procedure shares stack frame of external procedure tm_daemon_adjust. KILL internal procedure shares stack frame of external procedure tm_daemon_adjust. OK_TO_WRITE_MARK internal procedure shares stack frame of external procedure tm_daemon_adjust. PERSON_ID internal procedure shares stack frame of external procedure tm_daemon_adjust. SEARCH_FOR_PROCESS internal procedure shares stack frame of external procedure tm_daemon_adjust. SEARCH_FOR_ID internal procedure shares stack frame of external procedure tm_daemon_adjust. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tm_daemon_adjust 000100 message tm_daemon_adjust 000200 error_message tm_daemon_adjust 000231 ME tm_daemon_adjust 000241 op_name tm_daemon_adjust 000251 txn_id tm_daemon_adjust 000252 process_id tm_daemon_adjust 000253 dead_process_sw tm_daemon_adjust 000254 kill_sw tm_daemon_adjust 000255 process_id_entry_sw tm_daemon_adjust 000256 txn_index tm_daemon_adjust 000257 message_len tm_daemon_adjust 000260 code tm_daemon_adjust 000262 tm_tdt_ptr tm_daemon_adjust 000264 tm_tdt_entry_ptr tm_daemon_adjust 000266 send_mail_info_version_2 tm_daemon_adjust 000267 send_mail_info tm_daemon_adjust 000312 txn_id ADJUST_TXN 000330 txn_id KILL_TXN 000346 state OK_TO_WRITE_MARK 000356 name PERSON_ID 000374 txn_index SEARCH_FOR_PROCESS 000404 sfi_txn_index SEARCH_FOR_ID THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry stacq THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. before_journal_manager_$adjust_process_id before_journal_manager_$write_aborted_mark convert_status_code_ dm_misc_util_$log get_process_id_ hcs_$validate_processid ioa_$rs lock_manager_$unlock_all send_mail_ tm_cleanup$restart_error tm_daemon_adopt tm_daemon_adopt$tm_daemon_abandon transaction_manager_$get_state_info THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_data_$current_txn_id dm_data_$current_txn_index dm_data_$tm_tdt_ptr dm_error_$not_daemon dm_error_$process_not_found dm_error_$tdt_entry_in_use dm_system_data_$initializer_processid error_table_$badcall error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 4 3 000270 9 000274 132 000303 134 000321 135 000322 136 000325 137 000330 138 000332 140 000333 142 000334 144 000351 145 000353 146 000356 147 000361 148 000362 150 000363 153 000376 154 000400 157 000401 159 000404 161 000406 163 000421 165 000423 167 000425 168 000432 170 000433 172 000437 173 000455 176 000460 178 000465 179 000476 180 000501 182 000506 187 000525 191 000533 195 000546 200 000554 202 000557 204 000561 206 000572 207 000574 210 000634 214 000635 215 000641 216 000643 218 000644 222 000651 225 000652 231 000654 233 000656 234 000671 235 000673 239 000757 245 000760 248 000770 249 001001 250 001005 251 001007 258 001072 259 001074 260 001077 261 001100 263 001102 265 001131 267 001146 272 001237 275 001302 276 001307 277 001311 281 001345 282 001360 288 001446 290 001447 294 001451 296 001453 298 001515 300 001557 304 001644 308 001645 314 001647 316 001651 317 001664 321 001666 322 001671 324 001673 326 001674 331 001675 334 001723 336 001724 337 001737 358 002025 343 002026 345 002027 347 002034 349 002040 350 002042 352 002043 356 002111 360 002112 364 002114 366 002116 368 002122 374 002140 378 002145 382 002147 383 002153 387 002165 392 002167 393 002177 394 002213 396 002215 397 002220 407 002221 412 002223 413 002233 414 002244 415 002246 ----------------------------------------------------------- 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