COMPILATION LISTING OF SEGMENT tm_suspend Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 03/05/85 0914.3 mst Tue 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_suspend: proc (A_code); 10 11 /* DESCRIPTION: 12* 13* The entry point tm_suspend$tm_suspend suspends the current transaction. 14* The entry point tm_suspend$tm_resume resumes the current transaction. 15**/ 16 17 /* HISTORY: 18* 19*Written by Steve Herbst, 11/05/82. 20*Modified: 21*01/20/83 by Steve Herbst: Added cleanup handlers. 22*03/21/84 by Steve Herbst: Fixed to initialize code argument to zero. 23*10/18/84 by Steve Herbst: Changed in response to audit comments. 24*01/04/85 by Steve Herbst: Reformatted history section in response to audit. 25**/ 26 27 /* DECLARATIONS */ 28 29 /* Parameters */ 30 31 dcl A_code fixed parameter; 32 33 34 35 /* Constants */ 36 37 /* Based */ 38 39 /* Static */ 40 41 /* Automatic */ 42 43 dcl (current_id, suspended_id) bit (36) aligned; 44 dcl (current_index, suspended_index) fixed bin; 45 46 /* External */ 47 48 dcl dm_data_$current_txn_id bit (36) aligned ext; 49 dcl dm_data_$current_txn_index fixed bin ext; 50 dcl dm_data_$suspended_txn_id bit (36) aligned ext; 51 dcl dm_data_$suspended_txn_index fixed bin ext; 52 dcl dm_data_$tm_tdt_ptr ptr ext; 53 dcl dm_error_$no_current_transaction fixed bin (35) ext; 54 dcl dm_error_$no_suspended_transaction fixed bin (35) ext; 55 dcl dm_error_$transaction_in_progress fixed bin (35) ext; 56 dcl dm_error_$transaction_suspended fixed bin (35) ext; 57 dcl dm_error_$transactions_out_of_sequence fixed bin (35) ext; 58 dcl dm_error_$transaction_not_found fixed bin (35) ext; 59 60 /* Entries */ 61 62 dcl tm_get_txn_index entry (ptr, bit (36) aligned, fixed bin (35)) returns (fixed bin); 63 64 /* Builtins */ 65 66 /* Conditions */ 67 68 dcl cleanup condition; 69 70 /* END OF DECLARATIONS */ 71 72 A_code = 0; 73 74 if dm_data_$current_txn_index = 0 & dm_data_$suspended_txn_index = 0 then 75 call ERROR_RETURN (dm_error_$no_current_transaction); 76 77 if dm_data_$suspended_txn_index ^= 0 then 78 if dm_data_$current_txn_index ^= 0 then 79 call ERROR_RETURN (dm_error_$transactions_out_of_sequence); 80 else call ERROR_RETURN (dm_error_$transaction_suspended); 81 82 call SETUP (); 83 84 on cleanup begin; 85 86 tm_tdt.suspended_sw (current_index) = "1"b; 87 88 call SWITCH (); 89 end; 90 91 tm_tdt.suspended_sw (current_index) = "1"b; 92 93 call SWITCH (); 94 RETURN: 95 return; 96 97 tm_resume: entry (A_code); 98 99 /* This entry point resumes the currently suspended transaction. */ 100 101 A_code = 0; 102 103 if dm_data_$current_txn_index = 0 & dm_data_$suspended_txn_index = 0 then 104 call ERROR_RETURN (dm_error_$no_current_transaction); 105 106 if dm_data_$suspended_txn_index = 0 then call ERROR_RETURN (dm_error_$no_suspended_transaction); 107 108 if dm_data_$current_txn_index ^= 0 then call ERROR_RETURN (dm_error_$transaction_in_progress); 109 110 call SETUP (); 111 112 on cleanup begin; 113 114 call SWITCH (); 115 116 tm_tdt.suspended_sw (suspended_index) = "0"b; 117 end; 118 119 call SWITCH (); 120 121 tm_tdt.suspended_sw (suspended_index) = "0"b; 122 123 return; 124 125 ERROR_RETURN: proc (P_code); 126 127 dcl P_code fixed bin (35); 128 129 A_code = P_code; 130 go to RETURN; 131 132 end ERROR_RETURN; 133 134 SETUP: proc; 135 136 current_id = dm_data_$current_txn_id; 137 current_index = dm_data_$current_txn_index; 138 suspended_id = dm_data_$suspended_txn_id; 139 suspended_index = dm_data_$suspended_txn_index; 140 141 tm_tdt_ptr = dm_data_$tm_tdt_ptr; 142 143 end SETUP; 144 145 SWITCH: proc; 146 147 dm_data_$suspended_txn_id = current_id; 148 dm_data_$suspended_txn_index = current_index; 149 dm_data_$current_txn_id = suspended_id; 150 dm_data_$current_txn_index = suspended_index; 151 152 end SWITCH; 153 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 */ 154 155 156 157 end tm_suspend; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/05/85 0800.0 tm_suspend.pl1 >spec>on>7138.pbf>tm_suspend.pl1 154 1 01/07/85 0900.1 dm_tm_tdt.incl.pl1 >ldd>include>dm_tm_tdt.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(17,0) dcl 31 set ref 9 72* 97 101* 129* P_code parameter fixed bin(35,0) dcl 127 ref 125 129 cleanup 000104 stack reference condition dcl 68 ref 84 112 current_id 000100 automatic bit(36) dcl 43 set ref 136* 147 current_index 000102 automatic fixed bin(17,0) dcl 44 set ref 86 91 137* 148 dm_data_$current_txn_id 000010 external static bit(36) dcl 48 set ref 136 149* dm_data_$current_txn_index 000012 external static fixed bin(17,0) dcl 49 set ref 74 77 103 108 137 150* dm_data_$suspended_txn_id 000014 external static bit(36) dcl 50 set ref 138 147* dm_data_$suspended_txn_index 000016 external static fixed bin(17,0) dcl 51 set ref 74 77 103 106 139 148* dm_data_$tm_tdt_ptr 000020 external static pointer dcl 52 ref 141 dm_error_$no_current_transaction 000022 external static fixed bin(35,0) dcl 53 set ref 74* 103* dm_error_$no_suspended_transaction 000024 external static fixed bin(35,0) dcl 54 set ref 106* dm_error_$transaction_in_progress 000026 external static fixed bin(35,0) dcl 55 set ref 108* dm_error_$transaction_suspended 000030 external static fixed bin(35,0) dcl 56 set ref 80* dm_error_$transactions_out_of_sequence 000032 external static fixed bin(35,0) dcl 57 set ref 77* entry 10 based structure array level 2 dcl 1-41 flags 34 based structure array level 4 packed unaligned dcl 1-41 suspended_id 000101 automatic bit(36) dcl 43 set ref 138* 149 suspended_index 000103 automatic fixed bin(17,0) dcl 44 set ref 116 121 139* 150 suspended_sw 34(01) based bit(1) array level 5 packed unaligned dcl 1-41 set ref 86* 91* 116* 121* tm_tdt based structure level 1 dcl 1-41 tm_tdt_entry based structure level 1 dcl 1-59 tm_tdt_ptr 000112 automatic pointer dcl 1-35 set ref 86 91 116 121 141* transaction 24 based structure array level 3 unaligned dcl 1-41 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. TM_TDT_VERSION_3 internal static char(8) initial unaligned dcl 1-38 dm_error_$transaction_not_found external static fixed bin(35,0) dcl 58 tdt_max_count automatic fixed bin(17,0) dcl 1-36 tm_get_txn_index 000000 constant entry external dcl 62 tm_tdt_entry_ptr automatic pointer dcl 1-57 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 000226 constant entry internal dcl 125 ref 74 77 80 103 106 108 RETURN 000114 constant label dcl 94 ref 130 SETUP 000234 constant entry internal dcl 134 ref 82 110 SWITCH 000253 constant entry internal dcl 145 ref 88 93 114 119 tm_resume 000117 constant entry external dcl 97 tm_suspend 000007 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 502 536 273 512 Length 740 273 34 166 206 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tm_suspend 94 external procedure is an external procedure. on unit on line 84 64 on unit on unit on line 112 64 on unit ERROR_RETURN internal procedure shares stack frame of external procedure tm_suspend. SETUP internal procedure shares stack frame of external procedure tm_suspend. SWITCH 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tm_suspend 000100 current_id tm_suspend 000101 suspended_id tm_suspend 000102 current_index tm_suspend 000103 suspended_index tm_suspend 000112 tm_tdt_ptr tm_suspend THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_int_this call_int_other return enable ext_entry int_entry NO EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_data_$current_txn_id dm_data_$current_txn_index dm_data_$suspended_txn_id dm_data_$suspended_txn_index dm_data_$tm_tdt_ptr dm_error_$no_current_transaction dm_error_$no_suspended_transaction dm_error_$transaction_in_progress dm_error_$transaction_suspended dm_error_$transactions_out_of_sequence LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 9 000004 72 000014 74 000016 77 000030 80 000044 82 000052 84 000053 86 000067 88 000075 89 000102 91 000103 93 000110 94 000114 97 000115 101 000124 103 000126 106 000141 108 000152 110 000163 112 000164 114 000200 116 000205 117 000213 119 000214 121 000220 123 000225 125 000226 129 000230 130 000233 134 000234 136 000235 137 000240 138 000242 139 000244 141 000246 143 000251 145 000252 147 000260 148 000263 149 000265 150 000267 152 000271 ----------------------------------------------------------- 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