[med-svn] [fis-gtm] 01/01: Imported Upstream version 6.3-003A
Amul Shah
tuskentower-guest at moszumanska.debian.org
Tue Jan 23 12:48:35 UTC 2018
This is an automated email from the git hooks/post-receive script.
tuskentower-guest pushed a commit to annotated tag upstream/6.3-003A
in repository fis-gtm.
commit e19ff6011556757ed2cfdfe7ec36dc17e4f5b755
Author: Amul Shah <amul.shah at fisglobal.com>
Date: Mon Jan 22 04:43:17 2018 -0500
Imported Upstream version 6.3-003A
---
CMakeLists.txt | 58 +-
LICENSE | 2 +-
README | 16 +-
sr_i386/GTMDefinedTypesInitDebug.m | 1949 +++++++++++++-----------
sr_i386/GTMDefinedTypesInitRelease.m | 1923 ++++++++++++-----------
sr_i386/cmerrors_ctl.c | 2 +-
sr_i386/cmierrors_ctl.c | 2 +-
sr_i386/gdeerrors_ctl.c | 6 +-
sr_i386/merrors_ansi.h | 12 +-
sr_i386/merrors_ctl.c | 56 +-
sr_i386/ttt.c | 761 +++++----
sr_linux/gtm_env_sp.csh | 2 +-
sr_linux/platform.cmake | 3 +-
sr_linux/release_name.h | 10 +-
sr_port/aio_shim.h | 10 +-
sr_port/alloc_reg.c | 28 +-
sr_port/anticipatory_freeze.h | 202 +--
sr_port/bx_boollit.c | 45 +-
sr_port/bx_boolop.c | 210 +--
sr_port/bx_relop.c | 26 +-
sr_port/cdb_sc_table.h | 3 +-
sr_port/cert_blk.c | 164 +-
sr_port/cert_blk.h | 43 +-
sr_port/change_reg.c | 18 +-
sr_port/cli_port.c | 47 +-
sr_port/cliif.h | 4 +-
sr_port/cmd.c | 4 +
sr_port/create_dummy_gbldir.c | 4 +-
sr_port/db_auto_upgrade.c | 5 +-
sr_port/db_csh_getn.c | 23 +-
sr_port/do_patfixed.c | 27 +-
sr_port/do_pattern.c | 34 +-
sr_port/dpgbldir.c | 7 +-
sr_port/dse.hlp | 106 +-
sr_port/dse_dmp_fhead.c | 7 +-
sr_port/dse_f_reg.c | 4 +-
sr_port/dse_integ.c | 2 +-
sr_port/dsewrap.mpt | 9 +-
sr_port/dumpfhead.mpt | 3 +
sr_port/emit_code.c | 2 +-
sr_port/entryref.c | 11 +-
sr_port/error_trap.h | 9 +-
sr_port/expritem.c | 8 +-
sr_port/f_select.c | 15 +-
sr_port/fullbool.h | 12 +-
sr_port/gbldefs.c | 18 +-
sr_port/gbldefs_usr_share.c | 5 +-
sr_port/gde.hlp | 346 +++--
sr_port/gdechang.m | 13 +-
sr_port/gdeerrors.msg | 4 +-
sr_port/gdeexit.m | 8 +-
sr_port/gdeinit.m | 17 +-
sr_port/gdeinitsz.m | 12 +-
sr_port/gdeparse.m | 6 +-
sr_port/gdeshow.m | 33 +-
sr_port/gds_rundown.h | 6 +-
sr_port/gdsbt.h | 33 +-
sr_port/gdsdbver_sp.h | 1 +
sr_port/gdsfhead.h | 211 ++-
sr_port/get_dlr_device.c | 10 +-
sr_port/gtm_connect.c | 4 +-
sr_port/gtm_env_init.c | 7 +
sr_port/gtm_libaio.h | 20 +-
sr_port/gtm_newintrinsic.c | 8 +-
sr_port/gtm_savetraps.c | 13 +-
sr_port/gtm_string.h | 4 +-
sr_port/gtm_threadgbl_defs.h | 7 +
sr_port/gtmmsg.h | 22 +-
sr_port/gtmrecv_get_opt.c | 5 +-
sr_port/gtmsource_ch.c | 10 +-
sr_port/gtmsource_comm_init.c | 7 +-
sr_port/gtmsource_ctl_init.c | 8 +-
sr_port/gtmsource_heartbeat.h | 5 +-
sr_port/gtmsource_poll_actions.c | 16 +-
sr_port/gtmsource_reinit_logseqno.c | 13 +-
sr_port/gv_bind_name.c | 4 +-
sr_port/gv_init_reg.c | 9 +-
sr_port/gv_rundown.c | 58 +-
sr_port/gvcst_blk_search.c | 24 +-
sr_port/gvcst_blk_search.h | 5 +-
sr_port/gvcst_bmp_mark_free.c | 2 +-
sr_port/gvcst_delete_blk.c | 4 +-
sr_port/gvcst_init.c | 455 ++++--
sr_port/gvcst_kill.c | 10 +-
sr_port/gvcst_protos.h | 2 +-
sr_port/gvcst_put.c | 11 +-
sr_port/gvcst_reservedDB_funcs.c | 64 +-
sr_port/gvnh_spanreg_subs_gvt_init.c | 2 +-
sr_port/have_crit.c | 38 +-
sr_port/have_crit.h | 5 +-
sr_port/io.h | 124 +-
sr_port/io_rundown.c | 2 +-
sr_port/ionl_use.c | 37 +-
sr_port/iosocket_bind.c | 83 +-
sr_port/iosocket_close.c | 35 +-
sr_port/iosocket_connect.c | 19 +-
sr_port/iosocket_destroy.c | 5 +
sr_port/iosocket_flush.c | 32 +-
sr_port/iosocket_iocontrol.c | 7 +-
sr_port/iosocket_open.c | 100 +-
sr_port/iosocket_readfl.c | 14 +-
sr_port/iosocket_use.c | 147 +-
sr_port/iosocket_write.c | 13 +-
sr_port/iosocketdef.h | 63 +-
sr_port/jmp_opto.c | 7 +-
sr_port/jnl.h | 22 +-
sr_port/jnl_file_lost.c | 20 +-
sr_port/jnl_file_open_common.c | 3 +-
sr_port/jnl_pool_write.c | 20 +-
sr_port/jnl_send_oper.c | 4 +-
sr_port/jnl_set_cur_prior.c | 2 +-
sr_port/jnl_write.c | 1 +
sr_port/jnl_write_attempt.c | 33 +-
sr_port/jnl_write_eof_rec.c | 10 +-
sr_port/jnl_write_epoch_rec.c | 10 +-
sr_port/jnl_write_inctn_rec.c | 1 -
sr_port/jnl_write_pblk.c | 2 +-
sr_port/line.c | 2 +
sr_port/lke.hlp | 2 +-
sr_port/lke_cleartree.c | 18 +-
sr_port/lke_show.c | 19 +-
sr_port/lke_showtree.c | 10 +-
sr_port/lvzwr_out.c | 37 +-
sr_port/m_halt.c | 11 +-
sr_port/m_zhalt.c | 25 +-
sr_port/mdb_condition_handler.c | 66 +-
sr_port/mdef.h | 11 +-
sr_port/merge_desc_check.c | 4 +-
sr_port/merrors.msg | 42 +-
sr_port/{lk_check_own.c => mlk_check_own.c} | 22 +-
sr_port/{lk_check_own.h => mlk_check_own.h} | 5 +-
sr_port/{lkinit.c => mlk_gbldef.c} | 3 +-
sr_port/mlk_lock.c | 2 +-
sr_port/mlk_pvtblk_create.c | 24 +-
sr_port/mlk_pvtblk_equ.c | 7 +-
sr_port/mlk_region_lookup.c | 6 +-
sr_port/mlk_shr_init.c | 22 +-
sr_port/mlk_shrblk_create.c | 134 +-
sr_port/mlk_shrblk_delete_if_empty.c | 64 +-
sr_port/mlk_shrblk_find.c | 171 ++-
sr_port/mlk_shrblk_sort.c | 136 ++
sr_port/mlk_unlock.c | 2 +-
sr_port/mlk_wake_pending.c | 51 +-
sr_port/mlkdef.h | 133 +-
sr_port/mprof_funcs.c | 4 +-
sr_port/mtables.c | 3 +
sr_port/mu_freeze_ch.c | 4 +
sr_port/mu_gv_cur_reg_init.c | 10 +
sr_port/mu_int_err.c | 23 +-
sr_port/mu_int_reg.c | 4 +-
sr_port/mu_reorg_upgrd_dwngrd.c | 6 +-
sr_port/mubclnup.c | 29 +-
sr_port/mucregini.c | 1 +
sr_port/mumps.hlp | 379 +++--
sr_port/mupip.hlp | 1140 +++++++++-----
sr_port/mupip_backup.c | 129 +-
sr_port/mupip_downgrade.c | 6 +-
sr_port/mupip_extend.c | 4 +-
sr_port/mupip_freeze.c | 6 +-
sr_port/mupip_recover.c | 27 +-
sr_port/mupip_set.c | 8 +-
sr_port/mupip_set_jnlfile_aux.c | 11 +-
sr_port/mupip_set_journal.c | 18 +-
sr_port/mupip_set_journal_fname.c | 8 +-
sr_port/mur_apply_pblk.c | 18 +-
sr_port/mur_back_process.c | 46 +-
sr_port/mur_close_file_extfmt.c | 4 +-
sr_port/mur_close_files.c | 104 +-
sr_port/mur_db_files_from_jnllist.c | 8 +-
sr_port/mur_do_wildcard.c | 32 +-
sr_port/mur_get_options.c | 18 +-
sr_port/mur_open_files.c | 63 +-
sr_port/mur_process_intrpt_recov.c | 2 +-
sr_port/mur_process_seqno_table.c | 13 +-
sr_port/mur_tp_resolve_time.c | 4 +-
sr_port/mur_write_header_extfmt.c | 12 +-
sr_port/mutex_deadlock_check.c | 9 +-
sr_port/mval2fao.c | 5 +-
sr_port/objlabel.h | 2 +-
sr_port/op.h | 3 +-
sr_port/op_bindparm.c | 13 +-
sr_port/op_dmode.c | 2 +-
sr_port/op_fnname.c | 46 +-
sr_port/op_fnquery.c | 12 +-
sr_port/op_fntranslate.c | 1 +
sr_port/op_fnview.c | 95 +-
sr_port/op_fnztrigger.c | 40 +-
sr_port/op_gvorder.c | 29 +-
sr_port/op_gvrectarg.c | 5 +-
sr_port/op_halt.c | 46 -
sr_port/op_lock2.c | 7 +-
sr_port/op_newintrinsic.c | 20 +-
sr_port/op_open.c | 2 +
sr_port/op_putindx.c | 43 +-
sr_port/op_rdone.c | 1 +
sr_port/op_read.c | 2 +
sr_port/op_readfl.c | 2 +
sr_port/op_setzbrk.c | 6 +-
sr_port/op_svget.c | 15 +-
sr_port/op_svput.c | 63 +-
sr_port/op_tcommit.c | 6 +
sr_port/op_trollback.c | 6 +
sr_port/op_unwind.c | 3 +-
sr_port/op_view.c | 20 +-
sr_port/op_zbreak.c | 9 +-
sr_port/op_zg1.c | 31 +-
sr_port/op_zgoto.c | 4 +-
sr_port/op_zhalt.c | 89 +-
sr_port/op_zprevious.c | 35 +-
sr_port/op_zshow.c | 21 +-
sr_port/op_zst_break.c | 9 +-
sr_port/op_zstep.c | 10 +-
sr_port/op_zsystem.c | 4 +-
sr_port/op_ztcommit.c | 5 +-
sr_port/opcode_def.h | 1 -
sr_port/parm_pool.h | 5 +-
sr_port/patcode.h | 23 +-
sr_port/patstr.c | 8 +-
sr_port/process_deferred_stale.c | 17 +-
sr_port/process_gvt_pending_list.c | 9 +-
sr_port/region_freeze.c | 18 +-
sr_port/region_init.c | 2 +-
sr_port/repl_phase2_cleanup.c | 2 +
sr_port/repl_phase2_salvage.c | 2 +-
sr_port/resolve_ref.c | 15 +-
sr_port/restrict.c | 11 +-
sr_port/restrict.h | 2 +
sr_port/s2n.c | 4 +-
sr_port/sec_shr_blk_build.c | 7 +-
sr_port/sec_shr_blk_build.h | 6 +-
sr_port/secshr_blk_full_build.c | 169 ++
sr_port/secshr_db_clnup.c | 1495 ++++--------------
sr_port/secshr_db_clnup.h | 78 +-
sr_port/secshr_finish_CMT08_to_CMT14.c | 552 +++++++
sr_port/secshr_finish_CMT18.c | 261 ++++
sr_port/secshr_finish_CMT18_to_CMT19.c | 182 +++
sr_port/secshr_rel_crit.c | 83 +
sr_port/secshr_send_DBCLNUPINFO_msg.c | 44 +
sr_port/sgnl_gvnulsubsc.c | 4 +-
sr_port/stp_gcol_src.h | 22 +-
sr_port/stpg_sort.c | 16 +-
sr_port/stx_error.c | 10 +
sr_port/svnames.h | 3 +-
sr_port/symb_line.c | 8 +-
sr_port/t_commit_cleanup.c | 54 +-
sr_port/t_end.c | 103 +-
sr_port/t_end_sysops.c | 27 +-
sr_port/t_retry.c | 33 +-
sr_port/tp.h | 70 +-
sr_port/tp_change_reg.c | 16 +-
sr_port/tp_clean_up.c | 1 +
sr_port/tp_hist.c | 9 +-
sr_port/tp_incr_clean_up.c | 30 +-
sr_port/tp_restart.c | 47 +-
sr_port/tp_set_sgm.c | 3 +
sr_port/tp_tend.c | 89 +-
sr_port/tp_timeout.c | 12 +-
sr_port/trans_code.c | 21 +-
sr_port/trans_code_cleanup.c | 9 +-
sr_port/trans_code_cleanup.h | 7 +-
sr_port/trap_env_init.c | 143 ++
sr_port/{ztrap_form_init.h => trap_env_init.h} | 9 +-
sr_port/unary_tail.c | 10 +
sr_port/unw_mv_ent.c | 18 +-
sr_port/updhelper_writer.c | 7 +-
sr_port/updproc.c | 83 +-
sr_port/updproc_end.c | 16 +-
sr_port/updproc_init.c | 20 +-
sr_port/updproc_open_files.c | 62 +-
sr_port/viewtab.h | 1 +
sr_port/wbox_test_init.h | 9 +-
sr_port/wcs_recover.c | 41 +-
sr_port/wcs_verify.c | 32 +-
sr_port/xcmd.mpt | 6 +-
sr_port/xfer.h | 3 +-
sr_port/zshow.h | 7 +-
sr_port/zshow_gvstats.c | 31 +-
sr_port/zshow_locks.c | 100 +-
sr_port/zshow_svn.c | 21 +-
sr_port/ztrap_form_init.c | 68 -
sr_port_cm/gtcmd_cst_init.c | 9 +-
sr_port_cm/gtcmd_rundown.c | 2 +
sr_port_cm/gtcml_lklist.c | 10 +-
sr_port_cm/gvcmz_lksublist.c | 11 +-
sr_unix/add_inter.c | 11 +-
sr_unix/anticipatory_freeze.c | 45 +-
sr_unix/bin_load.c | 13 +-
sr_unix/cli.c | 47 +-
sr_unix/cli_parse.c | 8 +-
sr_unix/configure.gtc | 2 +-
sr_unix/db_ipcs_reset.c | 14 +-
sr_unix/dbfilop.c | 1 +
sr_unix/dm_read.c | 6 +-
sr_unix/dpgbldir_sysops.c | 24 +-
sr_unix/err_init.c | 4 +-
sr_unix/fake_enospc.c | 7 +-
sr_unix/ftok_sem_incrcnt.c | 8 +-
sr_unix/ftok_sems.c | 6 +-
sr_unix/gbldirnam.h | 6 +-
sr_unix/gdeget.m | 59 +-
sr_unix/gdeput.m | 13 +
sr_unix/gdeverif.m | 4 +-
sr_unix/gds_rundown.c | 77 +-
sr_unix/gdsfilext.c | 45 +-
sr_unix/generate_help.csh | 7 +-
sr_unix/get_src_line.c | 3 +-
sr_unix/grab_crit.c | 31 +-
sr_unix/grab_crit_immediate.c | 4 +-
sr_unix/grab_lock.c | 19 +-
sr_unix/gt_timers.c | 24 +-
sr_unix/gtm_aio.h | 49 +-
sr_unix/gtm_c_stack_trace_semop.c | 17 +-
sr_unix/gtm_env_init_sp.c | 50 -
sr_unix/gtm_file_stat.c | 7 +-
sr_unix/gtm_ipc.h | 27 +-
sr_unix/gtm_logicals.h | 1 +
sr_unix/gtm_putmsg.c | 10 +-
sr_unix/gtm_putmsg_list.c | 7 +-
sr_unix/gtm_rel_quant.h | 5 +-
sr_unix/gtm_repl_multi_inst.h | 43 +
sr_unix/gtm_startup.c | 5 +-
sr_unix/gtm_trigger.c | 19 +-
sr_unix/gtmcrypt_dbk_ref.c | 2 +-
sr_unix/gtmdefinedtypestodb.m | 4 +-
sr_unix/gtmhelp.m | 16 +-
sr_unix/gtmhlpld.m | 3 +-
sr_unix/gtminstall.sh | 50 +-
sr_unix/gtmio.h | 26 +-
sr_unix/gtmrecv.c | 43 +-
sr_unix/gtmrecv.h | 41 +-
sr_unix/gtmrecv_end.c | 16 +-
sr_unix/gtmrecv_fetchresync.c | 23 +-
sr_unix/gtmrecv_poll_actions.c | 14 +-
sr_unix/gtmrecv_process.c | 153 +-
sr_unix/gtmrecv_shutdown.c | 14 +-
sr_unix/gtmsecshr.c | 14 +-
sr_unix/gtmsource.c | 54 +-
sr_unix/gtmsource.h | 82 +-
sr_unix/gtmsource_changelog.c | 26 +-
sr_unix/gtmsource_checkforbacklog.c | 18 +-
sr_unix/gtmsource_checkhealth.c | 25 +-
sr_unix/gtmsource_end.c | 22 +-
sr_unix/gtmsource_flush_fh.c | 17 +-
sr_unix/gtmsource_freeze.c | 27 +-
sr_unix/gtmsource_get_opt.c | 10 +-
sr_unix/gtmsource_heartbeat.c | 21 +-
sr_unix/gtmsource_jnlpool.c | 31 +-
sr_unix/gtmsource_losttncomplete.c | 21 +-
sr_unix/gtmsource_mode_change.c | 52 +-
sr_unix/gtmsource_needrestart.c | 15 +-
sr_unix/gtmsource_onln_rlbk_clnup.c | 13 +-
sr_unix/gtmsource_process.c | 66 +-
sr_unix/gtmsource_process_ops.c | 138 +-
sr_unix/gtmsource_readfiles.c | 27 +-
sr_unix/gtmsource_readpool.c | 10 +-
sr_unix/gtmsource_rootprimary_init.c | 59 +-
sr_unix/gtmsource_seqno_init.c | 49 +-
sr_unix/gtmsource_showbacklog.c | 19 +-
sr_unix/gtmsource_shutdown.c | 37 +-
sr_unix/gtmsource_srv_latch.c | 18 +-
sr_unix/gtmsource_statslog.c | 15 +-
sr_unix/gtmsource_stopfilter.c | 11 +-
sr_unix/gtmthreadgblasm.m | 5 +-
sr_unix/gv_trigger.h | 2 +-
sr_unix/gvcst_init_sysops.c | 124 +-
sr_unix/io_open_try.c | 204 +--
sr_unix/iopi_iocontrol.c | 15 +-
sr_unix/iopi_open.c | 145 +-
sr_unix/iorm_close.c | 58 +-
sr_unix/iorm_readfl.c | 280 +++-
sr_unix/iorm_use.c | 158 +-
sr_unix/iorm_write.c | 28 +-
sr_unix/iorm_wteol.c | 6 +-
sr_unix/iormdef.h | 11 +-
sr_unix/iosocket_pass_local.c | 33 +-
sr_unix/iosocket_tls.c | 74 +-
sr_unix/iott_close.c | 7 +-
sr_unix/iott_iocontrol.c | 10 +-
sr_unix/iott_use.c | 13 +-
sr_unix/iottdefsp.h | 14 +-
sr_unix/jnl_file_close_timer.c | 0
sr_unix/jnl_file_extend.c | 5 +-
sr_unix/jnlpool_init.c | 480 ++++--
sr_unix/kitstart.csh | 3 +-
sr_unix/mu_cre_file.c | 5 +-
sr_unix/mu_extract.c | 7 +-
sr_unix/mu_op_open.c | 2 -
sr_unix/mu_replpool_grab_sem.c | 15 +-
sr_unix/mu_replpool_release_sem.c | 14 +-
sr_unix/mu_rndwn_file.c | 29 +-
sr_unix/mu_rndwn_repl_instance.c | 58 +-
sr_unix/mu_rndwn_replpool.c | 67 +-
sr_unix/mu_rndwn_replpool.h | 14 +-
sr_unix/mu_truncate.c | 6 +-
sr_unix/mubexpfilnam.c | 2 +-
sr_unix/mucblkini.c | 3 +
sr_unix/mumps_clitab.c | 6 +-
sr_unix/mupip_cmd.c | 81 +-
sr_unix/mupip_cvtgbl.c | 17 +-
sr_unix/mupip_endiancvt.c | 4 +-
sr_unix/mupip_exit_handler.c | 2 +-
sr_unix/mupip_ftok.c | 17 +-
sr_unix/mupip_reorg_encrypt.c | 4 +-
sr_unix/mupip_rundown.c | 39 +-
sr_unix/mupip_set_file.c | 123 +-
sr_unix/mupip_size.c | 4 +-
sr_unix/mutex.c | 28 +-
sr_unix/ojstartchild.c | 5 +-
sr_unix/op_fngetjpi.c | 6 +-
sr_unix/op_fnzpeek.c | 34 +-
sr_unix/op_job.c | 1 +
sr_unix/op_zlink.c | 6 +-
sr_unix/op_ztrigger.c | 8 +-
sr_unix/peekbyname.mpt | 1 +
sr_unix/pinentry.m | 5 +-
sr_unix/recvpool_init.c | 126 +-
sr_unix/rel_crit.c | 16 +-
sr_unix/rel_lock.c | 16 +-
sr_unix/rel_quant.c | 13 +-
sr_unix/repl_inst_create.c | 2 +-
sr_unix/repl_inst_dump.c | 2 +-
sr_unix/repl_inst_ftok_counter_halted.c | 34 +-
sr_unix/repl_instance.c | 308 ++--
sr_unix/repl_instance.h | 42 +-
sr_unix/repl_ipc_cleanup.c | 11 +-
sr_unix/repl_sem.c | 4 +-
sr_unix/rts_error.c | 5 +-
sr_unix/secshr_client.c | 6 +-
sr_unix/send_msg.c | 14 +-
sr_unix/set_zstatus.c | 1 -
sr_unix/source_file.c | 33 +-
sr_unix/ss_initiate.c | 5 +-
sr_unix/trigger_delete.c | 18 +-
sr_unix/trigger_fill_xecute_buffer.c | 15 +-
sr_unix/trigger_gbl_fill_xecute_buffer.c | 10 +-
sr_unix/trigger_locate_andor_load.c | 20 +-
sr_unix/trigger_select.c | 10 +-
sr_unix/trigger_source_read_andor_verify.c | 25 +-
sr_unix/trigger_update.c | 56 +-
sr_unix/ttt.txt | 6 +-
sr_unix/util_exit_handler.c | 2 +
sr_unix/util_output.c | 13 +-
sr_unix/versions.csh | 2 +-
sr_unix/wait_for_disk_space.c | 35 +-
sr_unix/wcs_clean_dbsync.c | 8 +-
sr_unix/wcs_wt.h | 25 +-
sr_unix/wcs_wtstart.c | 45 +-
sr_unix/ygblstat.mpt | 10 +-
sr_unix_cm/omi_lkextnam.c | 20 +-
sr_unix_cm/omi_prc_unlc.c | 8 +-
sr_unix_cm/rc_fnd_file.c | 4 +-
sr_unix_cm/rc_prc_lock.c | 54 +-
sr_unix_nsb/ttt.txt | 6 +-
sr_x86_64/GTMDefinedTypesInitDebug.m | 1595 ++++++++++---------
sr_x86_64/GTMDefinedTypesInitRelease.m | 1569 ++++++++++---------
sr_x86_64/cmerrors_ctl.c | 2 +-
sr_x86_64/cmierrors_ctl.c | 2 +-
sr_x86_64/gdeerrors_ctl.c | 6 +-
sr_x86_64/merrors_ansi.h | 12 +-
sr_x86_64/merrors_ctl.c | 56 +-
sr_x86_64/ttt.c | 1415 +++++++++--------
461 files changed, 15308 insertions(+), 11175 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 60aff43..8c03b84 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@ foreach(lang ${languages})
endforeach()
# Defaults
-set(version V6.3-002)
+set(version V6.3-003A)
if("${version}" STREQUAL "")
set(version V9.9-0)
endif()
@@ -816,7 +816,7 @@ set(lke_hlp lke.hlp)
foreach(help gtm gde mupip dse lke)
set(CMAKE_CONFIGURABLE_FILE_CONTENT
"Change -segment DEFAULT -block=2048 -file=\$gtm_dist/${help}help.dat
-Change -region DEFAULT -record=1020 -key=255
+Change -region DEFAULT -record=1020 -key=255 -qdbrundown -nostats
exit")
configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in
${GTM_BINARY_DIR}/${help}help.in1)
@@ -857,7 +857,7 @@ endforeach()
if (GTMDefinedTypesInit${CMAKE_BUILD_TYPE}_found)
add_custom_command(
OUTPUT GTMDEFINEDTYPESTODB.o
- DEPENDS gtmhelp.dat gtmhelp.gld GTMDefinedTypesInit${CMAKE_BUILD_TYPE}.m
+ DEPENDS gtmhelp.dat gtmhelp.gld GTMDefinedTypesInit${CMAKE_BUILD_TYPE}.m ${GTM_BINARY_DIR}/gtmhelp.dat_noro
COMMAND ${CMAKE_COMMAND} -E copy GTMDefinedTypesInit${CMAKE_BUILD_TYPE}.m ${GTM_BINARY_DIR}/GTMDefinedTypesInit.m
COMMAND ${CMAKE_COMMAND}
-D gtm_dist=${GTM_BINARY_DIR}
@@ -870,6 +870,56 @@ add_custom_command(
)
list(APPEND files_to_place GTMDEFINEDTYPESTODB.o)
endif(GTMDefinedTypesInit${CMAKE_BUILD_TYPE}_found)
+
+foreach(help gtm gde mupip dse lke)
+ set(CMAKE_CONFIGURABLE_FILE_CONTENT
+ "SET -ACC=MM -READ_ONLY -reg \"*\"
+exit")
+ configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in
+ ${GTM_BINARY_DIR}/${help}help.in3)
+ set(env
+ -D gtm_dist=${GTM_BINARY_DIR}
+ -D gtmroutines=.
+ -D gtmgbldir=${GTM_BINARY_DIR}/${help}help
+ )
+ add_custom_command(
+ OUTPUT ${GTM_BINARY_DIR}/${help}help.dat_ro
+ DEPENDS ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake mumps mupip
+ ${GTM_BINARY_DIR}/${help}help.in3
+ ${help}help.dat ${help}help.gld ${help}help.dat_noro
+ COMMAND ${CMAKE_COMMAND} ${env}
+ -D mumps=$<TARGET_FILE:mupip>
+ -D input_file=${GTM_BINARY_DIR}/${help}help.in3
+ -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake
+ VERBATIM
+ )
+ list(APPEND targets_to_run ${GTM_BINARY_DIR}/${help}help.dat_ro)
+endforeach()
+
+foreach(help gtm gde mupip dse lke)
+ set(CMAKE_CONFIGURABLE_FILE_CONTENT
+ "SET -ACC=MM -NOREAD_ONLY -reg \"*\"
+exit")
+ configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in
+ ${GTM_BINARY_DIR}/${help}help.in4)
+ set(env
+ -D gtm_dist=${GTM_BINARY_DIR}
+ -D gtmroutines=.
+ -D gtmgbldir=${GTM_BINARY_DIR}/${help}help
+ )
+ add_custom_command(
+ OUTPUT ${GTM_BINARY_DIR}/${help}help.dat_noro
+ DEPENDS ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake mumps mupip
+ ${GTM_BINARY_DIR}/${help}help.in4
+ ${help}help.dat ${help}help.gld
+ COMMAND ${CMAKE_COMMAND} ${env}
+ -D mumps=$<TARGET_FILE:mupip>
+ -D input_file=${GTM_BINARY_DIR}/${help}help.in4
+ -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake
+ VERBATIM
+ )
+ list(APPEND targets_to_run ${GTM_BINARY_DIR}/${help}help.dat_noro)
+endforeach()
#-----------------------------------------------------------------------------
set(GTM_TOP "${GTM_BINARY_DIR}")
@@ -897,4 +947,4 @@ if (EXISTS ${GTM_SOURCE_DIR}/COPYING)
endif()
add_custom_target(place_files ALL DEPENDS ${files_to_place})
-
+add_custom_target(make_read_only ALL DEPENDS ${targets_to_run} place_files)
diff --git a/LICENSE b/LICENSE
index 8b3ce06..198b1fe 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-All software in this package is part of FIS GT.M (http://fis-gtm.com) which is Copyright 2017 Fidelity Information
+All software in this package is part of FIS GT.M (http://fis-gtm.com) which is Copyright 2018 Fidelity Information
Services, Inc., and provided to you under the terms of a license. If there is a COPYING file included in this package,
it contains the terms of the license under which the package is provided to you. If there is not a COPYING file in the
package, you must ensure that your use of FIS GT.M complies with the license under which it is provided. If you are
diff --git a/README b/README
index f674fe3..87d492f 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
All software in this package is part of FIS GT.M (http://fis-gtm.com)
-which is Copyright 2017 Fidelity Information Services, Inc., and
+which is Copyright 2018 Fidelity Information Services, Inc., and
provided to you under the terms of a license. If there is a COPYING
file included in this package, it contains the terms of the license under
which the package is provided to you. If there is not a COPYING file in
@@ -25,16 +25,16 @@ To build GT.M for Linux, do the following steps:
2. Unpack the GT.M sources
The GT.M source tarball extracts to a directory with the version number in
- the name, fis-gtm-V6.3-002
- $ tar xfz fis-gtm-V6.3-002.tar.gz
- $ cd fis-gtm-V6.3-002
+ the name, fis-gtm-V6.3-003A
+ $ tar xfz fis-gtm-V6.3-003A.tar.gz
+ $ cd fis-gtm-V6.3-003A
You should find this README, LICENSE, COPYING and CMakeLists.txt file and
sr_* source directories.
3. Building GT.M -
<fis-gtm-build> can be a sub directory of the source directory,
- fis-gtm-V6.3-002, or any other valid path.
+ fis-gtm-V6.3-003A, or any other valid path.
$ mkdir <fis-gtm-build>
$ cd <fis-gtm-build>
@@ -53,16 +53,16 @@ To build GT.M for Linux, do the following steps:
#
# -D CMAKE_INSTALL_PREFIX:PATH=${PWD}/package
#
- $ cmake -D CMAKE_INSTALL_PREFIX:PATH=${PWD}/package <path to>/fis-gtm-V6.3-002
+ $ cmake -D CMAKE_INSTALL_PREFIX:PATH=${PWD}/package <path to>/fis-gtm-V6.3-003A
$ make
$ make install
- $ cd package/lib/fis-gtm/V6.3-002_x86_64
+ $ cd package/lib/fis-gtm/V6.3-003A_x86_64
# Now you are ready to install GT.M. Answer a few questions and install it.
- # The recommended installation path is /opt/fis-gtm/V6.3-002_x86_64
+ # The recommended installation path is /opt/fis-gtm/V6.3-003A_x86_64
$ sudo ./configure
diff --git a/sr_i386/GTMDefinedTypesInitDebug.m b/sr_i386/GTMDefinedTypesInitDebug.m
index aaddfc6..3b7f90a 100644
--- a/sr_i386/GTMDefinedTypesInitDebug.m
+++ b/sr_i386/GTMDefinedTypesInitDebug.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2010-2017 Fidelity National Information ;
+; Copyright (c) 2010-2018 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -11,14 +11,14 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
-; Generated by scantypedefs.m at 16:03:28 on 2017-08-16
-; Build done with GT.M version: GT.M V6.3-001A Linux x86
+; Generated by scantypedefs.m at 10:26:02 on 2018-01-13
+; Build done with GT.M version: GT.M V6.3-002 Linux x86
;
; Environment variables during run:
-; $gtm_dist: /usr/library/V63001A/dbg
-; $gtm_exe: /usr/library/V63002/dbg
-; $gtm_src: /usr/library/V63002/src
-; $gtm_inc: /usr/library/V63002/inc
+; $gtm_dist: /usr/library/V63002/dbg
+; $gtm_exe: /usr/library/V63003A/dbg
+; $gtm_src: /usr/library/V63003A/src
+; $gtm_inc: /usr/library/V63003A/inc
;
; Note this file should not be manually invoked
;
@@ -1023,7 +1023,7 @@ Init
Set gtmtypes("cache_que_heads",39,"name")="cache_que_heads.cache_array[0].stopped"
Set gtmtypes("cache_que_heads",39,"off")=104
Set gtmtypes("cache_que_heads",39,"len")=4
- Set gtmtypes("cache_que_heads",39,"type")="unsigned-int"
+ Set gtmtypes("cache_que_heads",39,"type")="boolean_t"
Set gtmtypfldindx("cache_que_heads","cache_array[0].stopped")=39
Set gtmtypes("cache_que_heads",40,"name")="cache_que_heads.cache_array[0].rip_latch"
Set gtmtypes("cache_que_heads",40,"off")=108
@@ -1192,7 +1192,7 @@ Init
Set gtmtypes("cache_rec",20,"name")="cache_rec.stopped"
Set gtmtypes("cache_rec",20,"off")=72
Set gtmtypes("cache_rec",20,"len")=4
- Set gtmtypes("cache_rec",20,"type")="unsigned-int"
+ Set gtmtypes("cache_rec",20,"type")="boolean_t"
Set gtmtypfldindx("cache_rec","stopped")=20
Set gtmtypes("cache_rec",21,"name")="cache_rec.rip_latch"
Set gtmtypes("cache_rec",21,"off")=76
@@ -2757,8 +2757,8 @@ Init
Set gtmtypfldindx("d_mt_struct","stream")=32
;
Set gtmtypes("d_rm_struct")="struct"
- Set gtmtypes("d_rm_struct",0)=90
- Set gtmtypes("d_rm_struct","len")=356
+ Set gtmtypes("d_rm_struct",0)=91
+ Set gtmtypes("d_rm_struct","len")=360
Set gtmtypes("d_rm_struct",1,"name")="d_rm_struct.fixed"
Set gtmtypes("d_rm_struct",1,"off")=0
Set gtmtypes("d_rm_struct",1,"len")=4
@@ -3210,6 +3210,11 @@ Init
Set gtmtypes("d_rm_struct",90,"len")=4
Set gtmtypes("d_rm_struct",90,"type")="addr"
Set gtmtypfldindx("d_rm_struct","fsblock_buffer")=90
+ Set gtmtypes("d_rm_struct",91,"name")="d_rm_struct.crlastbuff"
+ Set gtmtypes("d_rm_struct",91,"off")=356
+ Set gtmtypes("d_rm_struct",91,"len")=4
+ Set gtmtypes("d_rm_struct",91,"type")="boolean_t"
+ Set gtmtypfldindx("d_rm_struct","crlastbuff")=91
;
Set gtmtypes("d_socket_struct")="struct"
Set gtmtypes("d_socket_struct",0)=19
@@ -4777,8 +4782,8 @@ Init
Set gtmtypes("gcall_args",6,"dim")=32
;
Set gtmtypes("gd_addr")="struct"
- Set gtmtypes("gd_addr",0)=20
- Set gtmtypes("gd_addr","len")=76
+ Set gtmtypes("gd_addr",0)=21
+ Set gtmtypes("gd_addr","len")=80
Set gtmtypes("gd_addr",1,"name")="gd_addr.local_locks"
Set gtmtypes("gd_addr",1,"off")=0
Set gtmtypes("gd_addr",1,"len")=4
@@ -4834,51 +4839,56 @@ Init
Set gtmtypes("gd_addr",11,"len")=4
Set gtmtypes("gd_addr",11,"type")="addr"
Set gtmtypfldindx("gd_addr","gblnames")=11
- Set gtmtypes("gd_addr",12,"name")="gd_addr.link"
+ Set gtmtypes("gd_addr",12,"name")="gd_addr.instinfo"
Set gtmtypes("gd_addr",12,"off")=44
Set gtmtypes("gd_addr",12,"len")=4
Set gtmtypes("gd_addr",12,"type")="addr"
- Set gtmtypfldindx("gd_addr","link")=12
- Set gtmtypes("gd_addr",13,"name")="gd_addr.tab_ptr"
+ Set gtmtypfldindx("gd_addr","instinfo")=12
+ Set gtmtypes("gd_addr",13,"name")="gd_addr.link"
Set gtmtypes("gd_addr",13,"off")=48
Set gtmtypes("gd_addr",13,"len")=4
Set gtmtypes("gd_addr",13,"type")="addr"
- Set gtmtypfldindx("gd_addr","tab_ptr")=13
- Set gtmtypes("gd_addr",14,"name")="gd_addr.id"
+ Set gtmtypfldindx("gd_addr","link")=13
+ Set gtmtypes("gd_addr",14,"name")="gd_addr.tab_ptr"
Set gtmtypes("gd_addr",14,"off")=52
Set gtmtypes("gd_addr",14,"len")=4
Set gtmtypes("gd_addr",14,"type")="addr"
- Set gtmtypfldindx("gd_addr","id")=14
- Set gtmtypes("gd_addr",15,"name")="gd_addr.end"
+ Set gtmtypfldindx("gd_addr","tab_ptr")=14
+ Set gtmtypes("gd_addr",15,"name")="gd_addr.id"
Set gtmtypes("gd_addr",15,"off")=56
Set gtmtypes("gd_addr",15,"len")=4
- Set gtmtypes("gd_addr",15,"type")="uintptr_t"
- Set gtmtypfldindx("gd_addr","end")=15
- Set gtmtypes("gd_addr",16,"name")="gd_addr.has_span_gbls"
+ Set gtmtypes("gd_addr",15,"type")="addr"
+ Set gtmtypfldindx("gd_addr","id")=15
+ Set gtmtypes("gd_addr",16,"name")="gd_addr.end"
Set gtmtypes("gd_addr",16,"off")=60
Set gtmtypes("gd_addr",16,"len")=4
- Set gtmtypes("gd_addr",16,"type")="unsigned-int"
- Set gtmtypfldindx("gd_addr","has_span_gbls")=16
- Set gtmtypes("gd_addr",17,"name")="gd_addr.ygs_map_entry_changed"
+ Set gtmtypes("gd_addr",16,"type")="uintptr_t"
+ Set gtmtypfldindx("gd_addr","end")=16
+ Set gtmtypes("gd_addr",17,"name")="gd_addr.has_span_gbls"
Set gtmtypes("gd_addr",17,"off")=64
- Set gtmtypes("gd_addr",17,"len")=1
- Set gtmtypes("gd_addr",17,"type")="char"
- Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=17
- Set gtmtypes("gd_addr",18,"name")="gd_addr.is_dummy_gbldir"
- Set gtmtypes("gd_addr",18,"off")=65
+ Set gtmtypes("gd_addr",17,"len")=4
+ Set gtmtypes("gd_addr",17,"type")="unsigned-int"
+ Set gtmtypfldindx("gd_addr","has_span_gbls")=17
+ Set gtmtypes("gd_addr",18,"name")="gd_addr.ygs_map_entry_changed"
+ Set gtmtypes("gd_addr",18,"off")=68
Set gtmtypes("gd_addr",18,"len")=1
Set gtmtypes("gd_addr",18,"type")="char"
- Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=18
- Set gtmtypes("gd_addr",19,"name")="gd_addr.filler"
- Set gtmtypes("gd_addr",19,"off")=66
- Set gtmtypes("gd_addr",19,"len")=6
+ Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=18
+ Set gtmtypes("gd_addr",19,"name")="gd_addr.is_dummy_gbldir"
+ Set gtmtypes("gd_addr",19,"off")=69
+ Set gtmtypes("gd_addr",19,"len")=1
Set gtmtypes("gd_addr",19,"type")="char"
- Set gtmtypfldindx("gd_addr","filler")=19
- Set gtmtypes("gd_addr",20,"name")="gd_addr.thread_gdi"
- Set gtmtypes("gd_addr",20,"off")=72
- Set gtmtypes("gd_addr",20,"len")=4
- Set gtmtypes("gd_addr",20,"type")="addr"
- Set gtmtypfldindx("gd_addr","thread_gdi")=20
+ Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=19
+ Set gtmtypes("gd_addr",20,"name")="gd_addr.filler"
+ Set gtmtypes("gd_addr",20,"off")=70
+ Set gtmtypes("gd_addr",20,"len")=6
+ Set gtmtypes("gd_addr",20,"type")="char"
+ Set gtmtypfldindx("gd_addr","filler")=20
+ Set gtmtypes("gd_addr",21,"name")="gd_addr.thread_gdi"
+ Set gtmtypes("gd_addr",21,"off")=76
+ Set gtmtypes("gd_addr",21,"len")=4
+ Set gtmtypes("gd_addr",21,"type")="addr"
+ Set gtmtypfldindx("gd_addr","thread_gdi")=21
;
Set gtmtypes("gd_binding")="struct"
Set gtmtypes("gd_binding",0)=8
@@ -4943,6 +4953,15 @@ Init
Set gtmtypes("gd_gblname",3,"type")="unsigned-int"
Set gtmtypfldindx("gd_gblname","ver")=3
;
+ Set gtmtypes("gd_inst_info")="struct"
+ Set gtmtypes("gd_inst_info",0)=1
+ Set gtmtypes("gd_inst_info","len")=256
+ Set gtmtypes("gd_inst_info",1,"name")="gd_inst_info.instfilename"
+ Set gtmtypes("gd_inst_info",1,"off")=0
+ Set gtmtypes("gd_inst_info",1,"len")=256
+ Set gtmtypes("gd_inst_info",1,"type")="char"
+ Set gtmtypfldindx("gd_inst_info","instfilename")=1
+ ;
Set gtmtypes("gd_region")="struct"
Set gtmtypes("gd_region",0)=44
Set gtmtypes("gd_region","len")=412
@@ -5182,7 +5201,7 @@ Init
Set gtmtypfldindx("gd_seg_addr","addr")=2
;
Set gtmtypes("gd_segment")="struct"
- Set gtmtypes("gd_segment",0)=24
+ Set gtmtypes("gd_segment",0)=25
Set gtmtypes("gd_segment","len")=368
Set gtmtypes("gd_segment",1,"name")="gd_segment.sname_len"
Set gtmtypes("gd_segment",1,"off")=0
@@ -5299,11 +5318,16 @@ Init
Set gtmtypes("gd_segment",23,"len")=4
Set gtmtypes("gd_segment",23,"type")="boolean_t"
Set gtmtypfldindx("gd_segment","asyncio")=23
- Set gtmtypes("gd_segment",24,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",24,"name")="gd_segment.read_only"
Set gtmtypes("gd_segment",24,"off")=352
- Set gtmtypes("gd_segment",24,"len")=16
- Set gtmtypes("gd_segment",24,"type")="char"
- Set gtmtypfldindx("gd_segment","filler")=24
+ Set gtmtypes("gd_segment",24,"len")=4
+ Set gtmtypes("gd_segment",24,"type")="boolean_t"
+ Set gtmtypfldindx("gd_segment","read_only")=24
+ Set gtmtypes("gd_segment",25,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",25,"off")=356
+ Set gtmtypes("gd_segment",25,"len")=12
+ Set gtmtypes("gd_segment",25,"type")="char"
+ Set gtmtypfldindx("gd_segment","filler")=25
;
Set gtmtypes("gdr_name")="struct"
Set gtmtypes("gdr_name",0)=10
@@ -9380,8 +9404,8 @@ Init
Set gtmtypes("integ_error_blk_list",3,"dim")=10
;
Set gtmtypes("io_desc")="struct"
- Set gtmtypes("io_desc",0)=30
- Set gtmtypes("io_desc","len")=264
+ Set gtmtypes("io_desc",0)=32
+ Set gtmtypes("io_desc","len")=272
Set gtmtypes("io_desc",1,"name")="io_desc.pair"
Set gtmtypes("io_desc",1,"off")=0
Set gtmtypes("io_desc",1,"len")=8
@@ -9459,7 +9483,7 @@ Init
Set gtmtypfldindx("io_desc","state")=15
Set gtmtypes("io_desc",16,"name")="io_desc.dollar"
Set gtmtypes("io_desc",16,"off")=48
- Set gtmtypes("io_desc",16,"len")=188
+ Set gtmtypes("io_desc",16,"len")=196
Set gtmtypes("io_desc",16,"type")="struct"
Set gtmtypfldindx("io_desc","dollar")=16
Set gtmtypes("io_desc",17,"name")="io_desc.dollar.x"
@@ -9497,41 +9521,51 @@ Init
Set gtmtypes("io_desc",23,"len")=80
Set gtmtypes("io_desc",23,"type")="char"
Set gtmtypfldindx("io_desc","dollar.device")=23
- Set gtmtypes("io_desc",24,"name")="io_desc.esc_state"
+ Set gtmtypes("io_desc",24,"name")="io_desc.dollar.devicebuffer"
Set gtmtypes("io_desc",24,"off")=236
- Set gtmtypes("io_desc",24,"len")=1
- Set gtmtypes("io_desc",24,"type")="unsigned-char"
- Set gtmtypfldindx("io_desc","esc_state")=24
- Set gtmtypes("io_desc",25,"name")="io_desc.dev_sp"
+ Set gtmtypes("io_desc",24,"len")=4
+ Set gtmtypes("io_desc",24,"type")="addr"
+ Set gtmtypfldindx("io_desc","dollar.devicebuffer")=24
+ Set gtmtypes("io_desc",25,"name")="io_desc.dollar.devicebufferlen"
Set gtmtypes("io_desc",25,"off")=240
Set gtmtypes("io_desc",25,"len")=4
- Set gtmtypes("io_desc",25,"type")="addr"
- Set gtmtypfldindx("io_desc","dev_sp")=25
- Set gtmtypes("io_desc",26,"name")="io_desc.disp_ptr"
+ Set gtmtypes("io_desc",25,"type")="int"
+ Set gtmtypfldindx("io_desc","dollar.devicebufferlen")=25
+ Set gtmtypes("io_desc",26,"name")="io_desc.esc_state"
Set gtmtypes("io_desc",26,"off")=244
- Set gtmtypes("io_desc",26,"len")=4
- Set gtmtypes("io_desc",26,"type")="addr"
- Set gtmtypfldindx("io_desc","disp_ptr")=26
- Set gtmtypes("io_desc",27,"name")="io_desc.newly_created"
+ Set gtmtypes("io_desc",26,"len")=1
+ Set gtmtypes("io_desc",26,"type")="unsigned-char"
+ Set gtmtypfldindx("io_desc","esc_state")=26
+ Set gtmtypes("io_desc",27,"name")="io_desc.dev_sp"
Set gtmtypes("io_desc",27,"off")=248
Set gtmtypes("io_desc",27,"len")=4
- Set gtmtypes("io_desc",27,"type")="boolean_t"
- Set gtmtypfldindx("io_desc","newly_created")=27
- Set gtmtypes("io_desc",28,"name")="io_desc.ichset"
+ Set gtmtypes("io_desc",27,"type")="addr"
+ Set gtmtypfldindx("io_desc","dev_sp")=27
+ Set gtmtypes("io_desc",28,"name")="io_desc.disp_ptr"
Set gtmtypes("io_desc",28,"off")=252
Set gtmtypes("io_desc",28,"len")=4
- Set gtmtypes("io_desc",28,"type")="int"
- Set gtmtypfldindx("io_desc","ichset")=28
- Set gtmtypes("io_desc",29,"name")="io_desc.ochset"
+ Set gtmtypes("io_desc",28,"type")="addr"
+ Set gtmtypfldindx("io_desc","disp_ptr")=28
+ Set gtmtypes("io_desc",29,"name")="io_desc.newly_created"
Set gtmtypes("io_desc",29,"off")=256
Set gtmtypes("io_desc",29,"len")=4
- Set gtmtypes("io_desc",29,"type")="int"
- Set gtmtypfldindx("io_desc","ochset")=29
- Set gtmtypes("io_desc",30,"name")="io_desc.write_filter"
+ Set gtmtypes("io_desc",29,"type")="boolean_t"
+ Set gtmtypfldindx("io_desc","newly_created")=29
+ Set gtmtypes("io_desc",30,"name")="io_desc.ichset"
Set gtmtypes("io_desc",30,"off")=260
Set gtmtypes("io_desc",30,"len")=4
Set gtmtypes("io_desc",30,"type")="int"
- Set gtmtypfldindx("io_desc","write_filter")=30
+ Set gtmtypfldindx("io_desc","ichset")=30
+ Set gtmtypes("io_desc",31,"name")="io_desc.ochset"
+ Set gtmtypes("io_desc",31,"off")=264
+ Set gtmtypes("io_desc",31,"len")=4
+ Set gtmtypes("io_desc",31,"type")="int"
+ Set gtmtypfldindx("io_desc","ochset")=31
+ Set gtmtypes("io_desc",32,"name")="io_desc.write_filter"
+ Set gtmtypes("io_desc",32,"off")=268
+ Set gtmtypes("io_desc",32,"len")=4
+ Set gtmtypes("io_desc",32,"type")="int"
+ Set gtmtypfldindx("io_desc","write_filter")=32
;
Set gtmtypes("io_log_name")="struct"
Set gtmtypes("io_log_name",0)=4
@@ -11946,8 +11980,8 @@ Init
Set gtmtypfldindx("jnlext_multi_t","size")=7
;
Set gtmtypes("jnlpool_addrs")="struct"
- Set gtmtypes("jnlpool_addrs",0)=16
- Set gtmtypes("jnlpool_addrs","len")=68
+ Set gtmtypes("jnlpool_addrs",0)=22
+ Set gtmtypes("jnlpool_addrs","len")=92
Set gtmtypes("jnlpool_addrs",1,"name")="jnlpool_addrs.jnlpool_ctl"
Set gtmtypes("jnlpool_addrs",1,"off")=0
Set gtmtypes("jnlpool_addrs",1,"len")=4
@@ -12028,6 +12062,36 @@ Init
Set gtmtypes("jnlpool_addrs",16,"len")=4
Set gtmtypes("jnlpool_addrs",16,"type")="char"
Set gtmtypfldindx("jnlpool_addrs","jrs.filler_8byte_align")=16
+ Set gtmtypes("jnlpool_addrs",17,"name")="jnlpool_addrs.pool_init"
+ Set gtmtypes("jnlpool_addrs",17,"off")=68
+ Set gtmtypes("jnlpool_addrs",17,"len")=4
+ Set gtmtypes("jnlpool_addrs",17,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","pool_init")=17
+ Set gtmtypes("jnlpool_addrs",18,"name")="jnlpool_addrs.recv_pool"
+ Set gtmtypes("jnlpool_addrs",18,"off")=72
+ Set gtmtypes("jnlpool_addrs",18,"len")=4
+ Set gtmtypes("jnlpool_addrs",18,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","recv_pool")=18
+ Set gtmtypes("jnlpool_addrs",19,"name")="jnlpool_addrs.relaxed"
+ Set gtmtypes("jnlpool_addrs",19,"off")=76
+ Set gtmtypes("jnlpool_addrs",19,"len")=4
+ Set gtmtypes("jnlpool_addrs",19,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","relaxed")=19
+ Set gtmtypes("jnlpool_addrs",20,"name")="jnlpool_addrs.next"
+ Set gtmtypes("jnlpool_addrs",20,"off")=80
+ Set gtmtypes("jnlpool_addrs",20,"len")=4
+ Set gtmtypes("jnlpool_addrs",20,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","next")=20
+ Set gtmtypes("jnlpool_addrs",21,"name")="jnlpool_addrs.gd_instinfo"
+ Set gtmtypes("jnlpool_addrs",21,"off")=84
+ Set gtmtypes("jnlpool_addrs",21,"len")=4
+ Set gtmtypes("jnlpool_addrs",21,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_instinfo")=21
+ Set gtmtypes("jnlpool_addrs",22,"name")="jnlpool_addrs.gd_ptr"
+ Set gtmtypes("jnlpool_addrs",22,"off")=88
+ Set gtmtypes("jnlpool_addrs",22,"len")=4
+ Set gtmtypes("jnlpool_addrs",22,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_ptr")=22
;
Set gtmtypes("jnlpool_ctl_struct")="struct"
Set gtmtypes("jnlpool_ctl_struct",0)=72
@@ -14335,8 +14399,8 @@ Init
Set gtmtypfldindx("mliteral","v.str")=12
;
Set gtmtypes("mlk_ctldata")="struct"
- Set gtmtypes("mlk_ctldata",0)=12
- Set gtmtypes("mlk_ctldata","len")=300
+ Set gtmtypes("mlk_ctldata",0)=13
+ Set gtmtypes("mlk_ctldata","len")=52
Set gtmtypes("mlk_ctldata",1,"name")="mlk_ctldata.prcfree"
Set gtmtypes("mlk_ctldata",1,"off")=0
Set gtmtypes("mlk_ctldata",1,"len")=4
@@ -14347,57 +14411,61 @@ Init
Set gtmtypes("mlk_ctldata",2,"len")=4
Set gtmtypes("mlk_ctldata",2,"type")="intptr_t"
Set gtmtypfldindx("mlk_ctldata","blkfree")=2
- Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkroot"
+ Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkhash"
Set gtmtypes("mlk_ctldata",3,"off")=8
Set gtmtypes("mlk_ctldata",3,"len")=4
Set gtmtypes("mlk_ctldata",3,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","blkroot")=3
- Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.subbase"
+ Set gtmtypfldindx("mlk_ctldata","blkhash")=3
+ Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.blkroot"
Set gtmtypes("mlk_ctldata",4,"off")=12
Set gtmtypes("mlk_ctldata",4,"len")=4
Set gtmtypes("mlk_ctldata",4,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subbase")=4
- Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subfree"
+ Set gtmtypfldindx("mlk_ctldata","blkroot")=4
+ Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subbase"
Set gtmtypes("mlk_ctldata",5,"off")=16
Set gtmtypes("mlk_ctldata",5,"len")=4
Set gtmtypes("mlk_ctldata",5,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subfree")=5
- Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subtop"
+ Set gtmtypfldindx("mlk_ctldata","subbase")=5
+ Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subfree"
Set gtmtypes("mlk_ctldata",6,"off")=20
Set gtmtypes("mlk_ctldata",6,"len")=4
Set gtmtypes("mlk_ctldata",6,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subtop")=6
- Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.max_prccnt"
+ Set gtmtypfldindx("mlk_ctldata","subfree")=6
+ Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.subtop"
Set gtmtypes("mlk_ctldata",7,"off")=24
Set gtmtypes("mlk_ctldata",7,"len")=4
- Set gtmtypes("mlk_ctldata",7,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_prccnt")=7
- Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_blkcnt"
+ Set gtmtypes("mlk_ctldata",7,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_ctldata","subtop")=7
+ Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_prccnt"
Set gtmtypes("mlk_ctldata",8,"off")=28
Set gtmtypes("mlk_ctldata",8,"len")=4
Set gtmtypes("mlk_ctldata",8,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=8
- Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.prccnt"
+ Set gtmtypfldindx("mlk_ctldata","max_prccnt")=8
+ Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.max_blkcnt"
Set gtmtypes("mlk_ctldata",9,"off")=32
Set gtmtypes("mlk_ctldata",9,"len")=4
- Set gtmtypes("mlk_ctldata",9,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","prccnt")=9
- Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.blkcnt"
+ Set gtmtypes("mlk_ctldata",9,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=9
+ Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.num_blkhash"
Set gtmtypes("mlk_ctldata",10,"off")=36
Set gtmtypes("mlk_ctldata",10,"len")=4
- Set gtmtypes("mlk_ctldata",10,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","blkcnt")=10
- Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.clus_pids"
+ Set gtmtypes("mlk_ctldata",10,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","num_blkhash")=10
+ Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.prccnt"
Set gtmtypes("mlk_ctldata",11,"off")=40
- Set gtmtypes("mlk_ctldata",11,"len")=256
- Set gtmtypes("mlk_ctldata",11,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","clus_pids")=11
- Set gtmtypes("mlk_ctldata",11,"dim")=64
- Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.wakeups"
- Set gtmtypes("mlk_ctldata",12,"off")=296
+ Set gtmtypes("mlk_ctldata",11,"len")=4
+ Set gtmtypes("mlk_ctldata",11,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","prccnt")=11
+ Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.blkcnt"
+ Set gtmtypes("mlk_ctldata",12,"off")=44
Set gtmtypes("mlk_ctldata",12,"len")=4
- Set gtmtypes("mlk_ctldata",12,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","wakeups")=12
+ Set gtmtypes("mlk_ctldata",12,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","blkcnt")=12
+ Set gtmtypes("mlk_ctldata",13,"name")="mlk_ctldata.wakeups"
+ Set gtmtypes("mlk_ctldata",13,"off")=48
+ Set gtmtypes("mlk_ctldata",13,"len")=4
+ Set gtmtypes("mlk_ctldata",13,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","wakeups")=13
;
Set gtmtypes("mlk_prcblk")="struct"
Set gtmtypes("mlk_prcblk",0)=4
@@ -14424,8 +14492,8 @@ Init
Set gtmtypfldindx("mlk_prcblk","filler_4byte")=4
;
Set gtmtypes("mlk_pvtblk")="struct"
- Set gtmtypes("mlk_pvtblk",0)=16
- Set gtmtypes("mlk_pvtblk","len")=52
+ Set gtmtypes("mlk_pvtblk",0)=19
+ Set gtmtypes("mlk_pvtblk","len")=68
Set gtmtypes("mlk_pvtblk",1,"name")="mlk_pvtblk.ctlptr"
Set gtmtypes("mlk_pvtblk",1,"off")=0
Set gtmtypes("mlk_pvtblk",1,"len")=4
@@ -14466,46 +14534,61 @@ Init
Set gtmtypes("mlk_pvtblk",8,"len")=4
Set gtmtypes("mlk_pvtblk",8,"type")="addr"
Set gtmtypfldindx("mlk_pvtblk","tp")=8
- Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.total_length"
+ Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.nref_length"
Set gtmtypes("mlk_pvtblk",9,"off")=32
Set gtmtypes("mlk_pvtblk",9,"len")=4
Set gtmtypes("mlk_pvtblk",9,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_length")=9
- Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.total_len_padded"
+ Set gtmtypfldindx("mlk_pvtblk","nref_length")=9
+ Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.subscript_cnt"
Set gtmtypes("mlk_pvtblk",10,"off")=36
- Set gtmtypes("mlk_pvtblk",10,"len")=4
- Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_len_padded")=10
- Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.subscript_cnt"
+ Set gtmtypes("mlk_pvtblk",10,"len")=2
+ Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-short"
+ Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=10
+ Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.trans"
Set gtmtypes("mlk_pvtblk",11,"off")=40
- Set gtmtypes("mlk_pvtblk",11,"len")=2
- Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-short"
- Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=11
- Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.trans"
- Set gtmtypes("mlk_pvtblk",12,"off")=44
+ Set gtmtypes("mlk_pvtblk",11,"len")=1
+ Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-char"
+ Set gtmtypfldindx("mlk_pvtblk","trans")=11
+ Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.translev"
+ Set gtmtypes("mlk_pvtblk",12,"off")=41
Set gtmtypes("mlk_pvtblk",12,"len")=1
Set gtmtypes("mlk_pvtblk",12,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","trans")=12
- Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.translev"
- Set gtmtypes("mlk_pvtblk",13,"off")=45
+ Set gtmtypfldindx("mlk_pvtblk","translev")=12
+ Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.old"
+ Set gtmtypes("mlk_pvtblk",13,"off")=42
Set gtmtypes("mlk_pvtblk",13,"len")=1
Set gtmtypes("mlk_pvtblk",13,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","translev")=13
- Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.old"
- Set gtmtypes("mlk_pvtblk",14,"off")=46
- Set gtmtypes("mlk_pvtblk",14,"len")=1
+ Set gtmtypfldindx("mlk_pvtblk","old")=13
+ Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.filler"
+ Set gtmtypes("mlk_pvtblk",14,"off")=43
+ Set gtmtypes("mlk_pvtblk",14,"len")=5
Set gtmtypes("mlk_pvtblk",14,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","old")=14
- Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.filler"
- Set gtmtypes("mlk_pvtblk",15,"off")=47
- Set gtmtypes("mlk_pvtblk",15,"len")=1
- Set gtmtypes("mlk_pvtblk",15,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","filler")=15
- Set gtmtypes("mlk_pvtblk",16,"name")="mlk_pvtblk.value"
- Set gtmtypes("mlk_pvtblk",16,"off")=48
- Set gtmtypes("mlk_pvtblk",16,"len")=1
- Set gtmtypes("mlk_pvtblk",16,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","value")=16
+ Set gtmtypfldindx("mlk_pvtblk","filler")=14
+ Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.alloc_size"
+ Set gtmtypes("mlk_pvtblk",15,"off")=48
+ Set gtmtypes("mlk_pvtblk",15,"len")=4
+ Set gtmtypes("mlk_pvtblk",15,"type")="size_t"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_size")=15
+ Set gtmtypes("mlk_pvtblk",16,"name")="mlk_pvtblk.alloc_nref_len"
+ Set gtmtypes("mlk_pvtblk",16,"off")=52
+ Set gtmtypes("mlk_pvtblk",16,"len")=4
+ Set gtmtypes("mlk_pvtblk",16,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_nref_len")=16
+ Set gtmtypes("mlk_pvtblk",17,"name")="mlk_pvtblk.alloc_sub_cnt"
+ Set gtmtypes("mlk_pvtblk",17,"off")=56
+ Set gtmtypes("mlk_pvtblk",17,"len")=4
+ Set gtmtypes("mlk_pvtblk",17,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_sub_cnt")=17
+ Set gtmtypes("mlk_pvtblk",18,"name")="mlk_pvtblk.alloc_aux_size"
+ Set gtmtypes("mlk_pvtblk",18,"off")=60
+ Set gtmtypes("mlk_pvtblk",18,"len")=4
+ Set gtmtypes("mlk_pvtblk",18,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_aux_size")=18
+ Set gtmtypes("mlk_pvtblk",19,"name")="mlk_pvtblk.value"
+ Set gtmtypes("mlk_pvtblk",19,"off")=64
+ Set gtmtypes("mlk_pvtblk",19,"len")=1
+ Set gtmtypes("mlk_pvtblk",19,"type")="unsigned-char"
+ Set gtmtypfldindx("mlk_pvtblk","value")=19
;
Set gtmtypes("mlk_shrblk")="struct"
Set gtmtypes("mlk_shrblk",0)=11
@@ -14566,6 +14649,25 @@ Init
Set gtmtypes("mlk_shrblk",11,"type")="unsigned-char"
Set gtmtypfldindx("mlk_shrblk","auxnode")=11
;
+ Set gtmtypes("mlk_shrhash")="struct"
+ Set gtmtypes("mlk_shrhash",0)=3
+ Set gtmtypes("mlk_shrhash","len")=12
+ Set gtmtypes("mlk_shrhash",1,"name")="mlk_shrhash.shrblk"
+ Set gtmtypes("mlk_shrhash",1,"off")=0
+ Set gtmtypes("mlk_shrhash",1,"len")=4
+ Set gtmtypes("mlk_shrhash",1,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_shrhash","shrblk")=1
+ Set gtmtypes("mlk_shrhash",2,"name")="mlk_shrhash.hash"
+ Set gtmtypes("mlk_shrhash",2,"off")=4
+ Set gtmtypes("mlk_shrhash",2,"len")=4
+ Set gtmtypes("mlk_shrhash",2,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","hash")=2
+ Set gtmtypes("mlk_shrhash",3,"name")="mlk_shrhash.usedmap"
+ Set gtmtypes("mlk_shrhash",3,"off")=8
+ Set gtmtypes("mlk_shrhash",3,"len")=4
+ Set gtmtypes("mlk_shrhash",3,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","usedmap")=3
+ ;
Set gtmtypes("mlk_shrsub")="struct"
Set gtmtypes("mlk_shrsub",0)=3
Set gtmtypes("mlk_shrsub","len")=8
@@ -17933,8 +18035,8 @@ Init
Set gtmtypfldindx("nametabent","name")=2
;
Set gtmtypes("node_local")="struct"
- Set gtmtypes("node_local",0)=250
- Set gtmtypes("node_local","len")=104776
+ Set gtmtypes("node_local",0)=247
+ Set gtmtypes("node_local","len")=96584
Set gtmtypes("node_local",1,"name")="node_local.label"
Set gtmtypes("node_local",1,"off")=0
Set gtmtypes("node_local",1,"len")=12
@@ -18266,936 +18368,920 @@ Init
Set gtmtypes("node_local",66,"len")=4
Set gtmtypes("node_local",66,"type")="int"
Set gtmtypfldindx("node_local","wcs_ops_index")=66
- Set gtmtypes("node_local",67,"name")="node_local.filler_8byte_align2"
+ Set gtmtypes("node_local",67,"name")="node_local.lockhists"
Set gtmtypes("node_local",67,"off")=1032
- Set gtmtypes("node_local",67,"len")=4
- Set gtmtypes("node_local",67,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align2")=67
- Set gtmtypes("node_local",68,"name")="node_local.lockhists"
- Set gtmtypes("node_local",68,"off")=1036
- Set gtmtypes("node_local",68,"len")=10240
- Set gtmtypes("node_local",68,"type")="lockhist"
- Set gtmtypfldindx("node_local","lockhists")=68
- Set gtmtypes("node_local",68,"dim")=512
- Set gtmtypes("node_local",69,"name")="node_local.lockhists[0].lock_addr"
+ Set gtmtypes("node_local",67,"len")=10240
+ Set gtmtypes("node_local",67,"type")="lockhist"
+ Set gtmtypfldindx("node_local","lockhists")=67
+ Set gtmtypes("node_local",67,"dim")=512
+ Set gtmtypes("node_local",68,"name")="node_local.lockhists[0].lock_addr"
+ Set gtmtypes("node_local",68,"off")=1032
+ Set gtmtypes("node_local",68,"len")=4
+ Set gtmtypes("node_local",68,"type")="addr"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_addr")=68
+ Set gtmtypes("node_local",69,"name")="node_local.lockhists[0].lock_callr"
Set gtmtypes("node_local",69,"off")=1036
Set gtmtypes("node_local",69,"len")=4
- Set gtmtypes("node_local",69,"type")="addr"
- Set gtmtypfldindx("node_local","lockhists[0].lock_addr")=69
- Set gtmtypes("node_local",70,"name")="node_local.lockhists[0].lock_callr"
+ Set gtmtypes("node_local",69,"type")="caddr_t"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_callr")=69
+ Set gtmtypes("node_local",70,"name")="node_local.lockhists[0].lock_pid"
Set gtmtypes("node_local",70,"off")=1040
Set gtmtypes("node_local",70,"len")=4
- Set gtmtypes("node_local",70,"type")="caddr_t"
- Set gtmtypfldindx("node_local","lockhists[0].lock_callr")=70
- Set gtmtypes("node_local",71,"name")="node_local.lockhists[0].lock_pid"
+ Set gtmtypes("node_local",70,"type")="int"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_pid")=70
+ Set gtmtypes("node_local",71,"name")="node_local.lockhists[0].loop_cnt"
Set gtmtypes("node_local",71,"off")=1044
Set gtmtypes("node_local",71,"len")=4
Set gtmtypes("node_local",71,"type")="int"
- Set gtmtypfldindx("node_local","lockhists[0].lock_pid")=71
- Set gtmtypes("node_local",72,"name")="node_local.lockhists[0].loop_cnt"
+ Set gtmtypfldindx("node_local","lockhists[0].loop_cnt")=71
+ Set gtmtypes("node_local",72,"name")="node_local.lockhists[0].lock_op"
Set gtmtypes("node_local",72,"off")=1048
Set gtmtypes("node_local",72,"len")=4
- Set gtmtypes("node_local",72,"type")="int"
- Set gtmtypfldindx("node_local","lockhists[0].loop_cnt")=72
- Set gtmtypes("node_local",73,"name")="node_local.lockhists[0].lock_op"
- Set gtmtypes("node_local",73,"off")=1052
- Set gtmtypes("node_local",73,"len")=4
- Set gtmtypes("node_local",73,"type")="char"
- Set gtmtypfldindx("node_local","lockhists[0].lock_op")=73
- Set gtmtypes("node_local",74,"name")="node_local.crit_ops_array"
- Set gtmtypes("node_local",74,"off")=11276
- Set gtmtypes("node_local",74,"len")=10240
- Set gtmtypes("node_local",74,"type")="crit_trace"
- Set gtmtypfldindx("node_local","crit_ops_array")=74
- Set gtmtypes("node_local",74,"dim")=512
- Set gtmtypes("node_local",75,"name")="node_local.crit_ops_array[0].call_from"
+ Set gtmtypes("node_local",72,"type")="char"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_op")=72
+ Set gtmtypes("node_local",73,"name")="node_local.crit_ops_array"
+ Set gtmtypes("node_local",73,"off")=11272
+ Set gtmtypes("node_local",73,"len")=10240
+ Set gtmtypes("node_local",73,"type")="crit_trace"
+ Set gtmtypfldindx("node_local","crit_ops_array")=73
+ Set gtmtypes("node_local",73,"dim")=512
+ Set gtmtypes("node_local",74,"name")="node_local.crit_ops_array[0].call_from"
+ Set gtmtypes("node_local",74,"off")=11272
+ Set gtmtypes("node_local",74,"len")=4
+ Set gtmtypes("node_local",74,"type")="caddr_t"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].call_from")=74
+ Set gtmtypes("node_local",75,"name")="node_local.crit_ops_array[0].crit_act"
Set gtmtypes("node_local",75,"off")=11276
Set gtmtypes("node_local",75,"len")=4
- Set gtmtypes("node_local",75,"type")="caddr_t"
- Set gtmtypfldindx("node_local","crit_ops_array[0].call_from")=75
- Set gtmtypes("node_local",76,"name")="node_local.crit_ops_array[0].crit_act"
+ Set gtmtypes("node_local",75,"type")="int"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].crit_act")=75
+ Set gtmtypes("node_local",76,"name")="node_local.crit_ops_array[0].epid"
Set gtmtypes("node_local",76,"off")=11280
Set gtmtypes("node_local",76,"len")=4
Set gtmtypes("node_local",76,"type")="int"
- Set gtmtypfldindx("node_local","crit_ops_array[0].crit_act")=76
- Set gtmtypes("node_local",77,"name")="node_local.crit_ops_array[0].epid"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].epid")=76
+ Set gtmtypes("node_local",77,"name")="node_local.crit_ops_array[0].curr_tn"
Set gtmtypes("node_local",77,"off")=11284
- Set gtmtypes("node_local",77,"len")=4
- Set gtmtypes("node_local",77,"type")="int"
- Set gtmtypfldindx("node_local","crit_ops_array[0].epid")=77
- Set gtmtypes("node_local",78,"name")="node_local.crit_ops_array[0].curr_tn"
- Set gtmtypes("node_local",78,"off")=11288
- Set gtmtypes("node_local",78,"len")=8
- Set gtmtypes("node_local",78,"type")="uint64_t"
- Set gtmtypfldindx("node_local","crit_ops_array[0].curr_tn")=78
- Set gtmtypes("node_local",79,"name")="node_local.dskread_ops_array"
- Set gtmtypes("node_local",79,"off")=21516
- Set gtmtypes("node_local",79,"len")=12288
- Set gtmtypes("node_local",79,"type")="dskread_trace"
- Set gtmtypfldindx("node_local","dskread_ops_array")=79
- Set gtmtypes("node_local",79,"dim")=512
- Set gtmtypes("node_local",80,"name")="node_local.dskread_ops_array[0].cr_off"
+ Set gtmtypes("node_local",77,"len")=8
+ Set gtmtypes("node_local",77,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].curr_tn")=77
+ Set gtmtypes("node_local",78,"name")="node_local.dskread_ops_array"
+ Set gtmtypes("node_local",78,"off")=21512
+ Set gtmtypes("node_local",78,"len")=12288
+ Set gtmtypes("node_local",78,"type")="dskread_trace"
+ Set gtmtypfldindx("node_local","dskread_ops_array")=78
+ Set gtmtypes("node_local",78,"dim")=512
+ Set gtmtypes("node_local",79,"name")="node_local.dskread_ops_array[0].cr_off"
+ Set gtmtypes("node_local",79,"off")=21512
+ Set gtmtypes("node_local",79,"len")=4
+ Set gtmtypes("node_local",79,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_off")=79
+ Set gtmtypes("node_local",80,"name")="node_local.dskread_ops_array[0].cr_tn"
Set gtmtypes("node_local",80,"off")=21516
- Set gtmtypes("node_local",80,"len")=4
- Set gtmtypes("node_local",80,"type")="intptr_t"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_off")=80
- Set gtmtypes("node_local",81,"name")="node_local.dskread_ops_array[0].cr_tn"
- Set gtmtypes("node_local",81,"off")=21520
- Set gtmtypes("node_local",81,"len")=8
- Set gtmtypes("node_local",81,"type")="uint64_t"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_tn")=81
- Set gtmtypes("node_local",82,"name")="node_local.dskread_ops_array[0].process_id"
+ Set gtmtypes("node_local",80,"len")=8
+ Set gtmtypes("node_local",80,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_tn")=80
+ Set gtmtypes("node_local",81,"name")="node_local.dskread_ops_array[0].process_id"
+ Set gtmtypes("node_local",81,"off")=21524
+ Set gtmtypes("node_local",81,"len")=4
+ Set gtmtypes("node_local",81,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].process_id")=81
+ Set gtmtypes("node_local",82,"name")="node_local.dskread_ops_array[0].blk"
Set gtmtypes("node_local",82,"off")=21528
Set gtmtypes("node_local",82,"len")=4
- Set gtmtypes("node_local",82,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].process_id")=82
- Set gtmtypes("node_local",83,"name")="node_local.dskread_ops_array[0].blk"
+ Set gtmtypes("node_local",82,"type")="int"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].blk")=82
+ Set gtmtypes("node_local",83,"name")="node_local.dskread_ops_array[0].cycle"
Set gtmtypes("node_local",83,"off")=21532
Set gtmtypes("node_local",83,"len")=4
- Set gtmtypes("node_local",83,"type")="int"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].blk")=83
- Set gtmtypes("node_local",84,"name")="node_local.dskread_ops_array[0].cycle"
- Set gtmtypes("node_local",84,"off")=21536
- Set gtmtypes("node_local",84,"len")=4
- Set gtmtypes("node_local",84,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].cycle")=84
- Set gtmtypes("node_local",85,"name")="node_local.wcs_ops_array"
- Set gtmtypes("node_local",85,"off")=33804
- Set gtmtypes("node_local",85,"len")=53248
- Set gtmtypes("node_local",85,"type")="wcs_ops_trace_t"
- Set gtmtypfldindx("node_local","wcs_ops_array")=85
- Set gtmtypes("node_local",85,"dim")=1024
- Set gtmtypes("node_local",86,"name")="node_local.wcs_ops_array[0].db_tn"
- Set gtmtypes("node_local",86,"off")=33804
- Set gtmtypes("node_local",86,"len")=8
- Set gtmtypes("node_local",86,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].db_tn")=86
- Set gtmtypes("node_local",87,"name")="node_local.wcs_ops_array[0].process_id"
+ Set gtmtypes("node_local",83,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].cycle")=83
+ Set gtmtypes("node_local",84,"name")="node_local.wcs_ops_array"
+ Set gtmtypes("node_local",84,"off")=33800
+ Set gtmtypes("node_local",84,"len")=53248
+ Set gtmtypes("node_local",84,"type")="wcs_ops_trace_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array")=84
+ Set gtmtypes("node_local",84,"dim")=1024
+ Set gtmtypes("node_local",85,"name")="node_local.wcs_ops_array[0].db_tn"
+ Set gtmtypes("node_local",85,"off")=33800
+ Set gtmtypes("node_local",85,"len")=8
+ Set gtmtypes("node_local",85,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].db_tn")=85
+ Set gtmtypes("node_local",86,"name")="node_local.wcs_ops_array[0].process_id"
+ Set gtmtypes("node_local",86,"off")=33808
+ Set gtmtypes("node_local",86,"len")=4
+ Set gtmtypes("node_local",86,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].process_id")=86
+ Set gtmtypes("node_local",87,"name")="node_local.wcs_ops_array[0].wc_in_free"
Set gtmtypes("node_local",87,"off")=33812
Set gtmtypes("node_local",87,"len")=4
Set gtmtypes("node_local",87,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].process_id")=87
- Set gtmtypes("node_local",88,"name")="node_local.wcs_ops_array[0].wc_in_free"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].wc_in_free")=87
+ Set gtmtypes("node_local",88,"name")="node_local.wcs_ops_array[0].wcs_active_lvl"
Set gtmtypes("node_local",88,"off")=33816
Set gtmtypes("node_local",88,"len")=4
Set gtmtypes("node_local",88,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].wc_in_free")=88
- Set gtmtypes("node_local",89,"name")="node_local.wcs_ops_array[0].wcs_active_lvl"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_active_lvl")=88
+ Set gtmtypes("node_local",89,"name")="node_local.wcs_ops_array[0].wcs_wip_lvl"
Set gtmtypes("node_local",89,"off")=33820
Set gtmtypes("node_local",89,"len")=4
Set gtmtypes("node_local",89,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_active_lvl")=89
- Set gtmtypes("node_local",90,"name")="node_local.wcs_ops_array[0].wcs_wip_lvl"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_wip_lvl")=89
+ Set gtmtypes("node_local",90,"name")="node_local.wcs_ops_array[0].type"
Set gtmtypes("node_local",90,"off")=33824
Set gtmtypes("node_local",90,"len")=4
- Set gtmtypes("node_local",90,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_wip_lvl")=90
- Set gtmtypes("node_local",91,"name")="node_local.wcs_ops_array[0].type"
+ Set gtmtypes("node_local",90,"type")="int"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].type")=90
+ Set gtmtypes("node_local",91,"name")="node_local.wcs_ops_array[0].blk"
Set gtmtypes("node_local",91,"off")=33828
Set gtmtypes("node_local",91,"len")=4
Set gtmtypes("node_local",91,"type")="int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].type")=91
- Set gtmtypes("node_local",92,"name")="node_local.wcs_ops_array[0].blk"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].blk")=91
+ Set gtmtypes("node_local",92,"name")="node_local.wcs_ops_array[0].cr_off"
Set gtmtypes("node_local",92,"off")=33832
Set gtmtypes("node_local",92,"len")=4
- Set gtmtypes("node_local",92,"type")="int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].blk")=92
- Set gtmtypes("node_local",93,"name")="node_local.wcs_ops_array[0].cr_off"
+ Set gtmtypes("node_local",92,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_off")=92
+ Set gtmtypes("node_local",93,"name")="node_local.wcs_ops_array[0].cr_dirty"
Set gtmtypes("node_local",93,"off")=33836
- Set gtmtypes("node_local",93,"len")=4
- Set gtmtypes("node_local",93,"type")="intptr_t"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_off")=93
- Set gtmtypes("node_local",94,"name")="node_local.wcs_ops_array[0].cr_dirty"
- Set gtmtypes("node_local",94,"off")=33840
- Set gtmtypes("node_local",94,"len")=8
- Set gtmtypes("node_local",94,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_dirty")=94
- Set gtmtypes("node_local",95,"name")="node_local.wcs_ops_array[0].detail1"
+ Set gtmtypes("node_local",93,"len")=8
+ Set gtmtypes("node_local",93,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_dirty")=93
+ Set gtmtypes("node_local",94,"name")="node_local.wcs_ops_array[0].detail1"
+ Set gtmtypes("node_local",94,"off")=33844
+ Set gtmtypes("node_local",94,"len")=4
+ Set gtmtypes("node_local",94,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].detail1")=94
+ Set gtmtypes("node_local",95,"name")="node_local.wcs_ops_array[0].detail2"
Set gtmtypes("node_local",95,"off")=33848
Set gtmtypes("node_local",95,"len")=4
Set gtmtypes("node_local",95,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].detail1")=95
- Set gtmtypes("node_local",96,"name")="node_local.wcs_ops_array[0].detail2"
- Set gtmtypes("node_local",96,"off")=33852
- Set gtmtypes("node_local",96,"len")=4
- Set gtmtypes("node_local",96,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].detail2")=96
- Set gtmtypes("node_local",97,"name")="node_local.unique_id"
- Set gtmtypes("node_local",97,"off")=87052
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].detail2")=95
+ Set gtmtypes("node_local",96,"name")="node_local.unique_id"
+ Set gtmtypes("node_local",96,"off")=87048
+ Set gtmtypes("node_local",96,"len")=20
+ Set gtmtypes("node_local",96,"type")="unique_file_id"
+ Set gtmtypfldindx("node_local","unique_id")=96
+ Set gtmtypes("node_local",97,"name")="node_local.unique_id.uid"
+ Set gtmtypes("node_local",97,"off")=87048
Set gtmtypes("node_local",97,"len")=20
- Set gtmtypes("node_local",97,"type")="unique_file_id"
- Set gtmtypfldindx("node_local","unique_id")=97
- Set gtmtypes("node_local",98,"name")="node_local.unique_id.uid"
- Set gtmtypes("node_local",98,"off")=87052
+ Set gtmtypes("node_local",97,"type")="unix_file_id"
+ Set gtmtypfldindx("node_local","unique_id.uid")=97
+ Set gtmtypes("node_local",98,"name")="node_local.unique_id.file_id"
+ Set gtmtypes("node_local",98,"off")=87048
Set gtmtypes("node_local",98,"len")=20
- Set gtmtypes("node_local",98,"type")="unix_file_id"
- Set gtmtypfldindx("node_local","unique_id.uid")=98
- Set gtmtypes("node_local",99,"name")="node_local.unique_id.file_id"
- Set gtmtypes("node_local",99,"off")=87052
- Set gtmtypes("node_local",99,"len")=20
- Set gtmtypes("node_local",99,"type")="char"
- Set gtmtypfldindx("node_local","unique_id.file_id")=99
- Set gtmtypes("node_local",100,"name")="node_local.owner_node"
+ Set gtmtypes("node_local",98,"type")="char"
+ Set gtmtypfldindx("node_local","unique_id.file_id")=98
+ Set gtmtypes("node_local",99,"name")="node_local.owner_node"
+ Set gtmtypes("node_local",99,"off")=87068
+ Set gtmtypes("node_local",99,"len")=4
+ Set gtmtypes("node_local",99,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","owner_node")=99
+ Set gtmtypes("node_local",100,"name")="node_local.wcsflu_pid"
Set gtmtypes("node_local",100,"off")=87072
Set gtmtypes("node_local",100,"len")=4
- Set gtmtypes("node_local",100,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","owner_node")=100
- Set gtmtypes("node_local",101,"name")="node_local.wcsflu_pid"
+ Set gtmtypes("node_local",100,"type")="int"
+ Set gtmtypfldindx("node_local","wcsflu_pid")=100
+ Set gtmtypes("node_local",101,"name")="node_local.creation_date_time4"
Set gtmtypes("node_local",101,"off")=87076
Set gtmtypes("node_local",101,"len")=4
Set gtmtypes("node_local",101,"type")="int"
- Set gtmtypfldindx("node_local","wcsflu_pid")=101
- Set gtmtypes("node_local",102,"name")="node_local.creation_date_time4"
+ Set gtmtypfldindx("node_local","creation_date_time4")=101
+ Set gtmtypes("node_local",102,"name")="node_local.inhibit_kills"
Set gtmtypes("node_local",102,"off")=87080
Set gtmtypes("node_local",102,"len")=4
Set gtmtypes("node_local",102,"type")="int"
- Set gtmtypfldindx("node_local","creation_date_time4")=102
- Set gtmtypes("node_local",103,"name")="node_local.inhibit_kills"
+ Set gtmtypfldindx("node_local","inhibit_kills")=102
+ Set gtmtypes("node_local",103,"name")="node_local.remove_shm"
Set gtmtypes("node_local",103,"off")=87084
Set gtmtypes("node_local",103,"len")=4
- Set gtmtypes("node_local",103,"type")="int"
- Set gtmtypfldindx("node_local","inhibit_kills")=103
- Set gtmtypes("node_local",104,"name")="node_local.remove_shm"
+ Set gtmtypes("node_local",103,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","remove_shm")=103
+ Set gtmtypes("node_local",104,"name")="node_local.jnl_file"
Set gtmtypes("node_local",104,"off")=87088
- Set gtmtypes("node_local",104,"len")=4
- Set gtmtypes("node_local",104,"type")="boolean_t"
- Set gtmtypfldindx("node_local","remove_shm")=104
- Set gtmtypes("node_local",105,"name")="node_local.jnl_file"
- Set gtmtypes("node_local",105,"off")=87092
+ Set gtmtypes("node_local",104,"len")=28
+ Set gtmtypes("node_local",104,"type")="union"
+ Set gtmtypfldindx("node_local","jnl_file")=104
+ Set gtmtypes("node_local",105,"name")="node_local.jnl_file.jnl_file_id"
+ Set gtmtypes("node_local",105,"off")=87088
Set gtmtypes("node_local",105,"len")=28
- Set gtmtypes("node_local",105,"type")="union"
- Set gtmtypfldindx("node_local","jnl_file")=105
- Set gtmtypes("node_local",106,"name")="node_local.jnl_file.jnl_file_id"
- Set gtmtypes("node_local",106,"off")=87092
- Set gtmtypes("node_local",106,"len")=28
- Set gtmtypes("node_local",106,"type")="gds_file_id"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id")=106
- Set gtmtypes("node_local",107,"name")="node_local.jnl_file.jnl_file_id.dvi"
- Set gtmtypes("node_local",107,"off")=87092
- Set gtmtypes("node_local",107,"len")=16
- Set gtmtypes("node_local",107,"type")="char"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.dvi")=107
- Set gtmtypes("node_local",108,"name")="node_local.jnl_file.jnl_file_id.did"
- Set gtmtypes("node_local",108,"off")=87108
+ Set gtmtypes("node_local",105,"type")="gds_file_id"
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id")=105
+ Set gtmtypes("node_local",106,"name")="node_local.jnl_file.jnl_file_id.dvi"
+ Set gtmtypes("node_local",106,"off")=87088
+ Set gtmtypes("node_local",106,"len")=16
+ Set gtmtypes("node_local",106,"type")="char"
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.dvi")=106
+ Set gtmtypes("node_local",107,"name")="node_local.jnl_file.jnl_file_id.did"
+ Set gtmtypes("node_local",107,"off")=87104
+ Set gtmtypes("node_local",107,"len")=6
+ Set gtmtypes("node_local",107,"type")="unsigned-short"
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.did")=107
+ Set gtmtypes("node_local",107,"dim")=3
+ Set gtmtypes("node_local",108,"name")="node_local.jnl_file.jnl_file_id.fid"
+ Set gtmtypes("node_local",108,"off")=87110
Set gtmtypes("node_local",108,"len")=6
Set gtmtypes("node_local",108,"type")="unsigned-short"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.did")=108
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.fid")=108
Set gtmtypes("node_local",108,"dim")=3
- Set gtmtypes("node_local",109,"name")="node_local.jnl_file.jnl_file_id.fid"
- Set gtmtypes("node_local",109,"off")=87114
- Set gtmtypes("node_local",109,"len")=6
- Set gtmtypes("node_local",109,"type")="unsigned-short"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.fid")=109
- Set gtmtypes("node_local",109,"dim")=3
- Set gtmtypes("node_local",110,"name")="node_local.jnl_file.u"
- Set gtmtypes("node_local",110,"off")=87092
- Set gtmtypes("node_local",110,"len")=20
- Set gtmtypes("node_local",110,"type")="unix_file_id"
- Set gtmtypfldindx("node_local","jnl_file.u")=110
- Set gtmtypes("node_local",111,"name")="node_local.jnl_file.u.inode"
- Set gtmtypes("node_local",111,"off")=87092
+ Set gtmtypes("node_local",109,"name")="node_local.jnl_file.u"
+ Set gtmtypes("node_local",109,"off")=87088
+ Set gtmtypes("node_local",109,"len")=20
+ Set gtmtypes("node_local",109,"type")="unix_file_id"
+ Set gtmtypfldindx("node_local","jnl_file.u")=109
+ Set gtmtypes("node_local",110,"name")="node_local.jnl_file.u.inode"
+ Set gtmtypes("node_local",110,"off")=87088
+ Set gtmtypes("node_local",110,"len")=8
+ Set gtmtypes("node_local",110,"type")="ino_t"
+ Set gtmtypfldindx("node_local","jnl_file.u.inode")=110
+ Set gtmtypes("node_local",111,"name")="node_local.jnl_file.u.device"
+ Set gtmtypes("node_local",111,"off")=87096
Set gtmtypes("node_local",111,"len")=8
- Set gtmtypes("node_local",111,"type")="ino_t"
- Set gtmtypfldindx("node_local","jnl_file.u.inode")=111
- Set gtmtypes("node_local",112,"name")="node_local.jnl_file.u.device"
- Set gtmtypes("node_local",112,"off")=87100
- Set gtmtypes("node_local",112,"len")=8
- Set gtmtypes("node_local",112,"type")="dev_t"
- Set gtmtypfldindx("node_local","jnl_file.u.device")=112
- Set gtmtypes("node_local",113,"name")="node_local.jnl_file.u.st_gen"
- Set gtmtypes("node_local",113,"off")=87108
+ Set gtmtypes("node_local",111,"type")="dev_t"
+ Set gtmtypfldindx("node_local","jnl_file.u.device")=111
+ Set gtmtypes("node_local",112,"name")="node_local.jnl_file.u.st_gen"
+ Set gtmtypes("node_local",112,"off")=87104
+ Set gtmtypes("node_local",112,"len")=4
+ Set gtmtypes("node_local",112,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","jnl_file.u.st_gen")=112
+ Set gtmtypes("node_local",113,"name")="node_local.donotflush_dbjnl"
+ Set gtmtypes("node_local",113,"off")=87116
Set gtmtypes("node_local",113,"len")=4
- Set gtmtypes("node_local",113,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","jnl_file.u.st_gen")=113
- Set gtmtypes("node_local",114,"name")="node_local.donotflush_dbjnl"
+ Set gtmtypes("node_local",113,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","donotflush_dbjnl")=113
+ Set gtmtypes("node_local",114,"name")="node_local.n_pre_read"
Set gtmtypes("node_local",114,"off")=87120
Set gtmtypes("node_local",114,"len")=4
- Set gtmtypes("node_local",114,"type")="boolean_t"
- Set gtmtypfldindx("node_local","donotflush_dbjnl")=114
- Set gtmtypes("node_local",115,"name")="node_local.n_pre_read"
+ Set gtmtypes("node_local",114,"type")="int"
+ Set gtmtypfldindx("node_local","n_pre_read")=114
+ Set gtmtypes("node_local",115,"name")="node_local.replinstfilename"
Set gtmtypes("node_local",115,"off")=87124
- Set gtmtypes("node_local",115,"len")=4
- Set gtmtypes("node_local",115,"type")="int"
- Set gtmtypfldindx("node_local","n_pre_read")=115
- Set gtmtypes("node_local",116,"name")="node_local.replinstfilename"
- Set gtmtypes("node_local",116,"off")=87128
+ Set gtmtypes("node_local",115,"len")=256
+ Set gtmtypes("node_local",115,"type")="char"
+ Set gtmtypfldindx("node_local","replinstfilename")=115
+ Set gtmtypes("node_local",116,"name")="node_local.statsdb_fname"
+ Set gtmtypes("node_local",116,"off")=87380
Set gtmtypes("node_local",116,"len")=256
Set gtmtypes("node_local",116,"type")="char"
- Set gtmtypfldindx("node_local","replinstfilename")=116
- Set gtmtypes("node_local",117,"name")="node_local.statsdb_fname"
- Set gtmtypes("node_local",117,"off")=87384
- Set gtmtypes("node_local",117,"len")=256
- Set gtmtypes("node_local",117,"type")="char"
- Set gtmtypfldindx("node_local","statsdb_fname")=117
- Set gtmtypes("node_local",118,"name")="node_local.secshr_ops_index"
- Set gtmtypes("node_local",118,"off")=87640
- Set gtmtypes("node_local",118,"len")=4
- Set gtmtypes("node_local",118,"type")="int"
- Set gtmtypfldindx("node_local","secshr_ops_index")=118
- Set gtmtypes("node_local",119,"name")="node_local.secshr_ops_array"
+ Set gtmtypfldindx("node_local","statsdb_fname")=116
+ Set gtmtypes("node_local",117,"name")="node_local.gvstats_rec"
+ Set gtmtypes("node_local",117,"off")=87636
+ Set gtmtypes("node_local",117,"len")=472
+ Set gtmtypes("node_local",117,"type")="gvstats_rec_t"
+ Set gtmtypfldindx("node_local","gvstats_rec")=117
+ Set gtmtypes("node_local",118,"name")="node_local.gvstats_rec.n_set"
+ Set gtmtypes("node_local",118,"off")=87636
+ Set gtmtypes("node_local",118,"len")=8
+ Set gtmtypes("node_local",118,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","gvstats_rec.n_set")=118
+ Set gtmtypes("node_local",119,"name")="node_local.gvstats_rec.n_kill"
Set gtmtypes("node_local",119,"off")=87644
- Set gtmtypes("node_local",119,"len")=8184
+ Set gtmtypes("node_local",119,"len")=8
Set gtmtypes("node_local",119,"type")="uint64_t"
- Set gtmtypfldindx("node_local","secshr_ops_array")=119
- Set gtmtypes("node_local",119,"dim")=1023
- Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec"
- Set gtmtypes("node_local",120,"off")=95828
- Set gtmtypes("node_local",120,"len")=472
- Set gtmtypes("node_local",120,"type")="gvstats_rec_t"
- Set gtmtypfldindx("node_local","gvstats_rec")=120
- Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_set"
- Set gtmtypes("node_local",121,"off")=95828
+ Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=119
+ Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec.n_get"
+ Set gtmtypes("node_local",120,"off")=87652
+ Set gtmtypes("node_local",120,"len")=8
+ Set gtmtypes("node_local",120,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","gvstats_rec.n_get")=120
+ Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_data"
+ Set gtmtypes("node_local",121,"off")=87660
Set gtmtypes("node_local",121,"len")=8
Set gtmtypes("node_local",121,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_set")=121
- Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_kill"
- Set gtmtypes("node_local",122,"off")=95836
+ Set gtmtypfldindx("node_local","gvstats_rec.n_data")=121
+ Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_order"
+ Set gtmtypes("node_local",122,"off")=87668
Set gtmtypes("node_local",122,"len")=8
Set gtmtypes("node_local",122,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=122
- Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_get"
- Set gtmtypes("node_local",123,"off")=95844
+ Set gtmtypfldindx("node_local","gvstats_rec.n_order")=122
+ Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_zprev"
+ Set gtmtypes("node_local",123,"off")=87676
Set gtmtypes("node_local",123,"len")=8
Set gtmtypes("node_local",123,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_get")=123
- Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_data"
- Set gtmtypes("node_local",124,"off")=95852
+ Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=123
+ Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_query"
+ Set gtmtypes("node_local",124,"off")=87684
Set gtmtypes("node_local",124,"len")=8
Set gtmtypes("node_local",124,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_data")=124
- Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_order"
- Set gtmtypes("node_local",125,"off")=95860
+ Set gtmtypfldindx("node_local","gvstats_rec.n_query")=124
+ Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_lock_success"
+ Set gtmtypes("node_local",125,"off")=87692
Set gtmtypes("node_local",125,"len")=8
Set gtmtypes("node_local",125,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_order")=125
- Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_zprev"
- Set gtmtypes("node_local",126,"off")=95868
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=125
+ Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_lock_fail"
+ Set gtmtypes("node_local",126,"off")=87700
Set gtmtypes("node_local",126,"len")=8
Set gtmtypes("node_local",126,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=126
- Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.n_query"
- Set gtmtypes("node_local",127,"off")=95876
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=126
+ Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.db_curr_tn"
+ Set gtmtypes("node_local",127,"off")=87708
Set gtmtypes("node_local",127,"len")=8
Set gtmtypes("node_local",127,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_query")=127
- Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_lock_success"
- Set gtmtypes("node_local",128,"off")=95884
+ Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=127
+ Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_dsk_read"
+ Set gtmtypes("node_local",128,"off")=87716
Set gtmtypes("node_local",128,"len")=8
Set gtmtypes("node_local",128,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=128
- Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.n_lock_fail"
- Set gtmtypes("node_local",129,"off")=95892
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=128
+ Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.n_dsk_write"
+ Set gtmtypes("node_local",129,"off")=87724
Set gtmtypes("node_local",129,"len")=8
Set gtmtypes("node_local",129,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=129
- Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.db_curr_tn"
- Set gtmtypes("node_local",130,"off")=95900
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=129
+ Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.n_nontp_readwrite"
+ Set gtmtypes("node_local",130,"off")=87732
Set gtmtypes("node_local",130,"len")=8
Set gtmtypes("node_local",130,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=130
- Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_dsk_read"
- Set gtmtypes("node_local",131,"off")=95908
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=130
+ Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_nontp_readonly"
+ Set gtmtypes("node_local",131,"off")=87740
Set gtmtypes("node_local",131,"len")=8
Set gtmtypes("node_local",131,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=131
- Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_dsk_write"
- Set gtmtypes("node_local",132,"off")=95916
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=131
+ Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
+ Set gtmtypes("node_local",132,"off")=87748
Set gtmtypes("node_local",132,"len")=8
Set gtmtypes("node_local",132,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=132
- Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_readwrite"
- Set gtmtypes("node_local",133,"off")=95924
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=132
+ Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_blkread"
+ Set gtmtypes("node_local",133,"off")=87756
Set gtmtypes("node_local",133,"len")=8
Set gtmtypes("node_local",133,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=133
- Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_readonly"
- Set gtmtypes("node_local",134,"off")=95932
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=133
+ Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_retries_0"
+ Set gtmtypes("node_local",134,"off")=87764
Set gtmtypes("node_local",134,"len")=8
Set gtmtypes("node_local",134,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=134
- Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
- Set gtmtypes("node_local",135,"off")=95940
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=134
+ Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_retries_1"
+ Set gtmtypes("node_local",135,"off")=87772
Set gtmtypes("node_local",135,"len")=8
Set gtmtypes("node_local",135,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=135
- Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_blkread"
- Set gtmtypes("node_local",136,"off")=95948
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=135
+ Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_retries_2"
+ Set gtmtypes("node_local",136,"off")=87780
Set gtmtypes("node_local",136,"len")=8
Set gtmtypes("node_local",136,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=136
- Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_0"
- Set gtmtypes("node_local",137,"off")=95956
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=136
+ Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_3"
+ Set gtmtypes("node_local",137,"off")=87788
Set gtmtypes("node_local",137,"len")=8
Set gtmtypes("node_local",137,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=137
- Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_nontp_retries_1"
- Set gtmtypes("node_local",138,"off")=95964
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=137
+ Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_tp_readwrite"
+ Set gtmtypes("node_local",138,"off")=87796
Set gtmtypes("node_local",138,"len")=8
Set gtmtypes("node_local",138,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=138
- Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_nontp_retries_2"
- Set gtmtypes("node_local",139,"off")=95972
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=138
+ Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_tp_readonly"
+ Set gtmtypes("node_local",139,"off")=87804
Set gtmtypes("node_local",139,"len")=8
Set gtmtypes("node_local",139,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=139
- Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_nontp_retries_3"
- Set gtmtypes("node_local",140,"off")=95980
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=139
+ Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_tp_rolledback"
+ Set gtmtypes("node_local",140,"off")=87812
Set gtmtypes("node_local",140,"len")=8
Set gtmtypes("node_local",140,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=140
- Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_readwrite"
- Set gtmtypes("node_local",141,"off")=95988
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=140
+ Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_blkwrite"
+ Set gtmtypes("node_local",141,"off")=87820
Set gtmtypes("node_local",141,"len")=8
Set gtmtypes("node_local",141,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=141
- Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_readonly"
- Set gtmtypes("node_local",142,"off")=95996
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=141
+ Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_blkread"
+ Set gtmtypes("node_local",142,"off")=87828
Set gtmtypes("node_local",142,"len")=8
Set gtmtypes("node_local",142,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=142
- Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_rolledback"
- Set gtmtypes("node_local",143,"off")=96004
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=142
+ Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
+ Set gtmtypes("node_local",143,"off")=87836
Set gtmtypes("node_local",143,"len")=8
Set gtmtypes("node_local",143,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=143
- Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_blkwrite"
- Set gtmtypes("node_local",144,"off")=96012
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=143
+ Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
+ Set gtmtypes("node_local",144,"off")=87844
Set gtmtypes("node_local",144,"len")=8
Set gtmtypes("node_local",144,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=144
- Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_blkread"
- Set gtmtypes("node_local",145,"off")=96020
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=144
+ Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
+ Set gtmtypes("node_local",145,"off")=87852
Set gtmtypes("node_local",145,"len")=8
Set gtmtypes("node_local",145,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=145
- Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
- Set gtmtypes("node_local",146,"off")=96028
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=145
+ Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
+ Set gtmtypes("node_local",146,"off")=87860
Set gtmtypes("node_local",146,"len")=8
Set gtmtypes("node_local",146,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=146
- Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
- Set gtmtypes("node_local",147,"off")=96036
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=146
+ Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
+ Set gtmtypes("node_local",147,"off")=87868
Set gtmtypes("node_local",147,"len")=8
Set gtmtypes("node_local",147,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=147
- Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
- Set gtmtypes("node_local",148,"off")=96044
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=147
+ Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
+ Set gtmtypes("node_local",148,"off")=87876
Set gtmtypes("node_local",148,"len")=8
Set gtmtypes("node_local",148,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=148
- Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
- Set gtmtypes("node_local",149,"off")=96052
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=148
+ Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
+ Set gtmtypes("node_local",149,"off")=87884
Set gtmtypes("node_local",149,"len")=8
Set gtmtypes("node_local",149,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=149
- Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
- Set gtmtypes("node_local",150,"off")=96060
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=149
+ Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
+ Set gtmtypes("node_local",150,"off")=87892
Set gtmtypes("node_local",150,"len")=8
Set gtmtypes("node_local",150,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=150
- Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
- Set gtmtypes("node_local",151,"off")=96068
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=150
+ Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
+ Set gtmtypes("node_local",151,"off")=87900
Set gtmtypes("node_local",151,"len")=8
Set gtmtypes("node_local",151,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=151
- Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
- Set gtmtypes("node_local",152,"off")=96076
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=151
+ Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
+ Set gtmtypes("node_local",152,"off")=87908
Set gtmtypes("node_local",152,"len")=8
Set gtmtypes("node_local",152,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=152
- Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
- Set gtmtypes("node_local",153,"off")=96084
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=152
+ Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_ztrigger"
+ Set gtmtypes("node_local",153,"off")=87916
Set gtmtypes("node_local",153,"len")=8
Set gtmtypes("node_local",153,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=153
- Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
- Set gtmtypes("node_local",154,"off")=96092
+ Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=153
+ Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_db_flush"
+ Set gtmtypes("node_local",154,"off")=87924
Set gtmtypes("node_local",154,"len")=8
Set gtmtypes("node_local",154,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=154
- Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
- Set gtmtypes("node_local",155,"off")=96100
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=154
+ Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_db_fsync"
+ Set gtmtypes("node_local",155,"off")=87932
Set gtmtypes("node_local",155,"len")=8
Set gtmtypes("node_local",155,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=155
- Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_ztrigger"
- Set gtmtypes("node_local",156,"off")=96108
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=155
+ Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_jnl_flush"
+ Set gtmtypes("node_local",156,"off")=87940
Set gtmtypes("node_local",156,"len")=8
Set gtmtypes("node_local",156,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=156
- Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_db_flush"
- Set gtmtypes("node_local",157,"off")=96116
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=156
+ Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_jnl_fsync"
+ Set gtmtypes("node_local",157,"off")=87948
Set gtmtypes("node_local",157,"len")=8
Set gtmtypes("node_local",157,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=157
- Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_db_fsync"
- Set gtmtypes("node_local",158,"off")=96124
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=157
+ Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_jbuff_bytes"
+ Set gtmtypes("node_local",158,"off")=87956
Set gtmtypes("node_local",158,"len")=8
Set gtmtypes("node_local",158,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=158
- Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jnl_flush"
- Set gtmtypes("node_local",159,"off")=96132
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=158
+ Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jfile_bytes"
+ Set gtmtypes("node_local",159,"off")=87964
Set gtmtypes("node_local",159,"len")=8
Set gtmtypes("node_local",159,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=159
- Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jnl_fsync"
- Set gtmtypes("node_local",160,"off")=96140
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=159
+ Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jfile_writes"
+ Set gtmtypes("node_local",160,"off")=87972
Set gtmtypes("node_local",160,"len")=8
Set gtmtypes("node_local",160,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=160
- Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jbuff_bytes"
- Set gtmtypes("node_local",161,"off")=96148
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=160
+ Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jrec_logical"
+ Set gtmtypes("node_local",161,"off")=87980
Set gtmtypes("node_local",161,"len")=8
Set gtmtypes("node_local",161,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=161
- Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jfile_bytes"
- Set gtmtypes("node_local",162,"off")=96156
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=161
+ Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jrec_pblk"
+ Set gtmtypes("node_local",162,"off")=87988
Set gtmtypes("node_local",162,"len")=8
Set gtmtypes("node_local",162,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=162
- Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jfile_writes"
- Set gtmtypes("node_local",163,"off")=96164
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=162
+ Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
+ Set gtmtypes("node_local",163,"off")=87996
Set gtmtypes("node_local",163,"len")=8
Set gtmtypes("node_local",163,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=163
- Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_logical"
- Set gtmtypes("node_local",164,"off")=96172
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=163
+ Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
+ Set gtmtypes("node_local",164,"off")=88004
Set gtmtypes("node_local",164,"len")=8
Set gtmtypes("node_local",164,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=164
- Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_pblk"
- Set gtmtypes("node_local",165,"off")=96180
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=164
+ Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_other"
+ Set gtmtypes("node_local",165,"off")=88012
Set gtmtypes("node_local",165,"len")=8
Set gtmtypes("node_local",165,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=165
- Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
- Set gtmtypes("node_local",166,"off")=96188
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=165
+ Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jnl_extends"
+ Set gtmtypes("node_local",166,"off")=88020
Set gtmtypes("node_local",166,"len")=8
Set gtmtypes("node_local",166,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=166
- Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
- Set gtmtypes("node_local",167,"off")=96196
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=166
+ Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_db_extends"
+ Set gtmtypes("node_local",167,"off")=88028
Set gtmtypes("node_local",167,"len")=8
Set gtmtypes("node_local",167,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=167
- Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_jrec_other"
- Set gtmtypes("node_local",168,"off")=96204
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=167
+ Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_crit_success"
+ Set gtmtypes("node_local",168,"off")=88036
Set gtmtypes("node_local",168,"len")=8
Set gtmtypes("node_local",168,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=168
- Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_jnl_extends"
- Set gtmtypes("node_local",169,"off")=96212
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=168
+ Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_crits_in_epch"
+ Set gtmtypes("node_local",169,"off")=88044
Set gtmtypes("node_local",169,"len")=8
Set gtmtypes("node_local",169,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=169
- Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.n_db_extends"
- Set gtmtypes("node_local",170,"off")=96220
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=169
+ Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.sq_crit_failed"
+ Set gtmtypes("node_local",170,"off")=88052
Set gtmtypes("node_local",170,"len")=8
Set gtmtypes("node_local",170,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=170
- Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crit_success"
- Set gtmtypes("node_local",171,"off")=96228
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=170
+ Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crit_failed"
+ Set gtmtypes("node_local",171,"off")=88060
Set gtmtypes("node_local",171,"len")=8
Set gtmtypes("node_local",171,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=171
- Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.n_crits_in_epch"
- Set gtmtypes("node_local",172,"off")=96236
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=171
+ Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.sq_crit_que_slps"
+ Set gtmtypes("node_local",172,"off")=88068
Set gtmtypes("node_local",172,"len")=8
Set gtmtypes("node_local",172,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=172
- Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.sq_crit_failed"
- Set gtmtypes("node_local",173,"off")=96244
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=172
+ Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.n_crit_que_slps"
+ Set gtmtypes("node_local",173,"off")=88076
Set gtmtypes("node_local",173,"len")=8
Set gtmtypes("node_local",173,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=173
- Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.n_crit_failed"
- Set gtmtypes("node_local",174,"off")=96252
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=173
+ Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.sq_crit_yields"
+ Set gtmtypes("node_local",174,"off")=88084
Set gtmtypes("node_local",174,"len")=8
Set gtmtypes("node_local",174,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=174
- Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.sq_crit_que_slps"
- Set gtmtypes("node_local",175,"off")=96260
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=174
+ Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.n_crit_yields"
+ Set gtmtypes("node_local",175,"off")=88092
Set gtmtypes("node_local",175,"len")=8
Set gtmtypes("node_local",175,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=175
- Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.n_crit_que_slps"
- Set gtmtypes("node_local",176,"off")=96268
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=175
+ Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.n_clean2dirty"
+ Set gtmtypes("node_local",176,"off")=88100
Set gtmtypes("node_local",176,"len")=8
Set gtmtypes("node_local",176,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=176
- Set gtmtypes("node_local",177,"name")="node_local.gvstats_rec.sq_crit_yields"
- Set gtmtypes("node_local",177,"off")=96276
+ Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=176
+ Set gtmtypes("node_local",177,"name")="node_local.last_wcsflu_tn"
+ Set gtmtypes("node_local",177,"off")=88108
Set gtmtypes("node_local",177,"len")=8
Set gtmtypes("node_local",177,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=177
- Set gtmtypes("node_local",178,"name")="node_local.gvstats_rec.n_crit_yields"
- Set gtmtypes("node_local",178,"off")=96284
+ Set gtmtypfldindx("node_local","last_wcsflu_tn")=177
+ Set gtmtypes("node_local",178,"name")="node_local.last_wcs_recover_tn"
+ Set gtmtypes("node_local",178,"off")=88116
Set gtmtypes("node_local",178,"len")=8
Set gtmtypes("node_local",178,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=178
- Set gtmtypes("node_local",179,"name")="node_local.gvstats_rec.n_clean2dirty"
- Set gtmtypes("node_local",179,"off")=96292
- Set gtmtypes("node_local",179,"len")=8
- Set gtmtypes("node_local",179,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=179
- Set gtmtypes("node_local",180,"name")="node_local.last_wcsflu_tn"
- Set gtmtypes("node_local",180,"off")=96300
+ Set gtmtypfldindx("node_local","last_wcs_recover_tn")=178
+ Set gtmtypes("node_local",179,"name")="node_local.encrypt_glo_buff_off"
+ Set gtmtypes("node_local",179,"off")=88124
+ Set gtmtypes("node_local",179,"len")=4
+ Set gtmtypes("node_local",179,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=179
+ Set gtmtypes("node_local",180,"name")="node_local.snapshot_crit_latch"
+ Set gtmtypes("node_local",180,"off")=88128
Set gtmtypes("node_local",180,"len")=8
- Set gtmtypes("node_local",180,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcsflu_tn")=180
- Set gtmtypes("node_local",181,"name")="node_local.last_wcs_recover_tn"
- Set gtmtypes("node_local",181,"off")=96308
+ Set gtmtypes("node_local",180,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch")=180
+ Set gtmtypes("node_local",181,"name")="node_local.snapshot_crit_latch.u"
+ Set gtmtypes("node_local",181,"off")=88128
Set gtmtypes("node_local",181,"len")=8
- Set gtmtypes("node_local",181,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcs_recover_tn")=181
- Set gtmtypes("node_local",182,"name")="node_local.encrypt_glo_buff_off"
- Set gtmtypes("node_local",182,"off")=96316
- Set gtmtypes("node_local",182,"len")=4
- Set gtmtypes("node_local",182,"type")="intptr_t"
- Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=182
- Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch"
- Set gtmtypes("node_local",183,"off")=96320
+ Set gtmtypes("node_local",181,"type")="union"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=181
+ Set gtmtypes("node_local",182,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",182,"off")=88128
+ Set gtmtypes("node_local",182,"len")=8
+ Set gtmtypes("node_local",182,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=182
+ Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch.u.parts"
+ Set gtmtypes("node_local",183,"off")=88128
Set gtmtypes("node_local",183,"len")=8
- Set gtmtypes("node_local",183,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch")=183
- Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u"
- Set gtmtypes("node_local",184,"off")=96320
- Set gtmtypes("node_local",184,"len")=8
- Set gtmtypes("node_local",184,"type")="union"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=184
- Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",185,"off")=96320
- Set gtmtypes("node_local",185,"len")=8
- Set gtmtypes("node_local",185,"type")="uint64_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=185
- Set gtmtypes("node_local",186,"name")="node_local.snapshot_crit_latch.u.parts"
- Set gtmtypes("node_local",186,"off")=96320
- Set gtmtypes("node_local",186,"len")=8
- Set gtmtypes("node_local",186,"type")="struct"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=186
- Set gtmtypes("node_local",187,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",187,"off")=96320
+ Set gtmtypes("node_local",183,"type")="struct"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=183
+ Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",184,"off")=88128
+ Set gtmtypes("node_local",184,"len")=4
+ Set gtmtypes("node_local",184,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=184
+ Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",185,"off")=88132
+ Set gtmtypes("node_local",185,"len")=4
+ Set gtmtypes("node_local",185,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=185
+ Set gtmtypes("node_local",186,"name")="node_local.ss_shmid"
+ Set gtmtypes("node_local",186,"off")=88136
+ Set gtmtypes("node_local",186,"len")=4
+ Set gtmtypes("node_local",186,"type")="long"
+ Set gtmtypfldindx("node_local","ss_shmid")=186
+ Set gtmtypes("node_local",187,"name")="node_local.ss_shmcycle"
+ Set gtmtypes("node_local",187,"off")=88140
Set gtmtypes("node_local",187,"len")=4
- Set gtmtypes("node_local",187,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=187
- Set gtmtypes("node_local",188,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
- Set gtmtypes("node_local",188,"off")=96324
+ Set gtmtypes("node_local",187,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ss_shmcycle")=187
+ Set gtmtypes("node_local",188,"name")="node_local.snapshot_in_prog"
+ Set gtmtypes("node_local",188,"off")=88144
Set gtmtypes("node_local",188,"len")=4
- Set gtmtypes("node_local",188,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=188
- Set gtmtypes("node_local",189,"name")="node_local.ss_shmid"
- Set gtmtypes("node_local",189,"off")=96328
+ Set gtmtypes("node_local",188,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","snapshot_in_prog")=188
+ Set gtmtypes("node_local",189,"name")="node_local.num_snapshots_in_effect"
+ Set gtmtypes("node_local",189,"off")=88148
Set gtmtypes("node_local",189,"len")=4
- Set gtmtypes("node_local",189,"type")="long"
- Set gtmtypfldindx("node_local","ss_shmid")=189
- Set gtmtypes("node_local",190,"name")="node_local.ss_shmcycle"
- Set gtmtypes("node_local",190,"off")=96332
+ Set gtmtypes("node_local",189,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","num_snapshots_in_effect")=189
+ Set gtmtypes("node_local",190,"name")="node_local.wbox_test_seq_num"
+ Set gtmtypes("node_local",190,"off")=88152
Set gtmtypes("node_local",190,"len")=4
Set gtmtypes("node_local",190,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ss_shmcycle")=190
- Set gtmtypes("node_local",191,"name")="node_local.snapshot_in_prog"
- Set gtmtypes("node_local",191,"off")=96336
+ Set gtmtypfldindx("node_local","wbox_test_seq_num")=190
+ Set gtmtypes("node_local",191,"name")="node_local.freeze_online"
+ Set gtmtypes("node_local",191,"off")=88156
Set gtmtypes("node_local",191,"len")=4
- Set gtmtypes("node_local",191,"type")="boolean_t"
- Set gtmtypfldindx("node_local","snapshot_in_prog")=191
- Set gtmtypes("node_local",192,"name")="node_local.num_snapshots_in_effect"
- Set gtmtypes("node_local",192,"off")=96340
- Set gtmtypes("node_local",192,"len")=4
+ Set gtmtypes("node_local",191,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","freeze_online")=191
+ Set gtmtypes("node_local",192,"name")="node_local.kip_pid_array"
+ Set gtmtypes("node_local",192,"off")=88160
+ Set gtmtypes("node_local",192,"len")=32
Set gtmtypes("node_local",192,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","num_snapshots_in_effect")=192
- Set gtmtypes("node_local",193,"name")="node_local.wbox_test_seq_num"
- Set gtmtypes("node_local",193,"off")=96344
- Set gtmtypes("node_local",193,"len")=4
- Set gtmtypes("node_local",193,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wbox_test_seq_num")=193
- Set gtmtypes("node_local",194,"name")="node_local.filler_8byte_align3"
- Set gtmtypes("node_local",194,"off")=96348
+ Set gtmtypfldindx("node_local","kip_pid_array")=192
+ Set gtmtypes("node_local",192,"dim")=8
+ Set gtmtypes("node_local",193,"name")="node_local.sec_size"
+ Set gtmtypes("node_local",193,"off")=88192
+ Set gtmtypes("node_local",193,"len")=8
+ Set gtmtypes("node_local",193,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","sec_size")=193
+ Set gtmtypes("node_local",194,"name")="node_local.jnlpool_shmid"
+ Set gtmtypes("node_local",194,"off")=88200
Set gtmtypes("node_local",194,"len")=4
Set gtmtypes("node_local",194,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align3")=194
- Set gtmtypes("node_local",195,"name")="node_local.kip_pid_array"
- Set gtmtypes("node_local",195,"off")=96352
- Set gtmtypes("node_local",195,"len")=32
- Set gtmtypes("node_local",195,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","kip_pid_array")=195
- Set gtmtypes("node_local",195,"dim")=8
- Set gtmtypes("node_local",196,"name")="node_local.sec_size"
- Set gtmtypes("node_local",196,"off")=96384
- Set gtmtypes("node_local",196,"len")=8
- Set gtmtypes("node_local",196,"type")="uint64_t"
- Set gtmtypfldindx("node_local","sec_size")=196
- Set gtmtypes("node_local",197,"name")="node_local.jnlpool_shmid"
- Set gtmtypes("node_local",197,"off")=96392
+ Set gtmtypfldindx("node_local","jnlpool_shmid")=194
+ Set gtmtypes("node_local",195,"name")="node_local.lockspacefull_logged"
+ Set gtmtypes("node_local",195,"off")=88204
+ Set gtmtypes("node_local",195,"len")=4
+ Set gtmtypes("node_local",195,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lockspacefull_logged")=195
+ Set gtmtypes("node_local",196,"name")="node_local.trunc_pid"
+ Set gtmtypes("node_local",196,"off")=88208
+ Set gtmtypes("node_local",196,"len")=4
+ Set gtmtypes("node_local",196,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","trunc_pid")=196
+ Set gtmtypes("node_local",197,"name")="node_local.highest_lbm_with_busy_blk"
+ Set gtmtypes("node_local",197,"off")=88212
Set gtmtypes("node_local",197,"len")=4
Set gtmtypes("node_local",197,"type")="int"
- Set gtmtypfldindx("node_local","jnlpool_shmid")=197
- Set gtmtypes("node_local",198,"name")="node_local.lockspacefull_logged"
- Set gtmtypes("node_local",198,"off")=96396
- Set gtmtypes("node_local",198,"len")=4
- Set gtmtypes("node_local",198,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lockspacefull_logged")=198
- Set gtmtypes("node_local",199,"name")="node_local.trunc_pid"
- Set gtmtypes("node_local",199,"off")=96400
+ Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=197
+ Set gtmtypes("node_local",198,"name")="node_local.ftok_ops_array"
+ Set gtmtypes("node_local",198,"off")=88216
+ Set gtmtypes("node_local",198,"len")=8192
+ Set gtmtypes("node_local",198,"type")="ftokhist"
+ Set gtmtypfldindx("node_local","ftok_ops_array")=198
+ Set gtmtypes("node_local",198,"dim")=512
+ Set gtmtypes("node_local",199,"name")="node_local.ftok_ops_array[0].ftok_oper"
+ Set gtmtypes("node_local",199,"off")=88216
Set gtmtypes("node_local",199,"len")=4
- Set gtmtypes("node_local",199,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","trunc_pid")=199
- Set gtmtypes("node_local",200,"name")="node_local.highest_lbm_with_busy_blk"
- Set gtmtypes("node_local",200,"off")=96404
+ Set gtmtypes("node_local",199,"type")="int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=199
+ Set gtmtypes("node_local",200,"name")="node_local.ftok_ops_array[0].process_id"
+ Set gtmtypes("node_local",200,"off")=88220
Set gtmtypes("node_local",200,"len")=4
- Set gtmtypes("node_local",200,"type")="int"
- Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=200
- Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array"
- Set gtmtypes("node_local",201,"off")=96408
- Set gtmtypes("node_local",201,"len")=8192
- Set gtmtypes("node_local",201,"type")="ftokhist"
- Set gtmtypfldindx("node_local","ftok_ops_array")=201
- Set gtmtypes("node_local",201,"dim")=512
- Set gtmtypes("node_local",202,"name")="node_local.ftok_ops_array[0].ftok_oper"
+ Set gtmtypes("node_local",200,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=200
+ Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypes("node_local",201,"off")=88224
+ Set gtmtypes("node_local",201,"len")=8
+ Set gtmtypes("node_local",201,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=201
+ Set gtmtypes("node_local",202,"name")="node_local.root_search_cycle"
Set gtmtypes("node_local",202,"off")=96408
Set gtmtypes("node_local",202,"len")=4
- Set gtmtypes("node_local",202,"type")="int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=202
- Set gtmtypes("node_local",203,"name")="node_local.ftok_ops_array[0].process_id"
+ Set gtmtypes("node_local",202,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","root_search_cycle")=202
+ Set gtmtypes("node_local",203,"name")="node_local.onln_rlbk_cycle"
Set gtmtypes("node_local",203,"off")=96412
Set gtmtypes("node_local",203,"len")=4
Set gtmtypes("node_local",203,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=203
- Set gtmtypes("node_local",204,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypfldindx("node_local","onln_rlbk_cycle")=203
+ Set gtmtypes("node_local",204,"name")="node_local.db_onln_rlbkd_cycle"
Set gtmtypes("node_local",204,"off")=96416
- Set gtmtypes("node_local",204,"len")=8
- Set gtmtypes("node_local",204,"type")="uint64_t"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=204
- Set gtmtypes("node_local",205,"name")="node_local.root_search_cycle"
- Set gtmtypes("node_local",205,"off")=104600
+ Set gtmtypes("node_local",204,"len")=4
+ Set gtmtypes("node_local",204,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=204
+ Set gtmtypes("node_local",205,"name")="node_local.onln_rlbk_pid"
+ Set gtmtypes("node_local",205,"off")=96420
Set gtmtypes("node_local",205,"len")=4
Set gtmtypes("node_local",205,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","root_search_cycle")=205
- Set gtmtypes("node_local",206,"name")="node_local.onln_rlbk_cycle"
- Set gtmtypes("node_local",206,"off")=104604
+ Set gtmtypfldindx("node_local","onln_rlbk_pid")=205
+ Set gtmtypes("node_local",206,"name")="node_local.dbrndwn_ftok_skip"
+ Set gtmtypes("node_local",206,"off")=96424
Set gtmtypes("node_local",206,"len")=4
Set gtmtypes("node_local",206,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_cycle")=206
- Set gtmtypes("node_local",207,"name")="node_local.db_onln_rlbkd_cycle"
- Set gtmtypes("node_local",207,"off")=104608
+ Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=206
+ Set gtmtypes("node_local",207,"name")="node_local.dbrndwn_access_skip"
+ Set gtmtypes("node_local",207,"off")=96428
Set gtmtypes("node_local",207,"len")=4
Set gtmtypes("node_local",207,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=207
- Set gtmtypes("node_local",208,"name")="node_local.onln_rlbk_pid"
- Set gtmtypes("node_local",208,"off")=104612
+ Set gtmtypfldindx("node_local","dbrndwn_access_skip")=207
+ Set gtmtypes("node_local",208,"name")="node_local.fastinteg_in_prog"
+ Set gtmtypes("node_local",208,"off")=96432
Set gtmtypes("node_local",208,"len")=4
- Set gtmtypes("node_local",208,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_pid")=208
- Set gtmtypes("node_local",209,"name")="node_local.dbrndwn_ftok_skip"
- Set gtmtypes("node_local",209,"off")=104616
+ Set gtmtypes("node_local",208,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fastinteg_in_prog")=208
+ Set gtmtypes("node_local",209,"name")="node_local.wtstart_errcnt"
+ Set gtmtypes("node_local",209,"off")=96436
Set gtmtypes("node_local",209,"len")=4
Set gtmtypes("node_local",209,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=209
- Set gtmtypes("node_local",210,"name")="node_local.dbrndwn_access_skip"
- Set gtmtypes("node_local",210,"off")=104620
+ Set gtmtypfldindx("node_local","wtstart_errcnt")=209
+ Set gtmtypes("node_local",210,"name")="node_local.fake_db_enospc"
+ Set gtmtypes("node_local",210,"off")=96440
Set gtmtypes("node_local",210,"len")=4
- Set gtmtypes("node_local",210,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_access_skip")=210
- Set gtmtypes("node_local",211,"name")="node_local.fastinteg_in_prog"
- Set gtmtypes("node_local",211,"off")=104624
+ Set gtmtypes("node_local",210,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fake_db_enospc")=210
+ Set gtmtypes("node_local",211,"name")="node_local.fake_jnl_enospc"
+ Set gtmtypes("node_local",211,"off")=96444
Set gtmtypes("node_local",211,"len")=4
Set gtmtypes("node_local",211,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fastinteg_in_prog")=211
- Set gtmtypes("node_local",212,"name")="node_local.wtstart_errcnt"
- Set gtmtypes("node_local",212,"off")=104628
+ Set gtmtypfldindx("node_local","fake_jnl_enospc")=211
+ Set gtmtypes("node_local",212,"name")="node_local.doing_epoch"
+ Set gtmtypes("node_local",212,"off")=96448
Set gtmtypes("node_local",212,"len")=4
- Set gtmtypes("node_local",212,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wtstart_errcnt")=212
- Set gtmtypes("node_local",213,"name")="node_local.fake_db_enospc"
- Set gtmtypes("node_local",213,"off")=104632
+ Set gtmtypes("node_local",212,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","doing_epoch")=212
+ Set gtmtypes("node_local",213,"name")="node_local.epoch_taper_start_dbuffs"
+ Set gtmtypes("node_local",213,"off")=96452
Set gtmtypes("node_local",213,"len")=4
- Set gtmtypes("node_local",213,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_db_enospc")=213
- Set gtmtypes("node_local",214,"name")="node_local.fake_jnl_enospc"
- Set gtmtypes("node_local",214,"off")=104636
+ Set gtmtypes("node_local",213,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=213
+ Set gtmtypes("node_local",214,"name")="node_local.epoch_taper_need_fsync"
+ Set gtmtypes("node_local",214,"off")=96456
Set gtmtypes("node_local",214,"len")=4
Set gtmtypes("node_local",214,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_jnl_enospc")=214
- Set gtmtypes("node_local",215,"name")="node_local.doing_epoch"
- Set gtmtypes("node_local",215,"off")=104640
- Set gtmtypes("node_local",215,"len")=4
- Set gtmtypes("node_local",215,"type")="boolean_t"
- Set gtmtypfldindx("node_local","doing_epoch")=215
- Set gtmtypes("node_local",216,"name")="node_local.epoch_taper_start_dbuffs"
- Set gtmtypes("node_local",216,"off")=104644
+ Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=214
+ Set gtmtypes("node_local",215,"name")="node_local.wt_pid_array"
+ Set gtmtypes("node_local",215,"off")=96460
+ Set gtmtypes("node_local",215,"len")=16
+ Set gtmtypes("node_local",215,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wt_pid_array")=215
+ Set gtmtypes("node_local",215,"dim")=4
+ Set gtmtypes("node_local",216,"name")="node_local.reorg_encrypt_pid"
+ Set gtmtypes("node_local",216,"off")=96476
Set gtmtypes("node_local",216,"len")=4
Set gtmtypes("node_local",216,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=216
- Set gtmtypes("node_local",217,"name")="node_local.epoch_taper_need_fsync"
- Set gtmtypes("node_local",217,"off")=104648
+ Set gtmtypfldindx("node_local","reorg_encrypt_pid")=216
+ Set gtmtypes("node_local",217,"name")="node_local.reorg_encrypt_cycle"
+ Set gtmtypes("node_local",217,"off")=96480
Set gtmtypes("node_local",217,"len")=4
- Set gtmtypes("node_local",217,"type")="boolean_t"
- Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=217
- Set gtmtypes("node_local",218,"name")="node_local.wt_pid_array"
- Set gtmtypes("node_local",218,"off")=104652
- Set gtmtypes("node_local",218,"len")=16
+ Set gtmtypes("node_local",217,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=217
+ Set gtmtypes("node_local",218,"name")="node_local.mupip_extract_count"
+ Set gtmtypes("node_local",218,"off")=96484
+ Set gtmtypes("node_local",218,"len")=4
Set gtmtypes("node_local",218,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wt_pid_array")=218
- Set gtmtypes("node_local",218,"dim")=4
- Set gtmtypes("node_local",219,"name")="node_local.reorg_encrypt_pid"
- Set gtmtypes("node_local",219,"off")=104668
+ Set gtmtypfldindx("node_local","mupip_extract_count")=218
+ Set gtmtypes("node_local",219,"name")="node_local.saved_acc_meth"
+ Set gtmtypes("node_local",219,"off")=96488
Set gtmtypes("node_local",219,"len")=4
- Set gtmtypes("node_local",219,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_pid")=219
- Set gtmtypes("node_local",220,"name")="node_local.reorg_encrypt_cycle"
- Set gtmtypes("node_local",220,"off")=104672
+ Set gtmtypes("node_local",219,"type")="int"
+ Set gtmtypfldindx("node_local","saved_acc_meth")=219
+ Set gtmtypes("node_local",220,"name")="node_local.saved_blk_size"
+ Set gtmtypes("node_local",220,"off")=96492
Set gtmtypes("node_local",220,"len")=4
- Set gtmtypes("node_local",220,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=220
- Set gtmtypes("node_local",221,"name")="node_local.mupip_extract_count"
- Set gtmtypes("node_local",221,"off")=104676
+ Set gtmtypes("node_local",220,"type")="int"
+ Set gtmtypfldindx("node_local","saved_blk_size")=220
+ Set gtmtypes("node_local",221,"name")="node_local.saved_lock_space_size"
+ Set gtmtypes("node_local",221,"off")=96496
Set gtmtypes("node_local",221,"len")=4
Set gtmtypes("node_local",221,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","mupip_extract_count")=221
- Set gtmtypes("node_local",222,"name")="node_local.saved_acc_meth"
- Set gtmtypes("node_local",222,"off")=104680
+ Set gtmtypfldindx("node_local","saved_lock_space_size")=221
+ Set gtmtypes("node_local",222,"name")="node_local.saved_jnl_buffer_size"
+ Set gtmtypes("node_local",222,"off")=96500
Set gtmtypes("node_local",222,"len")=4
Set gtmtypes("node_local",222,"type")="int"
- Set gtmtypfldindx("node_local","saved_acc_meth")=222
- Set gtmtypes("node_local",223,"name")="node_local.saved_blk_size"
- Set gtmtypes("node_local",223,"off")=104684
- Set gtmtypes("node_local",223,"len")=4
- Set gtmtypes("node_local",223,"type")="int"
- Set gtmtypfldindx("node_local","saved_blk_size")=223
- Set gtmtypes("node_local",224,"name")="node_local.saved_lock_space_size"
- Set gtmtypes("node_local",224,"off")=104688
+ Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=222
+ Set gtmtypes("node_local",223,"name")="node_local.update_underway_tn"
+ Set gtmtypes("node_local",223,"off")=96504
+ Set gtmtypes("node_local",223,"len")=8
+ Set gtmtypes("node_local",223,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","update_underway_tn")=223
+ Set gtmtypes("node_local",224,"name")="node_local.lastwriterbypas_msg_issued"
+ Set gtmtypes("node_local",224,"off")=96512
Set gtmtypes("node_local",224,"len")=4
- Set gtmtypes("node_local",224,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","saved_lock_space_size")=224
- Set gtmtypes("node_local",225,"name")="node_local.saved_jnl_buffer_size"
- Set gtmtypes("node_local",225,"off")=104692
+ Set gtmtypes("node_local",224,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=224
+ Set gtmtypes("node_local",225,"name")="node_local.first_writer_seen"
+ Set gtmtypes("node_local",225,"off")=96516
Set gtmtypes("node_local",225,"len")=4
- Set gtmtypes("node_local",225,"type")="int"
- Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=225
- Set gtmtypes("node_local",226,"name")="node_local.update_underway_tn"
- Set gtmtypes("node_local",226,"off")=104696
- Set gtmtypes("node_local",226,"len")=8
- Set gtmtypes("node_local",226,"type")="uint64_t"
- Set gtmtypfldindx("node_local","update_underway_tn")=226
- Set gtmtypes("node_local",227,"name")="node_local.lastwriterbypas_msg_issued"
- Set gtmtypes("node_local",227,"off")=104704
+ Set gtmtypes("node_local",225,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","first_writer_seen")=225
+ Set gtmtypes("node_local",226,"name")="node_local.first_nonbypas_writer_seen"
+ Set gtmtypes("node_local",226,"off")=96520
+ Set gtmtypes("node_local",226,"len")=4
+ Set gtmtypes("node_local",226,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=226
+ Set gtmtypes("node_local",227,"name")="node_local.ftok_counter_halted"
+ Set gtmtypes("node_local",227,"off")=96524
Set gtmtypes("node_local",227,"len")=4
Set gtmtypes("node_local",227,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=227
- Set gtmtypes("node_local",228,"name")="node_local.first_writer_seen"
- Set gtmtypes("node_local",228,"off")=104708
+ Set gtmtypfldindx("node_local","ftok_counter_halted")=227
+ Set gtmtypes("node_local",228,"name")="node_local.access_counter_halted"
+ Set gtmtypes("node_local",228,"off")=96528
Set gtmtypes("node_local",228,"len")=4
Set gtmtypes("node_local",228,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_writer_seen")=228
- Set gtmtypes("node_local",229,"name")="node_local.first_nonbypas_writer_seen"
- Set gtmtypes("node_local",229,"off")=104712
+ Set gtmtypfldindx("node_local","access_counter_halted")=228
+ Set gtmtypes("node_local",229,"name")="node_local.statsdb_created"
+ Set gtmtypes("node_local",229,"off")=96532
Set gtmtypes("node_local",229,"len")=4
Set gtmtypes("node_local",229,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=229
- Set gtmtypes("node_local",230,"name")="node_local.ftok_counter_halted"
- Set gtmtypes("node_local",230,"off")=104716
+ Set gtmtypfldindx("node_local","statsdb_created")=229
+ Set gtmtypes("node_local",230,"name")="node_local.statsdb_fname_len"
+ Set gtmtypes("node_local",230,"off")=96536
Set gtmtypes("node_local",230,"len")=4
- Set gtmtypes("node_local",230,"type")="boolean_t"
- Set gtmtypfldindx("node_local","ftok_counter_halted")=230
- Set gtmtypes("node_local",231,"name")="node_local.access_counter_halted"
- Set gtmtypes("node_local",231,"off")=104720
+ Set gtmtypes("node_local",230,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","statsdb_fname_len")=230
+ Set gtmtypes("node_local",231,"name")="node_local.statsdb_rundown_clean"
+ Set gtmtypes("node_local",231,"off")=96540
Set gtmtypes("node_local",231,"len")=4
Set gtmtypes("node_local",231,"type")="boolean_t"
- Set gtmtypfldindx("node_local","access_counter_halted")=231
- Set gtmtypes("node_local",232,"name")="node_local.statsdb_created"
- Set gtmtypes("node_local",232,"off")=104724
- Set gtmtypes("node_local",232,"len")=4
- Set gtmtypes("node_local",232,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_created")=232
- Set gtmtypes("node_local",233,"name")="node_local.statsdb_fname_len"
- Set gtmtypes("node_local",233,"off")=104728
- Set gtmtypes("node_local",233,"len")=4
- Set gtmtypes("node_local",233,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","statsdb_fname_len")=233
- Set gtmtypes("node_local",234,"name")="node_local.statsdb_rundown_clean"
- Set gtmtypes("node_local",234,"off")=104732
- Set gtmtypes("node_local",234,"len")=4
- Set gtmtypes("node_local",234,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_rundown_clean")=234
- Set gtmtypes("node_local",235,"name")="node_local.freeze_latch"
- Set gtmtypes("node_local",235,"off")=104736
+ Set gtmtypfldindx("node_local","statsdb_rundown_clean")=231
+ Set gtmtypes("node_local",232,"name")="node_local.freeze_latch"
+ Set gtmtypes("node_local",232,"off")=96544
+ Set gtmtypes("node_local",232,"len")=8
+ Set gtmtypes("node_local",232,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","freeze_latch")=232
+ Set gtmtypes("node_local",233,"name")="node_local.freeze_latch.u"
+ Set gtmtypes("node_local",233,"off")=96544
+ Set gtmtypes("node_local",233,"len")=8
+ Set gtmtypes("node_local",233,"type")="union"
+ Set gtmtypfldindx("node_local","freeze_latch.u")=233
+ Set gtmtypes("node_local",234,"name")="node_local.freeze_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",234,"off")=96544
+ Set gtmtypes("node_local",234,"len")=8
+ Set gtmtypes("node_local",234,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=234
+ Set gtmtypes("node_local",235,"name")="node_local.freeze_latch.u.parts"
+ Set gtmtypes("node_local",235,"off")=96544
Set gtmtypes("node_local",235,"len")=8
- Set gtmtypes("node_local",235,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","freeze_latch")=235
- Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u"
- Set gtmtypes("node_local",236,"off")=104736
- Set gtmtypes("node_local",236,"len")=8
- Set gtmtypes("node_local",236,"type")="union"
- Set gtmtypfldindx("node_local","freeze_latch.u")=236
- Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",237,"off")=104736
- Set gtmtypes("node_local",237,"len")=8
- Set gtmtypes("node_local",237,"type")="uint64_t"
- Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=237
- Set gtmtypes("node_local",238,"name")="node_local.freeze_latch.u.parts"
- Set gtmtypes("node_local",238,"off")=104736
+ Set gtmtypes("node_local",235,"type")="struct"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts")=235
+ Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",236,"off")=96544
+ Set gtmtypes("node_local",236,"len")=4
+ Set gtmtypes("node_local",236,"type")="int"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=236
+ Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",237,"off")=96548
+ Set gtmtypes("node_local",237,"len")=4
+ Set gtmtypes("node_local",237,"type")="int"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=237
+ Set gtmtypes("node_local",238,"name")="node_local.wcs_buffs_freed"
+ Set gtmtypes("node_local",238,"off")=96552
Set gtmtypes("node_local",238,"len")=8
- Set gtmtypes("node_local",238,"type")="struct"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts")=238
- Set gtmtypes("node_local",239,"name")="node_local.freeze_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",239,"off")=104736
- Set gtmtypes("node_local",239,"len")=4
- Set gtmtypes("node_local",239,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=239
- Set gtmtypes("node_local",240,"name")="node_local.freeze_latch.u.parts.latch_word"
- Set gtmtypes("node_local",240,"off")=104740
- Set gtmtypes("node_local",240,"len")=4
- Set gtmtypes("node_local",240,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=240
- Set gtmtypes("node_local",241,"name")="node_local.wcs_buffs_freed"
- Set gtmtypes("node_local",241,"off")=104744
+ Set gtmtypes("node_local",238,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_buffs_freed")=238
+ Set gtmtypes("node_local",239,"name")="node_local.dskspace_next_fire"
+ Set gtmtypes("node_local",239,"off")=96560
+ Set gtmtypes("node_local",239,"len")=8
+ Set gtmtypes("node_local",239,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","dskspace_next_fire")=239
+ Set gtmtypes("node_local",240,"name")="node_local.lock_crit"
+ Set gtmtypes("node_local",240,"off")=96568
+ Set gtmtypes("node_local",240,"len")=8
+ Set gtmtypes("node_local",240,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","lock_crit")=240
+ Set gtmtypes("node_local",241,"name")="node_local.lock_crit.u"
+ Set gtmtypes("node_local",241,"off")=96568
Set gtmtypes("node_local",241,"len")=8
- Set gtmtypes("node_local",241,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_buffs_freed")=241
- Set gtmtypes("node_local",242,"name")="node_local.dskspace_next_fire"
- Set gtmtypes("node_local",242,"off")=104752
+ Set gtmtypes("node_local",241,"type")="union"
+ Set gtmtypfldindx("node_local","lock_crit.u")=241
+ Set gtmtypes("node_local",242,"name")="node_local.lock_crit.u.pid_imgcnt"
+ Set gtmtypes("node_local",242,"off")=96568
Set gtmtypes("node_local",242,"len")=8
Set gtmtypes("node_local",242,"type")="uint64_t"
- Set gtmtypfldindx("node_local","dskspace_next_fire")=242
- Set gtmtypes("node_local",243,"name")="node_local.lock_crit"
- Set gtmtypes("node_local",243,"off")=104760
+ Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=242
+ Set gtmtypes("node_local",243,"name")="node_local.lock_crit.u.parts"
+ Set gtmtypes("node_local",243,"off")=96568
Set gtmtypes("node_local",243,"len")=8
- Set gtmtypes("node_local",243,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","lock_crit")=243
- Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u"
- Set gtmtypes("node_local",244,"off")=104760
- Set gtmtypes("node_local",244,"len")=8
- Set gtmtypes("node_local",244,"type")="union"
- Set gtmtypfldindx("node_local","lock_crit.u")=244
- Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.pid_imgcnt"
- Set gtmtypes("node_local",245,"off")=104760
- Set gtmtypes("node_local",245,"len")=8
- Set gtmtypes("node_local",245,"type")="uint64_t"
- Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=245
- Set gtmtypes("node_local",246,"name")="node_local.lock_crit.u.parts"
- Set gtmtypes("node_local",246,"off")=104760
- Set gtmtypes("node_local",246,"len")=8
- Set gtmtypes("node_local",246,"type")="struct"
- Set gtmtypfldindx("node_local","lock_crit.u.parts")=246
- Set gtmtypes("node_local",247,"name")="node_local.lock_crit.u.parts.latch_pid"
- Set gtmtypes("node_local",247,"off")=104760
+ Set gtmtypes("node_local",243,"type")="struct"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts")=243
+ Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u.parts.latch_pid"
+ Set gtmtypes("node_local",244,"off")=96568
+ Set gtmtypes("node_local",244,"len")=4
+ Set gtmtypes("node_local",244,"type")="int"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=244
+ Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.parts.latch_word"
+ Set gtmtypes("node_local",245,"off")=96572
+ Set gtmtypes("node_local",245,"len")=4
+ Set gtmtypes("node_local",245,"type")="int"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=245
+ Set gtmtypes("node_local",246,"name")="node_local.tp_hint"
+ Set gtmtypes("node_local",246,"off")=96576
+ Set gtmtypes("node_local",246,"len")=4
+ Set gtmtypes("node_local",246,"type")="int"
+ Set gtmtypfldindx("node_local","tp_hint")=246
+ Set gtmtypes("node_local",247,"name")="node_local.filler_8byte_align3"
+ Set gtmtypes("node_local",247,"off")=96580
Set gtmtypes("node_local",247,"len")=4
Set gtmtypes("node_local",247,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=247
- Set gtmtypes("node_local",248,"name")="node_local.lock_crit.u.parts.latch_word"
- Set gtmtypes("node_local",248,"off")=104764
- Set gtmtypes("node_local",248,"len")=4
- Set gtmtypes("node_local",248,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=248
- Set gtmtypes("node_local",249,"name")="node_local.tp_hint"
- Set gtmtypes("node_local",249,"off")=104768
- Set gtmtypes("node_local",249,"len")=4
- Set gtmtypes("node_local",249,"type")="int"
- Set gtmtypfldindx("node_local","tp_hint")=249
- Set gtmtypes("node_local",250,"name")="node_local.filler_8byte_align6"
- Set gtmtypes("node_local",250,"off")=104772
- Set gtmtypes("node_local",250,"len")=4
- Set gtmtypes("node_local",250,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align6")=250
+ Set gtmtypfldindx("node_local","filler_8byte_align3")=247
;
Set gtmtypes("noisolation_element")="struct"
Set gtmtypes("noisolation_element",0)=2
@@ -27331,8 +27417,8 @@ Init
Set gtmtypfldindx("sgmm_addrs","filler")=1
;
Set gtmtypes("sgmnt_addrs")="struct"
- Set gtmtypes("sgmnt_addrs",0)=153
- Set gtmtypes("sgmnt_addrs","len")=864
+ Set gtmtypes("sgmnt_addrs",0)=156
+ Set gtmtypes("sgmnt_addrs","len")=876
Set gtmtypes("sgmnt_addrs",1,"name")="sgmnt_addrs.hdr"
Set gtmtypes("sgmnt_addrs",1,"off")=0
Set gtmtypes("sgmnt_addrs",1,"len")=4
@@ -28100,9 +28186,24 @@ Init
Set gtmtypes("sgmnt_addrs",153,"len")=4
Set gtmtypes("sgmnt_addrs",153,"type")="boolean_t"
Set gtmtypfldindx("sgmnt_addrs","statsDB_setup_completed")=153
+ Set gtmtypes("sgmnt_addrs",154,"name")="sgmnt_addrs.gd_instinfo"
+ Set gtmtypes("sgmnt_addrs",154,"off")=864
+ Set gtmtypes("sgmnt_addrs",154,"len")=4
+ Set gtmtypes("sgmnt_addrs",154,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_instinfo")=154
+ Set gtmtypes("sgmnt_addrs",155,"name")="sgmnt_addrs.gd_ptr"
+ Set gtmtypes("sgmnt_addrs",155,"off")=868
+ Set gtmtypes("sgmnt_addrs",155,"len")=4
+ Set gtmtypes("sgmnt_addrs",155,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_ptr")=155
+ Set gtmtypes("sgmnt_addrs",156,"name")="sgmnt_addrs.jnlpool"
+ Set gtmtypes("sgmnt_addrs",156,"off")=872
+ Set gtmtypes("sgmnt_addrs",156,"len")=4
+ Set gtmtypes("sgmnt_addrs",156,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","jnlpool")=156
;
Set gtmtypes("sgmnt_data")="struct"
- Set gtmtypes("sgmnt_data",0)=592
+ Set gtmtypes("sgmnt_data",0)=593
Set gtmtypes("sgmnt_data","len")=8192
Set gtmtypes("sgmnt_data",1,"name")="sgmnt_data.label"
Set gtmtypes("sgmnt_data",1,"off")=0
@@ -28359,11 +28460,11 @@ Init
Set gtmtypes("sgmnt_data",51,"len")=4
Set gtmtypes("sgmnt_data",51,"type")="int"
Set gtmtypfldindx("sgmnt_data","abandoned_kills")=51
- Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.freeze_online"
+ Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.unused_freeze_online_filler"
Set gtmtypes("sgmnt_data",52,"off")=312
Set gtmtypes("sgmnt_data",52,"len")=4
Set gtmtypes("sgmnt_data",52,"type")="unsigned-int"
- Set gtmtypfldindx("sgmnt_data","freeze_online")=52
+ Set gtmtypfldindx("sgmnt_data","unused_freeze_online_filler")=52
Set gtmtypes("sgmnt_data",53,"name")="sgmnt_data.filler_320"
Set gtmtypes("sgmnt_data",53,"off")=316
Set gtmtypes("sgmnt_data",53,"len")=4
@@ -31070,16 +31171,21 @@ Init
Set gtmtypes("sgmnt_data",590,"len")=256
Set gtmtypes("sgmnt_data",590,"type")="unsigned-char"
Set gtmtypfldindx("sgmnt_data","basedb_fname")=590
- Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.read_only"
Set gtmtypes("sgmnt_data",591,"off")=6724
- Set gtmtypes("sgmnt_data",591,"len")=444
- Set gtmtypes("sgmnt_data",591,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_7k")=591
- Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_8k"
- Set gtmtypes("sgmnt_data",592,"off")=7168
- Set gtmtypes("sgmnt_data",592,"len")=1024
+ Set gtmtypes("sgmnt_data",591,"len")=4
+ Set gtmtypes("sgmnt_data",591,"type")="boolean_t"
+ Set gtmtypfldindx("sgmnt_data","read_only")=591
+ Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",592,"off")=6728
+ Set gtmtypes("sgmnt_data",592,"len")=440
Set gtmtypes("sgmnt_data",592,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_8k")=592
+ Set gtmtypfldindx("sgmnt_data","filler_7k")=592
+ Set gtmtypes("sgmnt_data",593,"name")="sgmnt_data.filler_8k"
+ Set gtmtypes("sgmnt_data",593,"off")=7168
+ Set gtmtypes("sgmnt_data",593,"len")=1024
+ Set gtmtypes("sgmnt_data",593,"type")="char"
+ Set gtmtypfldindx("sgmnt_data","filler_8k")=593
;
Set gtmtypes("shm_forw_multi_t")="struct"
Set gtmtypes("shm_forw_multi_t",0)=20
@@ -31256,7 +31362,7 @@ Init
Set gtmtypes("shm_reg_ctl_t",9,"dim")=3
;
Set gtmtypes("shm_snapshot_t")="struct"
- Set gtmtypes("shm_snapshot_t",0)=614
+ Set gtmtypes("shm_snapshot_t",0)=615
Set gtmtypes("shm_snapshot_t","len")=12360
Set gtmtypes("shm_snapshot_t",1,"name")="shm_snapshot_t.ss_info"
Set gtmtypes("shm_snapshot_t",1,"off")=0
@@ -31623,11 +31729,11 @@ Init
Set gtmtypes("shm_snapshot_t",73,"len")=4
Set gtmtypes("shm_snapshot_t",73,"type")="int"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.abandoned_kills")=73
- Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.freeze_online"
+ Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shm_snapshot_t",74,"off")=4480
Set gtmtypes("shm_snapshot_t",74,"len")=4
Set gtmtypes("shm_snapshot_t",74,"type")="unsigned-int"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.freeze_online")=74
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.unused_freeze_online_filler")=74
Set gtmtypes("shm_snapshot_t",75,"name")="shm_snapshot_t.shadow_file_header.filler_320"
Set gtmtypes("shm_snapshot_t",75,"off")=4484
Set gtmtypes("shm_snapshot_t",75,"len")=4
@@ -34334,16 +34440,21 @@ Init
Set gtmtypes("shm_snapshot_t",612,"len")=256
Set gtmtypes("shm_snapshot_t",612,"type")="unsigned-char"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.basedb_fname")=612
- Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.read_only"
Set gtmtypes("shm_snapshot_t",613,"off")=10892
- Set gtmtypes("shm_snapshot_t",613,"len")=444
- Set gtmtypes("shm_snapshot_t",613,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=613
- Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
- Set gtmtypes("shm_snapshot_t",614,"off")=11336
- Set gtmtypes("shm_snapshot_t",614,"len")=1024
+ Set gtmtypes("shm_snapshot_t",613,"len")=4
+ Set gtmtypes("shm_snapshot_t",613,"type")="boolean_t"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.read_only")=613
+ Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",614,"off")=10896
+ Set gtmtypes("shm_snapshot_t",614,"len")=440
Set gtmtypes("shm_snapshot_t",614,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=614
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=614
+ Set gtmtypes("shm_snapshot_t",615,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
+ Set gtmtypes("shm_snapshot_t",615,"off")=11336
+ Set gtmtypes("shm_snapshot_t",615,"len")=1024
+ Set gtmtypes("shm_snapshot_t",615,"type")="char"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=615
;
Set gtmtypes("shmpool_blk_hdr")="struct"
Set gtmtypes("shmpool_blk_hdr",0)=11
@@ -34405,7 +34516,7 @@ Init
Set gtmtypfldindx("shmpool_blk_hdr","image_count")=11
;
Set gtmtypes("shmpool_buff_hdr")="struct"
- Set gtmtypes("shmpool_buff_hdr",0)=621
+ Set gtmtypes("shmpool_buff_hdr",0)=622
Set gtmtypes("shmpool_buff_hdr","len")=8544
Set gtmtypes("shmpool_buff_hdr",1,"name")="shmpool_buff_hdr.shmpool_crit_latch"
Set gtmtypes("shmpool_buff_hdr",1,"off")=0
@@ -34807,11 +34918,11 @@ Init
Set gtmtypes("shmpool_buff_hdr",80,"len")=4
Set gtmtypes("shmpool_buff_hdr",80,"type")="int"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.abandoned_kills")=80
- Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.freeze_online"
+ Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shmpool_buff_hdr",81,"off")=664
Set gtmtypes("shmpool_buff_hdr",81,"len")=4
Set gtmtypes("shmpool_buff_hdr",81,"type")="unsigned-int"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.freeze_online")=81
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.unused_freeze_online_filler")=81
Set gtmtypes("shmpool_buff_hdr",82,"name")="shmpool_buff_hdr.shadow_file_header.filler_320"
Set gtmtypes("shmpool_buff_hdr",82,"off")=668
Set gtmtypes("shmpool_buff_hdr",82,"len")=4
@@ -37518,16 +37629,21 @@ Init
Set gtmtypes("shmpool_buff_hdr",619,"len")=256
Set gtmtypes("shmpool_buff_hdr",619,"type")="unsigned-char"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.basedb_fname")=619
- Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.read_only"
Set gtmtypes("shmpool_buff_hdr",620,"off")=7076
- Set gtmtypes("shmpool_buff_hdr",620,"len")=444
- Set gtmtypes("shmpool_buff_hdr",620,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=620
- Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
- Set gtmtypes("shmpool_buff_hdr",621,"off")=7520
- Set gtmtypes("shmpool_buff_hdr",621,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",620,"len")=4
+ Set gtmtypes("shmpool_buff_hdr",620,"type")="boolean_t"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.read_only")=620
+ Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",621,"off")=7080
+ Set gtmtypes("shmpool_buff_hdr",621,"len")=440
Set gtmtypes("shmpool_buff_hdr",621,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=621
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=621
+ Set gtmtypes("shmpool_buff_hdr",622,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
+ Set gtmtypes("shmpool_buff_hdr",622,"off")=7520
+ Set gtmtypes("shmpool_buff_hdr",622,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",622,"type")="char"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=622
;
Set gtmtypes("show_reply")="struct"
Set gtmtypes("show_reply",0)=2
@@ -41319,11 +41435,11 @@ Init
Set gtmtypfldindx("unique_file_id","file_id")=5
;
Set gtmtypes("unix_db_info")="struct"
- Set gtmtypes("unix_db_info",0)=169
- Set gtmtypes("unix_db_info","len")=932
+ Set gtmtypes("unix_db_info",0)=172
+ Set gtmtypes("unix_db_info","len")=944
Set gtmtypes("unix_db_info",1,"name")="unix_db_info.s_addrs"
Set gtmtypes("unix_db_info",1,"off")=0
- Set gtmtypes("unix_db_info",1,"len")=864
+ Set gtmtypes("unix_db_info",1,"len")=876
Set gtmtypes("unix_db_info",1,"type")="sgmnt_addrs"
Set gtmtypfldindx("unix_db_info","s_addrs")=1
Set gtmtypes("unix_db_info",2,"name")="unix_db_info.s_addrs.hdr"
@@ -42093,81 +42209,96 @@ Init
Set gtmtypes("unix_db_info",154,"len")=4
Set gtmtypes("unix_db_info",154,"type")="boolean_t"
Set gtmtypfldindx("unix_db_info","s_addrs.statsDB_setup_completed")=154
- Set gtmtypes("unix_db_info",155,"name")="unix_db_info.fn"
+ Set gtmtypes("unix_db_info",155,"name")="unix_db_info.s_addrs.gd_instinfo"
Set gtmtypes("unix_db_info",155,"off")=864
Set gtmtypes("unix_db_info",155,"len")=4
Set gtmtypes("unix_db_info",155,"type")="addr"
- Set gtmtypfldindx("unix_db_info","fn")=155
- Set gtmtypes("unix_db_info",156,"name")="unix_db_info.fd"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_instinfo")=155
+ Set gtmtypes("unix_db_info",156,"name")="unix_db_info.s_addrs.gd_ptr"
Set gtmtypes("unix_db_info",156,"off")=868
Set gtmtypes("unix_db_info",156,"len")=4
- Set gtmtypes("unix_db_info",156,"type")="int"
- Set gtmtypfldindx("unix_db_info","fd")=156
- Set gtmtypes("unix_db_info",157,"name")="unix_db_info.owning_gd"
+ Set gtmtypes("unix_db_info",156,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_ptr")=156
+ Set gtmtypes("unix_db_info",157,"name")="unix_db_info.s_addrs.jnlpool"
Set gtmtypes("unix_db_info",157,"off")=872
Set gtmtypes("unix_db_info",157,"len")=4
Set gtmtypes("unix_db_info",157,"type")="addr"
- Set gtmtypfldindx("unix_db_info","owning_gd")=157
- Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fileid"
+ Set gtmtypfldindx("unix_db_info","s_addrs.jnlpool")=157
+ Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fn"
Set gtmtypes("unix_db_info",158,"off")=876
- Set gtmtypes("unix_db_info",158,"len")=20
- Set gtmtypes("unix_db_info",158,"type")="unix_file_id"
- Set gtmtypfldindx("unix_db_info","fileid")=158
- Set gtmtypes("unix_db_info",159,"name")="unix_db_info.fileid.inode"
- Set gtmtypes("unix_db_info",159,"off")=876
- Set gtmtypes("unix_db_info",159,"len")=8
- Set gtmtypes("unix_db_info",159,"type")="ino_t"
- Set gtmtypfldindx("unix_db_info","fileid.inode")=159
- Set gtmtypes("unix_db_info",160,"name")="unix_db_info.fileid.device"
+ Set gtmtypes("unix_db_info",158,"len")=4
+ Set gtmtypes("unix_db_info",158,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","fn")=158
+ Set gtmtypes("unix_db_info",159,"name")="unix_db_info.fd"
+ Set gtmtypes("unix_db_info",159,"off")=880
+ Set gtmtypes("unix_db_info",159,"len")=4
+ Set gtmtypes("unix_db_info",159,"type")="int"
+ Set gtmtypfldindx("unix_db_info","fd")=159
+ Set gtmtypes("unix_db_info",160,"name")="unix_db_info.owning_gd"
Set gtmtypes("unix_db_info",160,"off")=884
- Set gtmtypes("unix_db_info",160,"len")=8
- Set gtmtypes("unix_db_info",160,"type")="dev_t"
- Set gtmtypfldindx("unix_db_info","fileid.device")=160
- Set gtmtypes("unix_db_info",161,"name")="unix_db_info.fileid.st_gen"
- Set gtmtypes("unix_db_info",161,"off")=892
- Set gtmtypes("unix_db_info",161,"len")=4
- Set gtmtypes("unix_db_info",161,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","fileid.st_gen")=161
- Set gtmtypes("unix_db_info",162,"name")="unix_db_info.semid"
- Set gtmtypes("unix_db_info",162,"off")=896
- Set gtmtypes("unix_db_info",162,"len")=4
- Set gtmtypes("unix_db_info",162,"type")="int"
- Set gtmtypfldindx("unix_db_info","semid")=162
- Set gtmtypes("unix_db_info",163,"name")="unix_db_info.gt_sem_ctime"
- Set gtmtypes("unix_db_info",163,"off")=900
- Set gtmtypes("unix_db_info",163,"len")=4
- Set gtmtypes("unix_db_info",163,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=163
- Set gtmtypes("unix_db_info",164,"name")="unix_db_info.shmid"
+ Set gtmtypes("unix_db_info",160,"len")=4
+ Set gtmtypes("unix_db_info",160,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","owning_gd")=160
+ Set gtmtypes("unix_db_info",161,"name")="unix_db_info.fileid"
+ Set gtmtypes("unix_db_info",161,"off")=888
+ Set gtmtypes("unix_db_info",161,"len")=20
+ Set gtmtypes("unix_db_info",161,"type")="unix_file_id"
+ Set gtmtypfldindx("unix_db_info","fileid")=161
+ Set gtmtypes("unix_db_info",162,"name")="unix_db_info.fileid.inode"
+ Set gtmtypes("unix_db_info",162,"off")=888
+ Set gtmtypes("unix_db_info",162,"len")=8
+ Set gtmtypes("unix_db_info",162,"type")="ino_t"
+ Set gtmtypfldindx("unix_db_info","fileid.inode")=162
+ Set gtmtypes("unix_db_info",163,"name")="unix_db_info.fileid.device"
+ Set gtmtypes("unix_db_info",163,"off")=896
+ Set gtmtypes("unix_db_info",163,"len")=8
+ Set gtmtypes("unix_db_info",163,"type")="dev_t"
+ Set gtmtypfldindx("unix_db_info","fileid.device")=163
+ Set gtmtypes("unix_db_info",164,"name")="unix_db_info.fileid.st_gen"
Set gtmtypes("unix_db_info",164,"off")=904
Set gtmtypes("unix_db_info",164,"len")=4
- Set gtmtypes("unix_db_info",164,"type")="int"
- Set gtmtypfldindx("unix_db_info","shmid")=164
- Set gtmtypes("unix_db_info",165,"name")="unix_db_info.gt_shm_ctime"
+ Set gtmtypes("unix_db_info",164,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","fileid.st_gen")=164
+ Set gtmtypes("unix_db_info",165,"name")="unix_db_info.semid"
Set gtmtypes("unix_db_info",165,"off")=908
Set gtmtypes("unix_db_info",165,"len")=4
- Set gtmtypes("unix_db_info",165,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=165
- Set gtmtypes("unix_db_info",166,"name")="unix_db_info.ftok_semid"
+ Set gtmtypes("unix_db_info",165,"type")="int"
+ Set gtmtypfldindx("unix_db_info","semid")=165
+ Set gtmtypes("unix_db_info",166,"name")="unix_db_info.gt_sem_ctime"
Set gtmtypes("unix_db_info",166,"off")=912
Set gtmtypes("unix_db_info",166,"len")=4
- Set gtmtypes("unix_db_info",166,"type")="int"
- Set gtmtypfldindx("unix_db_info","ftok_semid")=166
- Set gtmtypes("unix_db_info",167,"name")="unix_db_info.key"
+ Set gtmtypes("unix_db_info",166,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=166
+ Set gtmtypes("unix_db_info",167,"name")="unix_db_info.shmid"
Set gtmtypes("unix_db_info",167,"off")=916
Set gtmtypes("unix_db_info",167,"len")=4
- Set gtmtypes("unix_db_info",167,"type")="key_t"
- Set gtmtypfldindx("unix_db_info","key")=167
- Set gtmtypes("unix_db_info",168,"name")="unix_db_info.raw"
+ Set gtmtypes("unix_db_info",167,"type")="int"
+ Set gtmtypfldindx("unix_db_info","shmid")=167
+ Set gtmtypes("unix_db_info",168,"name")="unix_db_info.gt_shm_ctime"
Set gtmtypes("unix_db_info",168,"off")=920
Set gtmtypes("unix_db_info",168,"len")=4
- Set gtmtypes("unix_db_info",168,"type")="boolean_t"
- Set gtmtypfldindx("unix_db_info","raw")=168
- Set gtmtypes("unix_db_info",169,"name")="unix_db_info.db_fs_block_size"
+ Set gtmtypes("unix_db_info",168,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=168
+ Set gtmtypes("unix_db_info",169,"name")="unix_db_info.ftok_semid"
Set gtmtypes("unix_db_info",169,"off")=924
Set gtmtypes("unix_db_info",169,"len")=4
- Set gtmtypes("unix_db_info",169,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","db_fs_block_size")=169
+ Set gtmtypes("unix_db_info",169,"type")="int"
+ Set gtmtypfldindx("unix_db_info","ftok_semid")=169
+ Set gtmtypes("unix_db_info",170,"name")="unix_db_info.key"
+ Set gtmtypes("unix_db_info",170,"off")=928
+ Set gtmtypes("unix_db_info",170,"len")=4
+ Set gtmtypes("unix_db_info",170,"type")="key_t"
+ Set gtmtypfldindx("unix_db_info","key")=170
+ Set gtmtypes("unix_db_info",171,"name")="unix_db_info.raw"
+ Set gtmtypes("unix_db_info",171,"off")=932
+ Set gtmtypes("unix_db_info",171,"len")=4
+ Set gtmtypes("unix_db_info",171,"type")="boolean_t"
+ Set gtmtypfldindx("unix_db_info","raw")=171
+ Set gtmtypes("unix_db_info",172,"name")="unix_db_info.db_fs_block_size"
+ Set gtmtypes("unix_db_info",172,"off")=936
+ Set gtmtypes("unix_db_info",172,"len")=4
+ Set gtmtypes("unix_db_info",172,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","db_fs_block_size")=172
;
Set gtmtypes("unix_file_id")="struct"
Set gtmtypes("unix_file_id",0)=3
@@ -43303,6 +43434,7 @@ Init
Set gtmstructs("gd_binding_struct")="gd_binding"
Set gtmstructs("gd_gblname_struct")="gd_gblname"
Set gtmstructs("gd_id_struct")="unix_file_id"
+ Set gtmstructs("gd_inst_info_struct")="gd_inst_info"
Set gtmstructs("gd_region_struct")="gd_region"
Set gtmstructs("gd_segment_struct")="gd_segment"
Set gtmstructs("gdr_name_struct")="gdr_name"
@@ -43354,6 +43486,7 @@ Init
Set gtmstructs("jnl_private_control_struct")="jnl_private_control"
Set gtmstructs("jnl_process_vector_struct")="jnl_process_vector"
Set gtmstructs("jnlext_multi_struct")="jnlext_multi_t"
+ Set gtmstructs("jnlpool_addrs_struct")="jnlpool_addrs"
Set gtmstructs("job_parm_struct")="job_parm"
Set gtmstructs("joberr_msg_struct")="joberr_msg"
Set gtmstructs("key_value_struct")="key_cum_value"
diff --git a/sr_i386/GTMDefinedTypesInitRelease.m b/sr_i386/GTMDefinedTypesInitRelease.m
index ad23b1e..d48b4bf 100644
--- a/sr_i386/GTMDefinedTypesInitRelease.m
+++ b/sr_i386/GTMDefinedTypesInitRelease.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2010-2017 Fidelity National Information ;
+; Copyright (c) 2010-2018 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -11,14 +11,14 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
-; Generated by scantypedefs.m at 16:01:52 on 2017-08-16
-; Build done with GT.M version: GT.M V6.3-001A Linux x86
+; Generated by scantypedefs.m at 10:24:28 on 2018-01-13
+; Build done with GT.M version: GT.M V6.3-002 Linux x86
;
; Environment variables during run:
-; $gtm_dist: /usr/library/V63001A/pro
-; $gtm_exe: /usr/library/V63002/pro
-; $gtm_src: /usr/library/V63002/src
-; $gtm_inc: /usr/library/V63002/inc
+; $gtm_dist: /usr/library/V63002/pro
+; $gtm_exe: /usr/library/V63003A/pro
+; $gtm_src: /usr/library/V63003A/src
+; $gtm_inc: /usr/library/V63003A/inc
;
; Note this file should not be manually invoked
;
@@ -1008,7 +1008,7 @@ Init
Set gtmtypes("cache_que_heads",39,"name")="cache_que_heads.cache_array[0].stopped"
Set gtmtypes("cache_que_heads",39,"off")=104
Set gtmtypes("cache_que_heads",39,"len")=4
- Set gtmtypes("cache_que_heads",39,"type")="unsigned-int"
+ Set gtmtypes("cache_que_heads",39,"type")="boolean_t"
Set gtmtypfldindx("cache_que_heads","cache_array[0].stopped")=39
Set gtmtypes("cache_que_heads",40,"name")="cache_que_heads.cache_array[0].rip_latch"
Set gtmtypes("cache_que_heads",40,"off")=108
@@ -1177,7 +1177,7 @@ Init
Set gtmtypes("cache_rec",20,"name")="cache_rec.stopped"
Set gtmtypes("cache_rec",20,"off")=72
Set gtmtypes("cache_rec",20,"len")=4
- Set gtmtypes("cache_rec",20,"type")="unsigned-int"
+ Set gtmtypes("cache_rec",20,"type")="boolean_t"
Set gtmtypfldindx("cache_rec","stopped")=20
Set gtmtypes("cache_rec",21,"name")="cache_rec.rip_latch"
Set gtmtypes("cache_rec",21,"off")=76
@@ -2742,8 +2742,8 @@ Init
Set gtmtypfldindx("d_mt_struct","stream")=32
;
Set gtmtypes("d_rm_struct")="struct"
- Set gtmtypes("d_rm_struct",0)=90
- Set gtmtypes("d_rm_struct","len")=356
+ Set gtmtypes("d_rm_struct",0)=91
+ Set gtmtypes("d_rm_struct","len")=360
Set gtmtypes("d_rm_struct",1,"name")="d_rm_struct.fixed"
Set gtmtypes("d_rm_struct",1,"off")=0
Set gtmtypes("d_rm_struct",1,"len")=4
@@ -3195,6 +3195,11 @@ Init
Set gtmtypes("d_rm_struct",90,"len")=4
Set gtmtypes("d_rm_struct",90,"type")="addr"
Set gtmtypfldindx("d_rm_struct","fsblock_buffer")=90
+ Set gtmtypes("d_rm_struct",91,"name")="d_rm_struct.crlastbuff"
+ Set gtmtypes("d_rm_struct",91,"off")=356
+ Set gtmtypes("d_rm_struct",91,"len")=4
+ Set gtmtypes("d_rm_struct",91,"type")="boolean_t"
+ Set gtmtypfldindx("d_rm_struct","crlastbuff")=91
;
Set gtmtypes("d_socket_struct")="struct"
Set gtmtypes("d_socket_struct",0)=19
@@ -4762,8 +4767,8 @@ Init
Set gtmtypes("gcall_args",6,"dim")=32
;
Set gtmtypes("gd_addr")="struct"
- Set gtmtypes("gd_addr",0)=20
- Set gtmtypes("gd_addr","len")=76
+ Set gtmtypes("gd_addr",0)=21
+ Set gtmtypes("gd_addr","len")=80
Set gtmtypes("gd_addr",1,"name")="gd_addr.local_locks"
Set gtmtypes("gd_addr",1,"off")=0
Set gtmtypes("gd_addr",1,"len")=4
@@ -4819,51 +4824,56 @@ Init
Set gtmtypes("gd_addr",11,"len")=4
Set gtmtypes("gd_addr",11,"type")="addr"
Set gtmtypfldindx("gd_addr","gblnames")=11
- Set gtmtypes("gd_addr",12,"name")="gd_addr.link"
+ Set gtmtypes("gd_addr",12,"name")="gd_addr.instinfo"
Set gtmtypes("gd_addr",12,"off")=44
Set gtmtypes("gd_addr",12,"len")=4
Set gtmtypes("gd_addr",12,"type")="addr"
- Set gtmtypfldindx("gd_addr","link")=12
- Set gtmtypes("gd_addr",13,"name")="gd_addr.tab_ptr"
+ Set gtmtypfldindx("gd_addr","instinfo")=12
+ Set gtmtypes("gd_addr",13,"name")="gd_addr.link"
Set gtmtypes("gd_addr",13,"off")=48
Set gtmtypes("gd_addr",13,"len")=4
Set gtmtypes("gd_addr",13,"type")="addr"
- Set gtmtypfldindx("gd_addr","tab_ptr")=13
- Set gtmtypes("gd_addr",14,"name")="gd_addr.id"
+ Set gtmtypfldindx("gd_addr","link")=13
+ Set gtmtypes("gd_addr",14,"name")="gd_addr.tab_ptr"
Set gtmtypes("gd_addr",14,"off")=52
Set gtmtypes("gd_addr",14,"len")=4
Set gtmtypes("gd_addr",14,"type")="addr"
- Set gtmtypfldindx("gd_addr","id")=14
- Set gtmtypes("gd_addr",15,"name")="gd_addr.end"
+ Set gtmtypfldindx("gd_addr","tab_ptr")=14
+ Set gtmtypes("gd_addr",15,"name")="gd_addr.id"
Set gtmtypes("gd_addr",15,"off")=56
Set gtmtypes("gd_addr",15,"len")=4
- Set gtmtypes("gd_addr",15,"type")="uintptr_t"
- Set gtmtypfldindx("gd_addr","end")=15
- Set gtmtypes("gd_addr",16,"name")="gd_addr.has_span_gbls"
+ Set gtmtypes("gd_addr",15,"type")="addr"
+ Set gtmtypfldindx("gd_addr","id")=15
+ Set gtmtypes("gd_addr",16,"name")="gd_addr.end"
Set gtmtypes("gd_addr",16,"off")=60
Set gtmtypes("gd_addr",16,"len")=4
- Set gtmtypes("gd_addr",16,"type")="unsigned-int"
- Set gtmtypfldindx("gd_addr","has_span_gbls")=16
- Set gtmtypes("gd_addr",17,"name")="gd_addr.ygs_map_entry_changed"
+ Set gtmtypes("gd_addr",16,"type")="uintptr_t"
+ Set gtmtypfldindx("gd_addr","end")=16
+ Set gtmtypes("gd_addr",17,"name")="gd_addr.has_span_gbls"
Set gtmtypes("gd_addr",17,"off")=64
- Set gtmtypes("gd_addr",17,"len")=1
- Set gtmtypes("gd_addr",17,"type")="char"
- Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=17
- Set gtmtypes("gd_addr",18,"name")="gd_addr.is_dummy_gbldir"
- Set gtmtypes("gd_addr",18,"off")=65
+ Set gtmtypes("gd_addr",17,"len")=4
+ Set gtmtypes("gd_addr",17,"type")="unsigned-int"
+ Set gtmtypfldindx("gd_addr","has_span_gbls")=17
+ Set gtmtypes("gd_addr",18,"name")="gd_addr.ygs_map_entry_changed"
+ Set gtmtypes("gd_addr",18,"off")=68
Set gtmtypes("gd_addr",18,"len")=1
Set gtmtypes("gd_addr",18,"type")="char"
- Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=18
- Set gtmtypes("gd_addr",19,"name")="gd_addr.filler"
- Set gtmtypes("gd_addr",19,"off")=66
- Set gtmtypes("gd_addr",19,"len")=6
+ Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=18
+ Set gtmtypes("gd_addr",19,"name")="gd_addr.is_dummy_gbldir"
+ Set gtmtypes("gd_addr",19,"off")=69
+ Set gtmtypes("gd_addr",19,"len")=1
Set gtmtypes("gd_addr",19,"type")="char"
- Set gtmtypfldindx("gd_addr","filler")=19
- Set gtmtypes("gd_addr",20,"name")="gd_addr.thread_gdi"
- Set gtmtypes("gd_addr",20,"off")=72
- Set gtmtypes("gd_addr",20,"len")=4
- Set gtmtypes("gd_addr",20,"type")="addr"
- Set gtmtypfldindx("gd_addr","thread_gdi")=20
+ Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=19
+ Set gtmtypes("gd_addr",20,"name")="gd_addr.filler"
+ Set gtmtypes("gd_addr",20,"off")=70
+ Set gtmtypes("gd_addr",20,"len")=6
+ Set gtmtypes("gd_addr",20,"type")="char"
+ Set gtmtypfldindx("gd_addr","filler")=20
+ Set gtmtypes("gd_addr",21,"name")="gd_addr.thread_gdi"
+ Set gtmtypes("gd_addr",21,"off")=76
+ Set gtmtypes("gd_addr",21,"len")=4
+ Set gtmtypes("gd_addr",21,"type")="addr"
+ Set gtmtypfldindx("gd_addr","thread_gdi")=21
;
Set gtmtypes("gd_binding")="struct"
Set gtmtypes("gd_binding",0)=8
@@ -4928,6 +4938,15 @@ Init
Set gtmtypes("gd_gblname",3,"type")="unsigned-int"
Set gtmtypfldindx("gd_gblname","ver")=3
;
+ Set gtmtypes("gd_inst_info")="struct"
+ Set gtmtypes("gd_inst_info",0)=1
+ Set gtmtypes("gd_inst_info","len")=256
+ Set gtmtypes("gd_inst_info",1,"name")="gd_inst_info.instfilename"
+ Set gtmtypes("gd_inst_info",1,"off")=0
+ Set gtmtypes("gd_inst_info",1,"len")=256
+ Set gtmtypes("gd_inst_info",1,"type")="char"
+ Set gtmtypfldindx("gd_inst_info","instfilename")=1
+ ;
Set gtmtypes("gd_region")="struct"
Set gtmtypes("gd_region",0)=44
Set gtmtypes("gd_region","len")=412
@@ -5167,7 +5186,7 @@ Init
Set gtmtypfldindx("gd_seg_addr","addr")=2
;
Set gtmtypes("gd_segment")="struct"
- Set gtmtypes("gd_segment",0)=24
+ Set gtmtypes("gd_segment",0)=25
Set gtmtypes("gd_segment","len")=368
Set gtmtypes("gd_segment",1,"name")="gd_segment.sname_len"
Set gtmtypes("gd_segment",1,"off")=0
@@ -5284,11 +5303,16 @@ Init
Set gtmtypes("gd_segment",23,"len")=4
Set gtmtypes("gd_segment",23,"type")="boolean_t"
Set gtmtypfldindx("gd_segment","asyncio")=23
- Set gtmtypes("gd_segment",24,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",24,"name")="gd_segment.read_only"
Set gtmtypes("gd_segment",24,"off")=352
- Set gtmtypes("gd_segment",24,"len")=16
- Set gtmtypes("gd_segment",24,"type")="char"
- Set gtmtypfldindx("gd_segment","filler")=24
+ Set gtmtypes("gd_segment",24,"len")=4
+ Set gtmtypes("gd_segment",24,"type")="boolean_t"
+ Set gtmtypfldindx("gd_segment","read_only")=24
+ Set gtmtypes("gd_segment",25,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",25,"off")=356
+ Set gtmtypes("gd_segment",25,"len")=12
+ Set gtmtypes("gd_segment",25,"type")="char"
+ Set gtmtypfldindx("gd_segment","filler")=25
;
Set gtmtypes("gdr_name")="struct"
Set gtmtypes("gdr_name",0)=10
@@ -9360,8 +9384,8 @@ Init
Set gtmtypes("integ_error_blk_list",3,"dim")=10
;
Set gtmtypes("io_desc")="struct"
- Set gtmtypes("io_desc",0)=30
- Set gtmtypes("io_desc","len")=264
+ Set gtmtypes("io_desc",0)=32
+ Set gtmtypes("io_desc","len")=272
Set gtmtypes("io_desc",1,"name")="io_desc.pair"
Set gtmtypes("io_desc",1,"off")=0
Set gtmtypes("io_desc",1,"len")=8
@@ -9439,7 +9463,7 @@ Init
Set gtmtypfldindx("io_desc","state")=15
Set gtmtypes("io_desc",16,"name")="io_desc.dollar"
Set gtmtypes("io_desc",16,"off")=48
- Set gtmtypes("io_desc",16,"len")=188
+ Set gtmtypes("io_desc",16,"len")=196
Set gtmtypes("io_desc",16,"type")="struct"
Set gtmtypfldindx("io_desc","dollar")=16
Set gtmtypes("io_desc",17,"name")="io_desc.dollar.x"
@@ -9477,41 +9501,51 @@ Init
Set gtmtypes("io_desc",23,"len")=80
Set gtmtypes("io_desc",23,"type")="char"
Set gtmtypfldindx("io_desc","dollar.device")=23
- Set gtmtypes("io_desc",24,"name")="io_desc.esc_state"
+ Set gtmtypes("io_desc",24,"name")="io_desc.dollar.devicebuffer"
Set gtmtypes("io_desc",24,"off")=236
- Set gtmtypes("io_desc",24,"len")=1
- Set gtmtypes("io_desc",24,"type")="unsigned-char"
- Set gtmtypfldindx("io_desc","esc_state")=24
- Set gtmtypes("io_desc",25,"name")="io_desc.dev_sp"
+ Set gtmtypes("io_desc",24,"len")=4
+ Set gtmtypes("io_desc",24,"type")="addr"
+ Set gtmtypfldindx("io_desc","dollar.devicebuffer")=24
+ Set gtmtypes("io_desc",25,"name")="io_desc.dollar.devicebufferlen"
Set gtmtypes("io_desc",25,"off")=240
Set gtmtypes("io_desc",25,"len")=4
- Set gtmtypes("io_desc",25,"type")="addr"
- Set gtmtypfldindx("io_desc","dev_sp")=25
- Set gtmtypes("io_desc",26,"name")="io_desc.disp_ptr"
+ Set gtmtypes("io_desc",25,"type")="int"
+ Set gtmtypfldindx("io_desc","dollar.devicebufferlen")=25
+ Set gtmtypes("io_desc",26,"name")="io_desc.esc_state"
Set gtmtypes("io_desc",26,"off")=244
- Set gtmtypes("io_desc",26,"len")=4
- Set gtmtypes("io_desc",26,"type")="addr"
- Set gtmtypfldindx("io_desc","disp_ptr")=26
- Set gtmtypes("io_desc",27,"name")="io_desc.newly_created"
+ Set gtmtypes("io_desc",26,"len")=1
+ Set gtmtypes("io_desc",26,"type")="unsigned-char"
+ Set gtmtypfldindx("io_desc","esc_state")=26
+ Set gtmtypes("io_desc",27,"name")="io_desc.dev_sp"
Set gtmtypes("io_desc",27,"off")=248
Set gtmtypes("io_desc",27,"len")=4
- Set gtmtypes("io_desc",27,"type")="boolean_t"
- Set gtmtypfldindx("io_desc","newly_created")=27
- Set gtmtypes("io_desc",28,"name")="io_desc.ichset"
+ Set gtmtypes("io_desc",27,"type")="addr"
+ Set gtmtypfldindx("io_desc","dev_sp")=27
+ Set gtmtypes("io_desc",28,"name")="io_desc.disp_ptr"
Set gtmtypes("io_desc",28,"off")=252
Set gtmtypes("io_desc",28,"len")=4
- Set gtmtypes("io_desc",28,"type")="int"
- Set gtmtypfldindx("io_desc","ichset")=28
- Set gtmtypes("io_desc",29,"name")="io_desc.ochset"
+ Set gtmtypes("io_desc",28,"type")="addr"
+ Set gtmtypfldindx("io_desc","disp_ptr")=28
+ Set gtmtypes("io_desc",29,"name")="io_desc.newly_created"
Set gtmtypes("io_desc",29,"off")=256
Set gtmtypes("io_desc",29,"len")=4
- Set gtmtypes("io_desc",29,"type")="int"
- Set gtmtypfldindx("io_desc","ochset")=29
- Set gtmtypes("io_desc",30,"name")="io_desc.write_filter"
+ Set gtmtypes("io_desc",29,"type")="boolean_t"
+ Set gtmtypfldindx("io_desc","newly_created")=29
+ Set gtmtypes("io_desc",30,"name")="io_desc.ichset"
Set gtmtypes("io_desc",30,"off")=260
Set gtmtypes("io_desc",30,"len")=4
Set gtmtypes("io_desc",30,"type")="int"
- Set gtmtypfldindx("io_desc","write_filter")=30
+ Set gtmtypfldindx("io_desc","ichset")=30
+ Set gtmtypes("io_desc",31,"name")="io_desc.ochset"
+ Set gtmtypes("io_desc",31,"off")=264
+ Set gtmtypes("io_desc",31,"len")=4
+ Set gtmtypes("io_desc",31,"type")="int"
+ Set gtmtypfldindx("io_desc","ochset")=31
+ Set gtmtypes("io_desc",32,"name")="io_desc.write_filter"
+ Set gtmtypes("io_desc",32,"off")=268
+ Set gtmtypes("io_desc",32,"len")=4
+ Set gtmtypes("io_desc",32,"type")="int"
+ Set gtmtypfldindx("io_desc","write_filter")=32
;
Set gtmtypes("io_log_name")="struct"
Set gtmtypes("io_log_name",0)=4
@@ -11896,8 +11930,8 @@ Init
Set gtmtypfldindx("jnlext_multi_t","size")=7
;
Set gtmtypes("jnlpool_addrs")="struct"
- Set gtmtypes("jnlpool_addrs",0)=16
- Set gtmtypes("jnlpool_addrs","len")=68
+ Set gtmtypes("jnlpool_addrs",0)=22
+ Set gtmtypes("jnlpool_addrs","len")=92
Set gtmtypes("jnlpool_addrs",1,"name")="jnlpool_addrs.jnlpool_ctl"
Set gtmtypes("jnlpool_addrs",1,"off")=0
Set gtmtypes("jnlpool_addrs",1,"len")=4
@@ -11978,6 +12012,36 @@ Init
Set gtmtypes("jnlpool_addrs",16,"len")=4
Set gtmtypes("jnlpool_addrs",16,"type")="char"
Set gtmtypfldindx("jnlpool_addrs","jrs.filler_8byte_align")=16
+ Set gtmtypes("jnlpool_addrs",17,"name")="jnlpool_addrs.pool_init"
+ Set gtmtypes("jnlpool_addrs",17,"off")=68
+ Set gtmtypes("jnlpool_addrs",17,"len")=4
+ Set gtmtypes("jnlpool_addrs",17,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","pool_init")=17
+ Set gtmtypes("jnlpool_addrs",18,"name")="jnlpool_addrs.recv_pool"
+ Set gtmtypes("jnlpool_addrs",18,"off")=72
+ Set gtmtypes("jnlpool_addrs",18,"len")=4
+ Set gtmtypes("jnlpool_addrs",18,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","recv_pool")=18
+ Set gtmtypes("jnlpool_addrs",19,"name")="jnlpool_addrs.relaxed"
+ Set gtmtypes("jnlpool_addrs",19,"off")=76
+ Set gtmtypes("jnlpool_addrs",19,"len")=4
+ Set gtmtypes("jnlpool_addrs",19,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","relaxed")=19
+ Set gtmtypes("jnlpool_addrs",20,"name")="jnlpool_addrs.next"
+ Set gtmtypes("jnlpool_addrs",20,"off")=80
+ Set gtmtypes("jnlpool_addrs",20,"len")=4
+ Set gtmtypes("jnlpool_addrs",20,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","next")=20
+ Set gtmtypes("jnlpool_addrs",21,"name")="jnlpool_addrs.gd_instinfo"
+ Set gtmtypes("jnlpool_addrs",21,"off")=84
+ Set gtmtypes("jnlpool_addrs",21,"len")=4
+ Set gtmtypes("jnlpool_addrs",21,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_instinfo")=21
+ Set gtmtypes("jnlpool_addrs",22,"name")="jnlpool_addrs.gd_ptr"
+ Set gtmtypes("jnlpool_addrs",22,"off")=88
+ Set gtmtypes("jnlpool_addrs",22,"len")=4
+ Set gtmtypes("jnlpool_addrs",22,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_ptr")=22
;
Set gtmtypes("jnlpool_ctl_struct")="struct"
Set gtmtypes("jnlpool_ctl_struct",0)=72
@@ -14285,8 +14349,8 @@ Init
Set gtmtypfldindx("mliteral","v.str")=12
;
Set gtmtypes("mlk_ctldata")="struct"
- Set gtmtypes("mlk_ctldata",0)=12
- Set gtmtypes("mlk_ctldata","len")=300
+ Set gtmtypes("mlk_ctldata",0)=13
+ Set gtmtypes("mlk_ctldata","len")=52
Set gtmtypes("mlk_ctldata",1,"name")="mlk_ctldata.prcfree"
Set gtmtypes("mlk_ctldata",1,"off")=0
Set gtmtypes("mlk_ctldata",1,"len")=4
@@ -14297,57 +14361,61 @@ Init
Set gtmtypes("mlk_ctldata",2,"len")=4
Set gtmtypes("mlk_ctldata",2,"type")="intptr_t"
Set gtmtypfldindx("mlk_ctldata","blkfree")=2
- Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkroot"
+ Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkhash"
Set gtmtypes("mlk_ctldata",3,"off")=8
Set gtmtypes("mlk_ctldata",3,"len")=4
Set gtmtypes("mlk_ctldata",3,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","blkroot")=3
- Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.subbase"
+ Set gtmtypfldindx("mlk_ctldata","blkhash")=3
+ Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.blkroot"
Set gtmtypes("mlk_ctldata",4,"off")=12
Set gtmtypes("mlk_ctldata",4,"len")=4
Set gtmtypes("mlk_ctldata",4,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subbase")=4
- Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subfree"
+ Set gtmtypfldindx("mlk_ctldata","blkroot")=4
+ Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subbase"
Set gtmtypes("mlk_ctldata",5,"off")=16
Set gtmtypes("mlk_ctldata",5,"len")=4
Set gtmtypes("mlk_ctldata",5,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subfree")=5
- Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subtop"
+ Set gtmtypfldindx("mlk_ctldata","subbase")=5
+ Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subfree"
Set gtmtypes("mlk_ctldata",6,"off")=20
Set gtmtypes("mlk_ctldata",6,"len")=4
Set gtmtypes("mlk_ctldata",6,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subtop")=6
- Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.max_prccnt"
+ Set gtmtypfldindx("mlk_ctldata","subfree")=6
+ Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.subtop"
Set gtmtypes("mlk_ctldata",7,"off")=24
Set gtmtypes("mlk_ctldata",7,"len")=4
- Set gtmtypes("mlk_ctldata",7,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_prccnt")=7
- Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_blkcnt"
+ Set gtmtypes("mlk_ctldata",7,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_ctldata","subtop")=7
+ Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_prccnt"
Set gtmtypes("mlk_ctldata",8,"off")=28
Set gtmtypes("mlk_ctldata",8,"len")=4
Set gtmtypes("mlk_ctldata",8,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=8
- Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.prccnt"
+ Set gtmtypfldindx("mlk_ctldata","max_prccnt")=8
+ Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.max_blkcnt"
Set gtmtypes("mlk_ctldata",9,"off")=32
Set gtmtypes("mlk_ctldata",9,"len")=4
- Set gtmtypes("mlk_ctldata",9,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","prccnt")=9
- Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.blkcnt"
+ Set gtmtypes("mlk_ctldata",9,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=9
+ Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.num_blkhash"
Set gtmtypes("mlk_ctldata",10,"off")=36
Set gtmtypes("mlk_ctldata",10,"len")=4
- Set gtmtypes("mlk_ctldata",10,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","blkcnt")=10
- Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.clus_pids"
+ Set gtmtypes("mlk_ctldata",10,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","num_blkhash")=10
+ Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.prccnt"
Set gtmtypes("mlk_ctldata",11,"off")=40
- Set gtmtypes("mlk_ctldata",11,"len")=256
- Set gtmtypes("mlk_ctldata",11,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","clus_pids")=11
- Set gtmtypes("mlk_ctldata",11,"dim")=64
- Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.wakeups"
- Set gtmtypes("mlk_ctldata",12,"off")=296
+ Set gtmtypes("mlk_ctldata",11,"len")=4
+ Set gtmtypes("mlk_ctldata",11,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","prccnt")=11
+ Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.blkcnt"
+ Set gtmtypes("mlk_ctldata",12,"off")=44
Set gtmtypes("mlk_ctldata",12,"len")=4
- Set gtmtypes("mlk_ctldata",12,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","wakeups")=12
+ Set gtmtypes("mlk_ctldata",12,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","blkcnt")=12
+ Set gtmtypes("mlk_ctldata",13,"name")="mlk_ctldata.wakeups"
+ Set gtmtypes("mlk_ctldata",13,"off")=48
+ Set gtmtypes("mlk_ctldata",13,"len")=4
+ Set gtmtypes("mlk_ctldata",13,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","wakeups")=13
;
Set gtmtypes("mlk_prcblk")="struct"
Set gtmtypes("mlk_prcblk",0)=4
@@ -14374,7 +14442,7 @@ Init
Set gtmtypfldindx("mlk_prcblk","filler_4byte")=4
;
Set gtmtypes("mlk_pvtblk")="struct"
- Set gtmtypes("mlk_pvtblk",0)=16
+ Set gtmtypes("mlk_pvtblk",0)=15
Set gtmtypes("mlk_pvtblk","len")=52
Set gtmtypes("mlk_pvtblk",1,"name")="mlk_pvtblk.ctlptr"
Set gtmtypes("mlk_pvtblk",1,"off")=0
@@ -14416,46 +14484,41 @@ Init
Set gtmtypes("mlk_pvtblk",8,"len")=4
Set gtmtypes("mlk_pvtblk",8,"type")="addr"
Set gtmtypfldindx("mlk_pvtblk","tp")=8
- Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.total_length"
+ Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.nref_length"
Set gtmtypes("mlk_pvtblk",9,"off")=32
Set gtmtypes("mlk_pvtblk",9,"len")=4
Set gtmtypes("mlk_pvtblk",9,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_length")=9
- Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.total_len_padded"
+ Set gtmtypfldindx("mlk_pvtblk","nref_length")=9
+ Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.subscript_cnt"
Set gtmtypes("mlk_pvtblk",10,"off")=36
- Set gtmtypes("mlk_pvtblk",10,"len")=4
- Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_len_padded")=10
- Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.subscript_cnt"
+ Set gtmtypes("mlk_pvtblk",10,"len")=2
+ Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-short"
+ Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=10
+ Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.trans"
Set gtmtypes("mlk_pvtblk",11,"off")=40
- Set gtmtypes("mlk_pvtblk",11,"len")=2
- Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-short"
- Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=11
- Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.trans"
- Set gtmtypes("mlk_pvtblk",12,"off")=44
+ Set gtmtypes("mlk_pvtblk",11,"len")=1
+ Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-char"
+ Set gtmtypfldindx("mlk_pvtblk","trans")=11
+ Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.translev"
+ Set gtmtypes("mlk_pvtblk",12,"off")=41
Set gtmtypes("mlk_pvtblk",12,"len")=1
Set gtmtypes("mlk_pvtblk",12,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","trans")=12
- Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.translev"
- Set gtmtypes("mlk_pvtblk",13,"off")=45
+ Set gtmtypfldindx("mlk_pvtblk","translev")=12
+ Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.old"
+ Set gtmtypes("mlk_pvtblk",13,"off")=42
Set gtmtypes("mlk_pvtblk",13,"len")=1
Set gtmtypes("mlk_pvtblk",13,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","translev")=13
- Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.old"
- Set gtmtypes("mlk_pvtblk",14,"off")=46
- Set gtmtypes("mlk_pvtblk",14,"len")=1
+ Set gtmtypfldindx("mlk_pvtblk","old")=13
+ Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.filler"
+ Set gtmtypes("mlk_pvtblk",14,"off")=43
+ Set gtmtypes("mlk_pvtblk",14,"len")=5
Set gtmtypes("mlk_pvtblk",14,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","old")=14
- Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.filler"
- Set gtmtypes("mlk_pvtblk",15,"off")=47
+ Set gtmtypfldindx("mlk_pvtblk","filler")=14
+ Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.value"
+ Set gtmtypes("mlk_pvtblk",15,"off")=48
Set gtmtypes("mlk_pvtblk",15,"len")=1
Set gtmtypes("mlk_pvtblk",15,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","filler")=15
- Set gtmtypes("mlk_pvtblk",16,"name")="mlk_pvtblk.value"
- Set gtmtypes("mlk_pvtblk",16,"off")=48
- Set gtmtypes("mlk_pvtblk",16,"len")=1
- Set gtmtypes("mlk_pvtblk",16,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","value")=16
+ Set gtmtypfldindx("mlk_pvtblk","value")=15
;
Set gtmtypes("mlk_shrblk")="struct"
Set gtmtypes("mlk_shrblk",0)=11
@@ -14516,6 +14579,25 @@ Init
Set gtmtypes("mlk_shrblk",11,"type")="unsigned-char"
Set gtmtypfldindx("mlk_shrblk","auxnode")=11
;
+ Set gtmtypes("mlk_shrhash")="struct"
+ Set gtmtypes("mlk_shrhash",0)=3
+ Set gtmtypes("mlk_shrhash","len")=12
+ Set gtmtypes("mlk_shrhash",1,"name")="mlk_shrhash.shrblk"
+ Set gtmtypes("mlk_shrhash",1,"off")=0
+ Set gtmtypes("mlk_shrhash",1,"len")=4
+ Set gtmtypes("mlk_shrhash",1,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_shrhash","shrblk")=1
+ Set gtmtypes("mlk_shrhash",2,"name")="mlk_shrhash.hash"
+ Set gtmtypes("mlk_shrhash",2,"off")=4
+ Set gtmtypes("mlk_shrhash",2,"len")=4
+ Set gtmtypes("mlk_shrhash",2,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","hash")=2
+ Set gtmtypes("mlk_shrhash",3,"name")="mlk_shrhash.usedmap"
+ Set gtmtypes("mlk_shrhash",3,"off")=8
+ Set gtmtypes("mlk_shrhash",3,"len")=4
+ Set gtmtypes("mlk_shrhash",3,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","usedmap")=3
+ ;
Set gtmtypes("mlk_shrsub")="struct"
Set gtmtypes("mlk_shrsub",0)=3
Set gtmtypes("mlk_shrsub","len")=8
@@ -17788,8 +17870,8 @@ Init
Set gtmtypfldindx("nametabent","name")=2
;
Set gtmtypes("node_local")="struct"
- Set gtmtypes("node_local",0)=250
- Set gtmtypes("node_local","len")=104776
+ Set gtmtypes("node_local",0)=247
+ Set gtmtypes("node_local","len")=96584
Set gtmtypes("node_local",1,"name")="node_local.label"
Set gtmtypes("node_local",1,"off")=0
Set gtmtypes("node_local",1,"len")=12
@@ -18121,936 +18203,920 @@ Init
Set gtmtypes("node_local",66,"len")=4
Set gtmtypes("node_local",66,"type")="int"
Set gtmtypfldindx("node_local","wcs_ops_index")=66
- Set gtmtypes("node_local",67,"name")="node_local.filler_8byte_align2"
+ Set gtmtypes("node_local",67,"name")="node_local.lockhists"
Set gtmtypes("node_local",67,"off")=1032
- Set gtmtypes("node_local",67,"len")=4
- Set gtmtypes("node_local",67,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align2")=67
- Set gtmtypes("node_local",68,"name")="node_local.lockhists"
- Set gtmtypes("node_local",68,"off")=1036
- Set gtmtypes("node_local",68,"len")=10240
- Set gtmtypes("node_local",68,"type")="lockhist"
- Set gtmtypfldindx("node_local","lockhists")=68
- Set gtmtypes("node_local",68,"dim")=512
- Set gtmtypes("node_local",69,"name")="node_local.lockhists[0].lock_addr"
+ Set gtmtypes("node_local",67,"len")=10240
+ Set gtmtypes("node_local",67,"type")="lockhist"
+ Set gtmtypfldindx("node_local","lockhists")=67
+ Set gtmtypes("node_local",67,"dim")=512
+ Set gtmtypes("node_local",68,"name")="node_local.lockhists[0].lock_addr"
+ Set gtmtypes("node_local",68,"off")=1032
+ Set gtmtypes("node_local",68,"len")=4
+ Set gtmtypes("node_local",68,"type")="addr"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_addr")=68
+ Set gtmtypes("node_local",69,"name")="node_local.lockhists[0].lock_callr"
Set gtmtypes("node_local",69,"off")=1036
Set gtmtypes("node_local",69,"len")=4
- Set gtmtypes("node_local",69,"type")="addr"
- Set gtmtypfldindx("node_local","lockhists[0].lock_addr")=69
- Set gtmtypes("node_local",70,"name")="node_local.lockhists[0].lock_callr"
+ Set gtmtypes("node_local",69,"type")="caddr_t"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_callr")=69
+ Set gtmtypes("node_local",70,"name")="node_local.lockhists[0].lock_pid"
Set gtmtypes("node_local",70,"off")=1040
Set gtmtypes("node_local",70,"len")=4
- Set gtmtypes("node_local",70,"type")="caddr_t"
- Set gtmtypfldindx("node_local","lockhists[0].lock_callr")=70
- Set gtmtypes("node_local",71,"name")="node_local.lockhists[0].lock_pid"
+ Set gtmtypes("node_local",70,"type")="int"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_pid")=70
+ Set gtmtypes("node_local",71,"name")="node_local.lockhists[0].loop_cnt"
Set gtmtypes("node_local",71,"off")=1044
Set gtmtypes("node_local",71,"len")=4
Set gtmtypes("node_local",71,"type")="int"
- Set gtmtypfldindx("node_local","lockhists[0].lock_pid")=71
- Set gtmtypes("node_local",72,"name")="node_local.lockhists[0].loop_cnt"
+ Set gtmtypfldindx("node_local","lockhists[0].loop_cnt")=71
+ Set gtmtypes("node_local",72,"name")="node_local.lockhists[0].lock_op"
Set gtmtypes("node_local",72,"off")=1048
Set gtmtypes("node_local",72,"len")=4
- Set gtmtypes("node_local",72,"type")="int"
- Set gtmtypfldindx("node_local","lockhists[0].loop_cnt")=72
- Set gtmtypes("node_local",73,"name")="node_local.lockhists[0].lock_op"
- Set gtmtypes("node_local",73,"off")=1052
- Set gtmtypes("node_local",73,"len")=4
- Set gtmtypes("node_local",73,"type")="char"
- Set gtmtypfldindx("node_local","lockhists[0].lock_op")=73
- Set gtmtypes("node_local",74,"name")="node_local.crit_ops_array"
- Set gtmtypes("node_local",74,"off")=11276
- Set gtmtypes("node_local",74,"len")=10240
- Set gtmtypes("node_local",74,"type")="crit_trace"
- Set gtmtypfldindx("node_local","crit_ops_array")=74
- Set gtmtypes("node_local",74,"dim")=512
- Set gtmtypes("node_local",75,"name")="node_local.crit_ops_array[0].call_from"
+ Set gtmtypes("node_local",72,"type")="char"
+ Set gtmtypfldindx("node_local","lockhists[0].lock_op")=72
+ Set gtmtypes("node_local",73,"name")="node_local.crit_ops_array"
+ Set gtmtypes("node_local",73,"off")=11272
+ Set gtmtypes("node_local",73,"len")=10240
+ Set gtmtypes("node_local",73,"type")="crit_trace"
+ Set gtmtypfldindx("node_local","crit_ops_array")=73
+ Set gtmtypes("node_local",73,"dim")=512
+ Set gtmtypes("node_local",74,"name")="node_local.crit_ops_array[0].call_from"
+ Set gtmtypes("node_local",74,"off")=11272
+ Set gtmtypes("node_local",74,"len")=4
+ Set gtmtypes("node_local",74,"type")="caddr_t"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].call_from")=74
+ Set gtmtypes("node_local",75,"name")="node_local.crit_ops_array[0].crit_act"
Set gtmtypes("node_local",75,"off")=11276
Set gtmtypes("node_local",75,"len")=4
- Set gtmtypes("node_local",75,"type")="caddr_t"
- Set gtmtypfldindx("node_local","crit_ops_array[0].call_from")=75
- Set gtmtypes("node_local",76,"name")="node_local.crit_ops_array[0].crit_act"
+ Set gtmtypes("node_local",75,"type")="int"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].crit_act")=75
+ Set gtmtypes("node_local",76,"name")="node_local.crit_ops_array[0].epid"
Set gtmtypes("node_local",76,"off")=11280
Set gtmtypes("node_local",76,"len")=4
Set gtmtypes("node_local",76,"type")="int"
- Set gtmtypfldindx("node_local","crit_ops_array[0].crit_act")=76
- Set gtmtypes("node_local",77,"name")="node_local.crit_ops_array[0].epid"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].epid")=76
+ Set gtmtypes("node_local",77,"name")="node_local.crit_ops_array[0].curr_tn"
Set gtmtypes("node_local",77,"off")=11284
- Set gtmtypes("node_local",77,"len")=4
- Set gtmtypes("node_local",77,"type")="int"
- Set gtmtypfldindx("node_local","crit_ops_array[0].epid")=77
- Set gtmtypes("node_local",78,"name")="node_local.crit_ops_array[0].curr_tn"
- Set gtmtypes("node_local",78,"off")=11288
- Set gtmtypes("node_local",78,"len")=8
- Set gtmtypes("node_local",78,"type")="uint64_t"
- Set gtmtypfldindx("node_local","crit_ops_array[0].curr_tn")=78
- Set gtmtypes("node_local",79,"name")="node_local.dskread_ops_array"
- Set gtmtypes("node_local",79,"off")=21516
- Set gtmtypes("node_local",79,"len")=12288
- Set gtmtypes("node_local",79,"type")="dskread_trace"
- Set gtmtypfldindx("node_local","dskread_ops_array")=79
- Set gtmtypes("node_local",79,"dim")=512
- Set gtmtypes("node_local",80,"name")="node_local.dskread_ops_array[0].cr_off"
+ Set gtmtypes("node_local",77,"len")=8
+ Set gtmtypes("node_local",77,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","crit_ops_array[0].curr_tn")=77
+ Set gtmtypes("node_local",78,"name")="node_local.dskread_ops_array"
+ Set gtmtypes("node_local",78,"off")=21512
+ Set gtmtypes("node_local",78,"len")=12288
+ Set gtmtypes("node_local",78,"type")="dskread_trace"
+ Set gtmtypfldindx("node_local","dskread_ops_array")=78
+ Set gtmtypes("node_local",78,"dim")=512
+ Set gtmtypes("node_local",79,"name")="node_local.dskread_ops_array[0].cr_off"
+ Set gtmtypes("node_local",79,"off")=21512
+ Set gtmtypes("node_local",79,"len")=4
+ Set gtmtypes("node_local",79,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_off")=79
+ Set gtmtypes("node_local",80,"name")="node_local.dskread_ops_array[0].cr_tn"
Set gtmtypes("node_local",80,"off")=21516
- Set gtmtypes("node_local",80,"len")=4
- Set gtmtypes("node_local",80,"type")="intptr_t"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_off")=80
- Set gtmtypes("node_local",81,"name")="node_local.dskread_ops_array[0].cr_tn"
- Set gtmtypes("node_local",81,"off")=21520
- Set gtmtypes("node_local",81,"len")=8
- Set gtmtypes("node_local",81,"type")="uint64_t"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_tn")=81
- Set gtmtypes("node_local",82,"name")="node_local.dskread_ops_array[0].process_id"
+ Set gtmtypes("node_local",80,"len")=8
+ Set gtmtypes("node_local",80,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].cr_tn")=80
+ Set gtmtypes("node_local",81,"name")="node_local.dskread_ops_array[0].process_id"
+ Set gtmtypes("node_local",81,"off")=21524
+ Set gtmtypes("node_local",81,"len")=4
+ Set gtmtypes("node_local",81,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].process_id")=81
+ Set gtmtypes("node_local",82,"name")="node_local.dskread_ops_array[0].blk"
Set gtmtypes("node_local",82,"off")=21528
Set gtmtypes("node_local",82,"len")=4
- Set gtmtypes("node_local",82,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].process_id")=82
- Set gtmtypes("node_local",83,"name")="node_local.dskread_ops_array[0].blk"
+ Set gtmtypes("node_local",82,"type")="int"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].blk")=82
+ Set gtmtypes("node_local",83,"name")="node_local.dskread_ops_array[0].cycle"
Set gtmtypes("node_local",83,"off")=21532
Set gtmtypes("node_local",83,"len")=4
- Set gtmtypes("node_local",83,"type")="int"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].blk")=83
- Set gtmtypes("node_local",84,"name")="node_local.dskread_ops_array[0].cycle"
- Set gtmtypes("node_local",84,"off")=21536
- Set gtmtypes("node_local",84,"len")=4
- Set gtmtypes("node_local",84,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dskread_ops_array[0].cycle")=84
- Set gtmtypes("node_local",85,"name")="node_local.wcs_ops_array"
- Set gtmtypes("node_local",85,"off")=33804
- Set gtmtypes("node_local",85,"len")=53248
- Set gtmtypes("node_local",85,"type")="wcs_ops_trace_t"
- Set gtmtypfldindx("node_local","wcs_ops_array")=85
- Set gtmtypes("node_local",85,"dim")=1024
- Set gtmtypes("node_local",86,"name")="node_local.wcs_ops_array[0].db_tn"
- Set gtmtypes("node_local",86,"off")=33804
- Set gtmtypes("node_local",86,"len")=8
- Set gtmtypes("node_local",86,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].db_tn")=86
- Set gtmtypes("node_local",87,"name")="node_local.wcs_ops_array[0].process_id"
+ Set gtmtypes("node_local",83,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","dskread_ops_array[0].cycle")=83
+ Set gtmtypes("node_local",84,"name")="node_local.wcs_ops_array"
+ Set gtmtypes("node_local",84,"off")=33800
+ Set gtmtypes("node_local",84,"len")=53248
+ Set gtmtypes("node_local",84,"type")="wcs_ops_trace_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array")=84
+ Set gtmtypes("node_local",84,"dim")=1024
+ Set gtmtypes("node_local",85,"name")="node_local.wcs_ops_array[0].db_tn"
+ Set gtmtypes("node_local",85,"off")=33800
+ Set gtmtypes("node_local",85,"len")=8
+ Set gtmtypes("node_local",85,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].db_tn")=85
+ Set gtmtypes("node_local",86,"name")="node_local.wcs_ops_array[0].process_id"
+ Set gtmtypes("node_local",86,"off")=33808
+ Set gtmtypes("node_local",86,"len")=4
+ Set gtmtypes("node_local",86,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].process_id")=86
+ Set gtmtypes("node_local",87,"name")="node_local.wcs_ops_array[0].wc_in_free"
Set gtmtypes("node_local",87,"off")=33812
Set gtmtypes("node_local",87,"len")=4
Set gtmtypes("node_local",87,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].process_id")=87
- Set gtmtypes("node_local",88,"name")="node_local.wcs_ops_array[0].wc_in_free"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].wc_in_free")=87
+ Set gtmtypes("node_local",88,"name")="node_local.wcs_ops_array[0].wcs_active_lvl"
Set gtmtypes("node_local",88,"off")=33816
Set gtmtypes("node_local",88,"len")=4
Set gtmtypes("node_local",88,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].wc_in_free")=88
- Set gtmtypes("node_local",89,"name")="node_local.wcs_ops_array[0].wcs_active_lvl"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_active_lvl")=88
+ Set gtmtypes("node_local",89,"name")="node_local.wcs_ops_array[0].wcs_wip_lvl"
Set gtmtypes("node_local",89,"off")=33820
Set gtmtypes("node_local",89,"len")=4
Set gtmtypes("node_local",89,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_active_lvl")=89
- Set gtmtypes("node_local",90,"name")="node_local.wcs_ops_array[0].wcs_wip_lvl"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_wip_lvl")=89
+ Set gtmtypes("node_local",90,"name")="node_local.wcs_ops_array[0].type"
Set gtmtypes("node_local",90,"off")=33824
Set gtmtypes("node_local",90,"len")=4
- Set gtmtypes("node_local",90,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].wcs_wip_lvl")=90
- Set gtmtypes("node_local",91,"name")="node_local.wcs_ops_array[0].type"
+ Set gtmtypes("node_local",90,"type")="int"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].type")=90
+ Set gtmtypes("node_local",91,"name")="node_local.wcs_ops_array[0].blk"
Set gtmtypes("node_local",91,"off")=33828
Set gtmtypes("node_local",91,"len")=4
Set gtmtypes("node_local",91,"type")="int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].type")=91
- Set gtmtypes("node_local",92,"name")="node_local.wcs_ops_array[0].blk"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].blk")=91
+ Set gtmtypes("node_local",92,"name")="node_local.wcs_ops_array[0].cr_off"
Set gtmtypes("node_local",92,"off")=33832
Set gtmtypes("node_local",92,"len")=4
- Set gtmtypes("node_local",92,"type")="int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].blk")=92
- Set gtmtypes("node_local",93,"name")="node_local.wcs_ops_array[0].cr_off"
+ Set gtmtypes("node_local",92,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_off")=92
+ Set gtmtypes("node_local",93,"name")="node_local.wcs_ops_array[0].cr_dirty"
Set gtmtypes("node_local",93,"off")=33836
- Set gtmtypes("node_local",93,"len")=4
- Set gtmtypes("node_local",93,"type")="intptr_t"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_off")=93
- Set gtmtypes("node_local",94,"name")="node_local.wcs_ops_array[0].cr_dirty"
- Set gtmtypes("node_local",94,"off")=33840
- Set gtmtypes("node_local",94,"len")=8
- Set gtmtypes("node_local",94,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_dirty")=94
- Set gtmtypes("node_local",95,"name")="node_local.wcs_ops_array[0].detail1"
+ Set gtmtypes("node_local",93,"len")=8
+ Set gtmtypes("node_local",93,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].cr_dirty")=93
+ Set gtmtypes("node_local",94,"name")="node_local.wcs_ops_array[0].detail1"
+ Set gtmtypes("node_local",94,"off")=33844
+ Set gtmtypes("node_local",94,"len")=4
+ Set gtmtypes("node_local",94,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].detail1")=94
+ Set gtmtypes("node_local",95,"name")="node_local.wcs_ops_array[0].detail2"
Set gtmtypes("node_local",95,"off")=33848
Set gtmtypes("node_local",95,"len")=4
Set gtmtypes("node_local",95,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].detail1")=95
- Set gtmtypes("node_local",96,"name")="node_local.wcs_ops_array[0].detail2"
- Set gtmtypes("node_local",96,"off")=33852
- Set gtmtypes("node_local",96,"len")=4
- Set gtmtypes("node_local",96,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wcs_ops_array[0].detail2")=96
- Set gtmtypes("node_local",97,"name")="node_local.unique_id"
- Set gtmtypes("node_local",97,"off")=87052
+ Set gtmtypfldindx("node_local","wcs_ops_array[0].detail2")=95
+ Set gtmtypes("node_local",96,"name")="node_local.unique_id"
+ Set gtmtypes("node_local",96,"off")=87048
+ Set gtmtypes("node_local",96,"len")=20
+ Set gtmtypes("node_local",96,"type")="unique_file_id"
+ Set gtmtypfldindx("node_local","unique_id")=96
+ Set gtmtypes("node_local",97,"name")="node_local.unique_id.uid"
+ Set gtmtypes("node_local",97,"off")=87048
Set gtmtypes("node_local",97,"len")=20
- Set gtmtypes("node_local",97,"type")="unique_file_id"
- Set gtmtypfldindx("node_local","unique_id")=97
- Set gtmtypes("node_local",98,"name")="node_local.unique_id.uid"
- Set gtmtypes("node_local",98,"off")=87052
+ Set gtmtypes("node_local",97,"type")="unix_file_id"
+ Set gtmtypfldindx("node_local","unique_id.uid")=97
+ Set gtmtypes("node_local",98,"name")="node_local.unique_id.file_id"
+ Set gtmtypes("node_local",98,"off")=87048
Set gtmtypes("node_local",98,"len")=20
- Set gtmtypes("node_local",98,"type")="unix_file_id"
- Set gtmtypfldindx("node_local","unique_id.uid")=98
- Set gtmtypes("node_local",99,"name")="node_local.unique_id.file_id"
- Set gtmtypes("node_local",99,"off")=87052
- Set gtmtypes("node_local",99,"len")=20
- Set gtmtypes("node_local",99,"type")="char"
- Set gtmtypfldindx("node_local","unique_id.file_id")=99
- Set gtmtypes("node_local",100,"name")="node_local.owner_node"
+ Set gtmtypes("node_local",98,"type")="char"
+ Set gtmtypfldindx("node_local","unique_id.file_id")=98
+ Set gtmtypes("node_local",99,"name")="node_local.owner_node"
+ Set gtmtypes("node_local",99,"off")=87068
+ Set gtmtypes("node_local",99,"len")=4
+ Set gtmtypes("node_local",99,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","owner_node")=99
+ Set gtmtypes("node_local",100,"name")="node_local.wcsflu_pid"
Set gtmtypes("node_local",100,"off")=87072
Set gtmtypes("node_local",100,"len")=4
- Set gtmtypes("node_local",100,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","owner_node")=100
- Set gtmtypes("node_local",101,"name")="node_local.wcsflu_pid"
+ Set gtmtypes("node_local",100,"type")="int"
+ Set gtmtypfldindx("node_local","wcsflu_pid")=100
+ Set gtmtypes("node_local",101,"name")="node_local.creation_date_time4"
Set gtmtypes("node_local",101,"off")=87076
Set gtmtypes("node_local",101,"len")=4
Set gtmtypes("node_local",101,"type")="int"
- Set gtmtypfldindx("node_local","wcsflu_pid")=101
- Set gtmtypes("node_local",102,"name")="node_local.creation_date_time4"
+ Set gtmtypfldindx("node_local","creation_date_time4")=101
+ Set gtmtypes("node_local",102,"name")="node_local.inhibit_kills"
Set gtmtypes("node_local",102,"off")=87080
Set gtmtypes("node_local",102,"len")=4
Set gtmtypes("node_local",102,"type")="int"
- Set gtmtypfldindx("node_local","creation_date_time4")=102
- Set gtmtypes("node_local",103,"name")="node_local.inhibit_kills"
+ Set gtmtypfldindx("node_local","inhibit_kills")=102
+ Set gtmtypes("node_local",103,"name")="node_local.remove_shm"
Set gtmtypes("node_local",103,"off")=87084
Set gtmtypes("node_local",103,"len")=4
- Set gtmtypes("node_local",103,"type")="int"
- Set gtmtypfldindx("node_local","inhibit_kills")=103
- Set gtmtypes("node_local",104,"name")="node_local.remove_shm"
+ Set gtmtypes("node_local",103,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","remove_shm")=103
+ Set gtmtypes("node_local",104,"name")="node_local.jnl_file"
Set gtmtypes("node_local",104,"off")=87088
- Set gtmtypes("node_local",104,"len")=4
- Set gtmtypes("node_local",104,"type")="boolean_t"
- Set gtmtypfldindx("node_local","remove_shm")=104
- Set gtmtypes("node_local",105,"name")="node_local.jnl_file"
- Set gtmtypes("node_local",105,"off")=87092
+ Set gtmtypes("node_local",104,"len")=28
+ Set gtmtypes("node_local",104,"type")="union"
+ Set gtmtypfldindx("node_local","jnl_file")=104
+ Set gtmtypes("node_local",105,"name")="node_local.jnl_file.jnl_file_id"
+ Set gtmtypes("node_local",105,"off")=87088
Set gtmtypes("node_local",105,"len")=28
- Set gtmtypes("node_local",105,"type")="union"
- Set gtmtypfldindx("node_local","jnl_file")=105
- Set gtmtypes("node_local",106,"name")="node_local.jnl_file.jnl_file_id"
- Set gtmtypes("node_local",106,"off")=87092
- Set gtmtypes("node_local",106,"len")=28
- Set gtmtypes("node_local",106,"type")="gds_file_id"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id")=106
- Set gtmtypes("node_local",107,"name")="node_local.jnl_file.jnl_file_id.dvi"
- Set gtmtypes("node_local",107,"off")=87092
- Set gtmtypes("node_local",107,"len")=16
- Set gtmtypes("node_local",107,"type")="char"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.dvi")=107
- Set gtmtypes("node_local",108,"name")="node_local.jnl_file.jnl_file_id.did"
- Set gtmtypes("node_local",108,"off")=87108
+ Set gtmtypes("node_local",105,"type")="gds_file_id"
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id")=105
+ Set gtmtypes("node_local",106,"name")="node_local.jnl_file.jnl_file_id.dvi"
+ Set gtmtypes("node_local",106,"off")=87088
+ Set gtmtypes("node_local",106,"len")=16
+ Set gtmtypes("node_local",106,"type")="char"
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.dvi")=106
+ Set gtmtypes("node_local",107,"name")="node_local.jnl_file.jnl_file_id.did"
+ Set gtmtypes("node_local",107,"off")=87104
+ Set gtmtypes("node_local",107,"len")=6
+ Set gtmtypes("node_local",107,"type")="unsigned-short"
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.did")=107
+ Set gtmtypes("node_local",107,"dim")=3
+ Set gtmtypes("node_local",108,"name")="node_local.jnl_file.jnl_file_id.fid"
+ Set gtmtypes("node_local",108,"off")=87110
Set gtmtypes("node_local",108,"len")=6
Set gtmtypes("node_local",108,"type")="unsigned-short"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.did")=108
+ Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.fid")=108
Set gtmtypes("node_local",108,"dim")=3
- Set gtmtypes("node_local",109,"name")="node_local.jnl_file.jnl_file_id.fid"
- Set gtmtypes("node_local",109,"off")=87114
- Set gtmtypes("node_local",109,"len")=6
- Set gtmtypes("node_local",109,"type")="unsigned-short"
- Set gtmtypfldindx("node_local","jnl_file.jnl_file_id.fid")=109
- Set gtmtypes("node_local",109,"dim")=3
- Set gtmtypes("node_local",110,"name")="node_local.jnl_file.u"
- Set gtmtypes("node_local",110,"off")=87092
- Set gtmtypes("node_local",110,"len")=20
- Set gtmtypes("node_local",110,"type")="unix_file_id"
- Set gtmtypfldindx("node_local","jnl_file.u")=110
- Set gtmtypes("node_local",111,"name")="node_local.jnl_file.u.inode"
- Set gtmtypes("node_local",111,"off")=87092
+ Set gtmtypes("node_local",109,"name")="node_local.jnl_file.u"
+ Set gtmtypes("node_local",109,"off")=87088
+ Set gtmtypes("node_local",109,"len")=20
+ Set gtmtypes("node_local",109,"type")="unix_file_id"
+ Set gtmtypfldindx("node_local","jnl_file.u")=109
+ Set gtmtypes("node_local",110,"name")="node_local.jnl_file.u.inode"
+ Set gtmtypes("node_local",110,"off")=87088
+ Set gtmtypes("node_local",110,"len")=8
+ Set gtmtypes("node_local",110,"type")="ino_t"
+ Set gtmtypfldindx("node_local","jnl_file.u.inode")=110
+ Set gtmtypes("node_local",111,"name")="node_local.jnl_file.u.device"
+ Set gtmtypes("node_local",111,"off")=87096
Set gtmtypes("node_local",111,"len")=8
- Set gtmtypes("node_local",111,"type")="ino_t"
- Set gtmtypfldindx("node_local","jnl_file.u.inode")=111
- Set gtmtypes("node_local",112,"name")="node_local.jnl_file.u.device"
- Set gtmtypes("node_local",112,"off")=87100
- Set gtmtypes("node_local",112,"len")=8
- Set gtmtypes("node_local",112,"type")="dev_t"
- Set gtmtypfldindx("node_local","jnl_file.u.device")=112
- Set gtmtypes("node_local",113,"name")="node_local.jnl_file.u.st_gen"
- Set gtmtypes("node_local",113,"off")=87108
+ Set gtmtypes("node_local",111,"type")="dev_t"
+ Set gtmtypfldindx("node_local","jnl_file.u.device")=111
+ Set gtmtypes("node_local",112,"name")="node_local.jnl_file.u.st_gen"
+ Set gtmtypes("node_local",112,"off")=87104
+ Set gtmtypes("node_local",112,"len")=4
+ Set gtmtypes("node_local",112,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","jnl_file.u.st_gen")=112
+ Set gtmtypes("node_local",113,"name")="node_local.donotflush_dbjnl"
+ Set gtmtypes("node_local",113,"off")=87116
Set gtmtypes("node_local",113,"len")=4
- Set gtmtypes("node_local",113,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","jnl_file.u.st_gen")=113
- Set gtmtypes("node_local",114,"name")="node_local.donotflush_dbjnl"
+ Set gtmtypes("node_local",113,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","donotflush_dbjnl")=113
+ Set gtmtypes("node_local",114,"name")="node_local.n_pre_read"
Set gtmtypes("node_local",114,"off")=87120
Set gtmtypes("node_local",114,"len")=4
- Set gtmtypes("node_local",114,"type")="boolean_t"
- Set gtmtypfldindx("node_local","donotflush_dbjnl")=114
- Set gtmtypes("node_local",115,"name")="node_local.n_pre_read"
+ Set gtmtypes("node_local",114,"type")="int"
+ Set gtmtypfldindx("node_local","n_pre_read")=114
+ Set gtmtypes("node_local",115,"name")="node_local.replinstfilename"
Set gtmtypes("node_local",115,"off")=87124
- Set gtmtypes("node_local",115,"len")=4
- Set gtmtypes("node_local",115,"type")="int"
- Set gtmtypfldindx("node_local","n_pre_read")=115
- Set gtmtypes("node_local",116,"name")="node_local.replinstfilename"
- Set gtmtypes("node_local",116,"off")=87128
+ Set gtmtypes("node_local",115,"len")=256
+ Set gtmtypes("node_local",115,"type")="char"
+ Set gtmtypfldindx("node_local","replinstfilename")=115
+ Set gtmtypes("node_local",116,"name")="node_local.statsdb_fname"
+ Set gtmtypes("node_local",116,"off")=87380
Set gtmtypes("node_local",116,"len")=256
Set gtmtypes("node_local",116,"type")="char"
- Set gtmtypfldindx("node_local","replinstfilename")=116
- Set gtmtypes("node_local",117,"name")="node_local.statsdb_fname"
- Set gtmtypes("node_local",117,"off")=87384
- Set gtmtypes("node_local",117,"len")=256
- Set gtmtypes("node_local",117,"type")="char"
- Set gtmtypfldindx("node_local","statsdb_fname")=117
- Set gtmtypes("node_local",118,"name")="node_local.secshr_ops_index"
- Set gtmtypes("node_local",118,"off")=87640
- Set gtmtypes("node_local",118,"len")=4
- Set gtmtypes("node_local",118,"type")="int"
- Set gtmtypfldindx("node_local","secshr_ops_index")=118
- Set gtmtypes("node_local",119,"name")="node_local.secshr_ops_array"
+ Set gtmtypfldindx("node_local","statsdb_fname")=116
+ Set gtmtypes("node_local",117,"name")="node_local.gvstats_rec"
+ Set gtmtypes("node_local",117,"off")=87636
+ Set gtmtypes("node_local",117,"len")=472
+ Set gtmtypes("node_local",117,"type")="gvstats_rec_t"
+ Set gtmtypfldindx("node_local","gvstats_rec")=117
+ Set gtmtypes("node_local",118,"name")="node_local.gvstats_rec.n_set"
+ Set gtmtypes("node_local",118,"off")=87636
+ Set gtmtypes("node_local",118,"len")=8
+ Set gtmtypes("node_local",118,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","gvstats_rec.n_set")=118
+ Set gtmtypes("node_local",119,"name")="node_local.gvstats_rec.n_kill"
Set gtmtypes("node_local",119,"off")=87644
- Set gtmtypes("node_local",119,"len")=8184
+ Set gtmtypes("node_local",119,"len")=8
Set gtmtypes("node_local",119,"type")="uint64_t"
- Set gtmtypfldindx("node_local","secshr_ops_array")=119
- Set gtmtypes("node_local",119,"dim")=1023
- Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec"
- Set gtmtypes("node_local",120,"off")=95828
- Set gtmtypes("node_local",120,"len")=472
- Set gtmtypes("node_local",120,"type")="gvstats_rec_t"
- Set gtmtypfldindx("node_local","gvstats_rec")=120
- Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_set"
- Set gtmtypes("node_local",121,"off")=95828
+ Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=119
+ Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec.n_get"
+ Set gtmtypes("node_local",120,"off")=87652
+ Set gtmtypes("node_local",120,"len")=8
+ Set gtmtypes("node_local",120,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","gvstats_rec.n_get")=120
+ Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_data"
+ Set gtmtypes("node_local",121,"off")=87660
Set gtmtypes("node_local",121,"len")=8
Set gtmtypes("node_local",121,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_set")=121
- Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_kill"
- Set gtmtypes("node_local",122,"off")=95836
+ Set gtmtypfldindx("node_local","gvstats_rec.n_data")=121
+ Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_order"
+ Set gtmtypes("node_local",122,"off")=87668
Set gtmtypes("node_local",122,"len")=8
Set gtmtypes("node_local",122,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=122
- Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_get"
- Set gtmtypes("node_local",123,"off")=95844
+ Set gtmtypfldindx("node_local","gvstats_rec.n_order")=122
+ Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_zprev"
+ Set gtmtypes("node_local",123,"off")=87676
Set gtmtypes("node_local",123,"len")=8
Set gtmtypes("node_local",123,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_get")=123
- Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_data"
- Set gtmtypes("node_local",124,"off")=95852
+ Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=123
+ Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_query"
+ Set gtmtypes("node_local",124,"off")=87684
Set gtmtypes("node_local",124,"len")=8
Set gtmtypes("node_local",124,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_data")=124
- Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_order"
- Set gtmtypes("node_local",125,"off")=95860
+ Set gtmtypfldindx("node_local","gvstats_rec.n_query")=124
+ Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_lock_success"
+ Set gtmtypes("node_local",125,"off")=87692
Set gtmtypes("node_local",125,"len")=8
Set gtmtypes("node_local",125,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_order")=125
- Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_zprev"
- Set gtmtypes("node_local",126,"off")=95868
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=125
+ Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_lock_fail"
+ Set gtmtypes("node_local",126,"off")=87700
Set gtmtypes("node_local",126,"len")=8
Set gtmtypes("node_local",126,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=126
- Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.n_query"
- Set gtmtypes("node_local",127,"off")=95876
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=126
+ Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.db_curr_tn"
+ Set gtmtypes("node_local",127,"off")=87708
Set gtmtypes("node_local",127,"len")=8
Set gtmtypes("node_local",127,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_query")=127
- Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_lock_success"
- Set gtmtypes("node_local",128,"off")=95884
+ Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=127
+ Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_dsk_read"
+ Set gtmtypes("node_local",128,"off")=87716
Set gtmtypes("node_local",128,"len")=8
Set gtmtypes("node_local",128,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=128
- Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.n_lock_fail"
- Set gtmtypes("node_local",129,"off")=95892
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=128
+ Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.n_dsk_write"
+ Set gtmtypes("node_local",129,"off")=87724
Set gtmtypes("node_local",129,"len")=8
Set gtmtypes("node_local",129,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=129
- Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.db_curr_tn"
- Set gtmtypes("node_local",130,"off")=95900
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=129
+ Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.n_nontp_readwrite"
+ Set gtmtypes("node_local",130,"off")=87732
Set gtmtypes("node_local",130,"len")=8
Set gtmtypes("node_local",130,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=130
- Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_dsk_read"
- Set gtmtypes("node_local",131,"off")=95908
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=130
+ Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_nontp_readonly"
+ Set gtmtypes("node_local",131,"off")=87740
Set gtmtypes("node_local",131,"len")=8
Set gtmtypes("node_local",131,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=131
- Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_dsk_write"
- Set gtmtypes("node_local",132,"off")=95916
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=131
+ Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
+ Set gtmtypes("node_local",132,"off")=87748
Set gtmtypes("node_local",132,"len")=8
Set gtmtypes("node_local",132,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=132
- Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_readwrite"
- Set gtmtypes("node_local",133,"off")=95924
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=132
+ Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_blkread"
+ Set gtmtypes("node_local",133,"off")=87756
Set gtmtypes("node_local",133,"len")=8
Set gtmtypes("node_local",133,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=133
- Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_readonly"
- Set gtmtypes("node_local",134,"off")=95932
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=133
+ Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_retries_0"
+ Set gtmtypes("node_local",134,"off")=87764
Set gtmtypes("node_local",134,"len")=8
Set gtmtypes("node_local",134,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=134
- Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
- Set gtmtypes("node_local",135,"off")=95940
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=134
+ Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_retries_1"
+ Set gtmtypes("node_local",135,"off")=87772
Set gtmtypes("node_local",135,"len")=8
Set gtmtypes("node_local",135,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=135
- Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_blkread"
- Set gtmtypes("node_local",136,"off")=95948
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=135
+ Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_retries_2"
+ Set gtmtypes("node_local",136,"off")=87780
Set gtmtypes("node_local",136,"len")=8
Set gtmtypes("node_local",136,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=136
- Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_0"
- Set gtmtypes("node_local",137,"off")=95956
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=136
+ Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_3"
+ Set gtmtypes("node_local",137,"off")=87788
Set gtmtypes("node_local",137,"len")=8
Set gtmtypes("node_local",137,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=137
- Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_nontp_retries_1"
- Set gtmtypes("node_local",138,"off")=95964
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=137
+ Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_tp_readwrite"
+ Set gtmtypes("node_local",138,"off")=87796
Set gtmtypes("node_local",138,"len")=8
Set gtmtypes("node_local",138,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=138
- Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_nontp_retries_2"
- Set gtmtypes("node_local",139,"off")=95972
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=138
+ Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_tp_readonly"
+ Set gtmtypes("node_local",139,"off")=87804
Set gtmtypes("node_local",139,"len")=8
Set gtmtypes("node_local",139,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=139
- Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_nontp_retries_3"
- Set gtmtypes("node_local",140,"off")=95980
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=139
+ Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_tp_rolledback"
+ Set gtmtypes("node_local",140,"off")=87812
Set gtmtypes("node_local",140,"len")=8
Set gtmtypes("node_local",140,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=140
- Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_readwrite"
- Set gtmtypes("node_local",141,"off")=95988
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=140
+ Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_blkwrite"
+ Set gtmtypes("node_local",141,"off")=87820
Set gtmtypes("node_local",141,"len")=8
Set gtmtypes("node_local",141,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=141
- Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_readonly"
- Set gtmtypes("node_local",142,"off")=95996
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=141
+ Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_blkread"
+ Set gtmtypes("node_local",142,"off")=87828
Set gtmtypes("node_local",142,"len")=8
Set gtmtypes("node_local",142,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=142
- Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_rolledback"
- Set gtmtypes("node_local",143,"off")=96004
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=142
+ Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
+ Set gtmtypes("node_local",143,"off")=87836
Set gtmtypes("node_local",143,"len")=8
Set gtmtypes("node_local",143,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=143
- Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_blkwrite"
- Set gtmtypes("node_local",144,"off")=96012
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=143
+ Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
+ Set gtmtypes("node_local",144,"off")=87844
Set gtmtypes("node_local",144,"len")=8
Set gtmtypes("node_local",144,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=144
- Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_blkread"
- Set gtmtypes("node_local",145,"off")=96020
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=144
+ Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
+ Set gtmtypes("node_local",145,"off")=87852
Set gtmtypes("node_local",145,"len")=8
Set gtmtypes("node_local",145,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=145
- Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
- Set gtmtypes("node_local",146,"off")=96028
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=145
+ Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
+ Set gtmtypes("node_local",146,"off")=87860
Set gtmtypes("node_local",146,"len")=8
Set gtmtypes("node_local",146,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=146
- Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
- Set gtmtypes("node_local",147,"off")=96036
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=146
+ Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
+ Set gtmtypes("node_local",147,"off")=87868
Set gtmtypes("node_local",147,"len")=8
Set gtmtypes("node_local",147,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=147
- Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
- Set gtmtypes("node_local",148,"off")=96044
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=147
+ Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
+ Set gtmtypes("node_local",148,"off")=87876
Set gtmtypes("node_local",148,"len")=8
Set gtmtypes("node_local",148,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=148
- Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
- Set gtmtypes("node_local",149,"off")=96052
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=148
+ Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
+ Set gtmtypes("node_local",149,"off")=87884
Set gtmtypes("node_local",149,"len")=8
Set gtmtypes("node_local",149,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=149
- Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
- Set gtmtypes("node_local",150,"off")=96060
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=149
+ Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
+ Set gtmtypes("node_local",150,"off")=87892
Set gtmtypes("node_local",150,"len")=8
Set gtmtypes("node_local",150,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=150
- Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
- Set gtmtypes("node_local",151,"off")=96068
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=150
+ Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
+ Set gtmtypes("node_local",151,"off")=87900
Set gtmtypes("node_local",151,"len")=8
Set gtmtypes("node_local",151,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=151
- Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
- Set gtmtypes("node_local",152,"off")=96076
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=151
+ Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
+ Set gtmtypes("node_local",152,"off")=87908
Set gtmtypes("node_local",152,"len")=8
Set gtmtypes("node_local",152,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=152
- Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
- Set gtmtypes("node_local",153,"off")=96084
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=152
+ Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_ztrigger"
+ Set gtmtypes("node_local",153,"off")=87916
Set gtmtypes("node_local",153,"len")=8
Set gtmtypes("node_local",153,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=153
- Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
- Set gtmtypes("node_local",154,"off")=96092
+ Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=153
+ Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_db_flush"
+ Set gtmtypes("node_local",154,"off")=87924
Set gtmtypes("node_local",154,"len")=8
Set gtmtypes("node_local",154,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=154
- Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
- Set gtmtypes("node_local",155,"off")=96100
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=154
+ Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_db_fsync"
+ Set gtmtypes("node_local",155,"off")=87932
Set gtmtypes("node_local",155,"len")=8
Set gtmtypes("node_local",155,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=155
- Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_ztrigger"
- Set gtmtypes("node_local",156,"off")=96108
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=155
+ Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_jnl_flush"
+ Set gtmtypes("node_local",156,"off")=87940
Set gtmtypes("node_local",156,"len")=8
Set gtmtypes("node_local",156,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=156
- Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_db_flush"
- Set gtmtypes("node_local",157,"off")=96116
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=156
+ Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_jnl_fsync"
+ Set gtmtypes("node_local",157,"off")=87948
Set gtmtypes("node_local",157,"len")=8
Set gtmtypes("node_local",157,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=157
- Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_db_fsync"
- Set gtmtypes("node_local",158,"off")=96124
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=157
+ Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_jbuff_bytes"
+ Set gtmtypes("node_local",158,"off")=87956
Set gtmtypes("node_local",158,"len")=8
Set gtmtypes("node_local",158,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=158
- Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jnl_flush"
- Set gtmtypes("node_local",159,"off")=96132
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=158
+ Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jfile_bytes"
+ Set gtmtypes("node_local",159,"off")=87964
Set gtmtypes("node_local",159,"len")=8
Set gtmtypes("node_local",159,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=159
- Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jnl_fsync"
- Set gtmtypes("node_local",160,"off")=96140
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=159
+ Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jfile_writes"
+ Set gtmtypes("node_local",160,"off")=87972
Set gtmtypes("node_local",160,"len")=8
Set gtmtypes("node_local",160,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=160
- Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jbuff_bytes"
- Set gtmtypes("node_local",161,"off")=96148
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=160
+ Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jrec_logical"
+ Set gtmtypes("node_local",161,"off")=87980
Set gtmtypes("node_local",161,"len")=8
Set gtmtypes("node_local",161,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=161
- Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jfile_bytes"
- Set gtmtypes("node_local",162,"off")=96156
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=161
+ Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jrec_pblk"
+ Set gtmtypes("node_local",162,"off")=87988
Set gtmtypes("node_local",162,"len")=8
Set gtmtypes("node_local",162,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=162
- Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jfile_writes"
- Set gtmtypes("node_local",163,"off")=96164
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=162
+ Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
+ Set gtmtypes("node_local",163,"off")=87996
Set gtmtypes("node_local",163,"len")=8
Set gtmtypes("node_local",163,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=163
- Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_logical"
- Set gtmtypes("node_local",164,"off")=96172
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=163
+ Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
+ Set gtmtypes("node_local",164,"off")=88004
Set gtmtypes("node_local",164,"len")=8
Set gtmtypes("node_local",164,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=164
- Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_pblk"
- Set gtmtypes("node_local",165,"off")=96180
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=164
+ Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_other"
+ Set gtmtypes("node_local",165,"off")=88012
Set gtmtypes("node_local",165,"len")=8
Set gtmtypes("node_local",165,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=165
- Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
- Set gtmtypes("node_local",166,"off")=96188
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=165
+ Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jnl_extends"
+ Set gtmtypes("node_local",166,"off")=88020
Set gtmtypes("node_local",166,"len")=8
Set gtmtypes("node_local",166,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=166
- Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
- Set gtmtypes("node_local",167,"off")=96196
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=166
+ Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_db_extends"
+ Set gtmtypes("node_local",167,"off")=88028
Set gtmtypes("node_local",167,"len")=8
Set gtmtypes("node_local",167,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=167
- Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_jrec_other"
- Set gtmtypes("node_local",168,"off")=96204
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=167
+ Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_crit_success"
+ Set gtmtypes("node_local",168,"off")=88036
Set gtmtypes("node_local",168,"len")=8
Set gtmtypes("node_local",168,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=168
- Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_jnl_extends"
- Set gtmtypes("node_local",169,"off")=96212
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=168
+ Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_crits_in_epch"
+ Set gtmtypes("node_local",169,"off")=88044
Set gtmtypes("node_local",169,"len")=8
Set gtmtypes("node_local",169,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=169
- Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.n_db_extends"
- Set gtmtypes("node_local",170,"off")=96220
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=169
+ Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.sq_crit_failed"
+ Set gtmtypes("node_local",170,"off")=88052
Set gtmtypes("node_local",170,"len")=8
Set gtmtypes("node_local",170,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=170
- Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crit_success"
- Set gtmtypes("node_local",171,"off")=96228
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=170
+ Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crit_failed"
+ Set gtmtypes("node_local",171,"off")=88060
Set gtmtypes("node_local",171,"len")=8
Set gtmtypes("node_local",171,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=171
- Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.n_crits_in_epch"
- Set gtmtypes("node_local",172,"off")=96236
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=171
+ Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.sq_crit_que_slps"
+ Set gtmtypes("node_local",172,"off")=88068
Set gtmtypes("node_local",172,"len")=8
Set gtmtypes("node_local",172,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=172
- Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.sq_crit_failed"
- Set gtmtypes("node_local",173,"off")=96244
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=172
+ Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.n_crit_que_slps"
+ Set gtmtypes("node_local",173,"off")=88076
Set gtmtypes("node_local",173,"len")=8
Set gtmtypes("node_local",173,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=173
- Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.n_crit_failed"
- Set gtmtypes("node_local",174,"off")=96252
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=173
+ Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.sq_crit_yields"
+ Set gtmtypes("node_local",174,"off")=88084
Set gtmtypes("node_local",174,"len")=8
Set gtmtypes("node_local",174,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=174
- Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.sq_crit_que_slps"
- Set gtmtypes("node_local",175,"off")=96260
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=174
+ Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.n_crit_yields"
+ Set gtmtypes("node_local",175,"off")=88092
Set gtmtypes("node_local",175,"len")=8
Set gtmtypes("node_local",175,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=175
- Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.n_crit_que_slps"
- Set gtmtypes("node_local",176,"off")=96268
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=175
+ Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.n_clean2dirty"
+ Set gtmtypes("node_local",176,"off")=88100
Set gtmtypes("node_local",176,"len")=8
Set gtmtypes("node_local",176,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=176
- Set gtmtypes("node_local",177,"name")="node_local.gvstats_rec.sq_crit_yields"
- Set gtmtypes("node_local",177,"off")=96276
+ Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=176
+ Set gtmtypes("node_local",177,"name")="node_local.last_wcsflu_tn"
+ Set gtmtypes("node_local",177,"off")=88108
Set gtmtypes("node_local",177,"len")=8
Set gtmtypes("node_local",177,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=177
- Set gtmtypes("node_local",178,"name")="node_local.gvstats_rec.n_crit_yields"
- Set gtmtypes("node_local",178,"off")=96284
+ Set gtmtypfldindx("node_local","last_wcsflu_tn")=177
+ Set gtmtypes("node_local",178,"name")="node_local.last_wcs_recover_tn"
+ Set gtmtypes("node_local",178,"off")=88116
Set gtmtypes("node_local",178,"len")=8
Set gtmtypes("node_local",178,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=178
- Set gtmtypes("node_local",179,"name")="node_local.gvstats_rec.n_clean2dirty"
- Set gtmtypes("node_local",179,"off")=96292
- Set gtmtypes("node_local",179,"len")=8
- Set gtmtypes("node_local",179,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=179
- Set gtmtypes("node_local",180,"name")="node_local.last_wcsflu_tn"
- Set gtmtypes("node_local",180,"off")=96300
+ Set gtmtypfldindx("node_local","last_wcs_recover_tn")=178
+ Set gtmtypes("node_local",179,"name")="node_local.encrypt_glo_buff_off"
+ Set gtmtypes("node_local",179,"off")=88124
+ Set gtmtypes("node_local",179,"len")=4
+ Set gtmtypes("node_local",179,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=179
+ Set gtmtypes("node_local",180,"name")="node_local.snapshot_crit_latch"
+ Set gtmtypes("node_local",180,"off")=88128
Set gtmtypes("node_local",180,"len")=8
- Set gtmtypes("node_local",180,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcsflu_tn")=180
- Set gtmtypes("node_local",181,"name")="node_local.last_wcs_recover_tn"
- Set gtmtypes("node_local",181,"off")=96308
+ Set gtmtypes("node_local",180,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch")=180
+ Set gtmtypes("node_local",181,"name")="node_local.snapshot_crit_latch.u"
+ Set gtmtypes("node_local",181,"off")=88128
Set gtmtypes("node_local",181,"len")=8
- Set gtmtypes("node_local",181,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcs_recover_tn")=181
- Set gtmtypes("node_local",182,"name")="node_local.encrypt_glo_buff_off"
- Set gtmtypes("node_local",182,"off")=96316
- Set gtmtypes("node_local",182,"len")=4
- Set gtmtypes("node_local",182,"type")="intptr_t"
- Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=182
- Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch"
- Set gtmtypes("node_local",183,"off")=96320
+ Set gtmtypes("node_local",181,"type")="union"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=181
+ Set gtmtypes("node_local",182,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",182,"off")=88128
+ Set gtmtypes("node_local",182,"len")=8
+ Set gtmtypes("node_local",182,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=182
+ Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch.u.parts"
+ Set gtmtypes("node_local",183,"off")=88128
Set gtmtypes("node_local",183,"len")=8
- Set gtmtypes("node_local",183,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch")=183
- Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u"
- Set gtmtypes("node_local",184,"off")=96320
- Set gtmtypes("node_local",184,"len")=8
- Set gtmtypes("node_local",184,"type")="union"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=184
- Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",185,"off")=96320
- Set gtmtypes("node_local",185,"len")=8
- Set gtmtypes("node_local",185,"type")="uint64_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=185
- Set gtmtypes("node_local",186,"name")="node_local.snapshot_crit_latch.u.parts"
- Set gtmtypes("node_local",186,"off")=96320
- Set gtmtypes("node_local",186,"len")=8
- Set gtmtypes("node_local",186,"type")="struct"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=186
- Set gtmtypes("node_local",187,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",187,"off")=96320
+ Set gtmtypes("node_local",183,"type")="struct"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=183
+ Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",184,"off")=88128
+ Set gtmtypes("node_local",184,"len")=4
+ Set gtmtypes("node_local",184,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=184
+ Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",185,"off")=88132
+ Set gtmtypes("node_local",185,"len")=4
+ Set gtmtypes("node_local",185,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=185
+ Set gtmtypes("node_local",186,"name")="node_local.ss_shmid"
+ Set gtmtypes("node_local",186,"off")=88136
+ Set gtmtypes("node_local",186,"len")=4
+ Set gtmtypes("node_local",186,"type")="long"
+ Set gtmtypfldindx("node_local","ss_shmid")=186
+ Set gtmtypes("node_local",187,"name")="node_local.ss_shmcycle"
+ Set gtmtypes("node_local",187,"off")=88140
Set gtmtypes("node_local",187,"len")=4
- Set gtmtypes("node_local",187,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=187
- Set gtmtypes("node_local",188,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
- Set gtmtypes("node_local",188,"off")=96324
+ Set gtmtypes("node_local",187,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ss_shmcycle")=187
+ Set gtmtypes("node_local",188,"name")="node_local.snapshot_in_prog"
+ Set gtmtypes("node_local",188,"off")=88144
Set gtmtypes("node_local",188,"len")=4
- Set gtmtypes("node_local",188,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=188
- Set gtmtypes("node_local",189,"name")="node_local.ss_shmid"
- Set gtmtypes("node_local",189,"off")=96328
+ Set gtmtypes("node_local",188,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","snapshot_in_prog")=188
+ Set gtmtypes("node_local",189,"name")="node_local.num_snapshots_in_effect"
+ Set gtmtypes("node_local",189,"off")=88148
Set gtmtypes("node_local",189,"len")=4
- Set gtmtypes("node_local",189,"type")="long"
- Set gtmtypfldindx("node_local","ss_shmid")=189
- Set gtmtypes("node_local",190,"name")="node_local.ss_shmcycle"
- Set gtmtypes("node_local",190,"off")=96332
+ Set gtmtypes("node_local",189,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","num_snapshots_in_effect")=189
+ Set gtmtypes("node_local",190,"name")="node_local.wbox_test_seq_num"
+ Set gtmtypes("node_local",190,"off")=88152
Set gtmtypes("node_local",190,"len")=4
Set gtmtypes("node_local",190,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ss_shmcycle")=190
- Set gtmtypes("node_local",191,"name")="node_local.snapshot_in_prog"
- Set gtmtypes("node_local",191,"off")=96336
+ Set gtmtypfldindx("node_local","wbox_test_seq_num")=190
+ Set gtmtypes("node_local",191,"name")="node_local.freeze_online"
+ Set gtmtypes("node_local",191,"off")=88156
Set gtmtypes("node_local",191,"len")=4
- Set gtmtypes("node_local",191,"type")="boolean_t"
- Set gtmtypfldindx("node_local","snapshot_in_prog")=191
- Set gtmtypes("node_local",192,"name")="node_local.num_snapshots_in_effect"
- Set gtmtypes("node_local",192,"off")=96340
- Set gtmtypes("node_local",192,"len")=4
+ Set gtmtypes("node_local",191,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","freeze_online")=191
+ Set gtmtypes("node_local",192,"name")="node_local.kip_pid_array"
+ Set gtmtypes("node_local",192,"off")=88160
+ Set gtmtypes("node_local",192,"len")=32
Set gtmtypes("node_local",192,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","num_snapshots_in_effect")=192
- Set gtmtypes("node_local",193,"name")="node_local.wbox_test_seq_num"
- Set gtmtypes("node_local",193,"off")=96344
- Set gtmtypes("node_local",193,"len")=4
- Set gtmtypes("node_local",193,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wbox_test_seq_num")=193
- Set gtmtypes("node_local",194,"name")="node_local.filler_8byte_align3"
- Set gtmtypes("node_local",194,"off")=96348
+ Set gtmtypfldindx("node_local","kip_pid_array")=192
+ Set gtmtypes("node_local",192,"dim")=8
+ Set gtmtypes("node_local",193,"name")="node_local.sec_size"
+ Set gtmtypes("node_local",193,"off")=88192
+ Set gtmtypes("node_local",193,"len")=8
+ Set gtmtypes("node_local",193,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","sec_size")=193
+ Set gtmtypes("node_local",194,"name")="node_local.jnlpool_shmid"
+ Set gtmtypes("node_local",194,"off")=88200
Set gtmtypes("node_local",194,"len")=4
Set gtmtypes("node_local",194,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align3")=194
- Set gtmtypes("node_local",195,"name")="node_local.kip_pid_array"
- Set gtmtypes("node_local",195,"off")=96352
- Set gtmtypes("node_local",195,"len")=32
- Set gtmtypes("node_local",195,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","kip_pid_array")=195
- Set gtmtypes("node_local",195,"dim")=8
- Set gtmtypes("node_local",196,"name")="node_local.sec_size"
- Set gtmtypes("node_local",196,"off")=96384
- Set gtmtypes("node_local",196,"len")=8
- Set gtmtypes("node_local",196,"type")="uint64_t"
- Set gtmtypfldindx("node_local","sec_size")=196
- Set gtmtypes("node_local",197,"name")="node_local.jnlpool_shmid"
- Set gtmtypes("node_local",197,"off")=96392
+ Set gtmtypfldindx("node_local","jnlpool_shmid")=194
+ Set gtmtypes("node_local",195,"name")="node_local.lockspacefull_logged"
+ Set gtmtypes("node_local",195,"off")=88204
+ Set gtmtypes("node_local",195,"len")=4
+ Set gtmtypes("node_local",195,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lockspacefull_logged")=195
+ Set gtmtypes("node_local",196,"name")="node_local.trunc_pid"
+ Set gtmtypes("node_local",196,"off")=88208
+ Set gtmtypes("node_local",196,"len")=4
+ Set gtmtypes("node_local",196,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","trunc_pid")=196
+ Set gtmtypes("node_local",197,"name")="node_local.highest_lbm_with_busy_blk"
+ Set gtmtypes("node_local",197,"off")=88212
Set gtmtypes("node_local",197,"len")=4
Set gtmtypes("node_local",197,"type")="int"
- Set gtmtypfldindx("node_local","jnlpool_shmid")=197
- Set gtmtypes("node_local",198,"name")="node_local.lockspacefull_logged"
- Set gtmtypes("node_local",198,"off")=96396
- Set gtmtypes("node_local",198,"len")=4
- Set gtmtypes("node_local",198,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lockspacefull_logged")=198
- Set gtmtypes("node_local",199,"name")="node_local.trunc_pid"
- Set gtmtypes("node_local",199,"off")=96400
+ Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=197
+ Set gtmtypes("node_local",198,"name")="node_local.ftok_ops_array"
+ Set gtmtypes("node_local",198,"off")=88216
+ Set gtmtypes("node_local",198,"len")=8192
+ Set gtmtypes("node_local",198,"type")="ftokhist"
+ Set gtmtypfldindx("node_local","ftok_ops_array")=198
+ Set gtmtypes("node_local",198,"dim")=512
+ Set gtmtypes("node_local",199,"name")="node_local.ftok_ops_array[0].ftok_oper"
+ Set gtmtypes("node_local",199,"off")=88216
Set gtmtypes("node_local",199,"len")=4
- Set gtmtypes("node_local",199,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","trunc_pid")=199
- Set gtmtypes("node_local",200,"name")="node_local.highest_lbm_with_busy_blk"
- Set gtmtypes("node_local",200,"off")=96404
+ Set gtmtypes("node_local",199,"type")="int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=199
+ Set gtmtypes("node_local",200,"name")="node_local.ftok_ops_array[0].process_id"
+ Set gtmtypes("node_local",200,"off")=88220
Set gtmtypes("node_local",200,"len")=4
- Set gtmtypes("node_local",200,"type")="int"
- Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=200
- Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array"
- Set gtmtypes("node_local",201,"off")=96408
- Set gtmtypes("node_local",201,"len")=8192
- Set gtmtypes("node_local",201,"type")="ftokhist"
- Set gtmtypfldindx("node_local","ftok_ops_array")=201
- Set gtmtypes("node_local",201,"dim")=512
- Set gtmtypes("node_local",202,"name")="node_local.ftok_ops_array[0].ftok_oper"
+ Set gtmtypes("node_local",200,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=200
+ Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypes("node_local",201,"off")=88224
+ Set gtmtypes("node_local",201,"len")=8
+ Set gtmtypes("node_local",201,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=201
+ Set gtmtypes("node_local",202,"name")="node_local.root_search_cycle"
Set gtmtypes("node_local",202,"off")=96408
Set gtmtypes("node_local",202,"len")=4
- Set gtmtypes("node_local",202,"type")="int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=202
- Set gtmtypes("node_local",203,"name")="node_local.ftok_ops_array[0].process_id"
+ Set gtmtypes("node_local",202,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","root_search_cycle")=202
+ Set gtmtypes("node_local",203,"name")="node_local.onln_rlbk_cycle"
Set gtmtypes("node_local",203,"off")=96412
Set gtmtypes("node_local",203,"len")=4
Set gtmtypes("node_local",203,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=203
- Set gtmtypes("node_local",204,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypfldindx("node_local","onln_rlbk_cycle")=203
+ Set gtmtypes("node_local",204,"name")="node_local.db_onln_rlbkd_cycle"
Set gtmtypes("node_local",204,"off")=96416
- Set gtmtypes("node_local",204,"len")=8
- Set gtmtypes("node_local",204,"type")="uint64_t"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=204
- Set gtmtypes("node_local",205,"name")="node_local.root_search_cycle"
- Set gtmtypes("node_local",205,"off")=104600
+ Set gtmtypes("node_local",204,"len")=4
+ Set gtmtypes("node_local",204,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=204
+ Set gtmtypes("node_local",205,"name")="node_local.onln_rlbk_pid"
+ Set gtmtypes("node_local",205,"off")=96420
Set gtmtypes("node_local",205,"len")=4
Set gtmtypes("node_local",205,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","root_search_cycle")=205
- Set gtmtypes("node_local",206,"name")="node_local.onln_rlbk_cycle"
- Set gtmtypes("node_local",206,"off")=104604
+ Set gtmtypfldindx("node_local","onln_rlbk_pid")=205
+ Set gtmtypes("node_local",206,"name")="node_local.dbrndwn_ftok_skip"
+ Set gtmtypes("node_local",206,"off")=96424
Set gtmtypes("node_local",206,"len")=4
Set gtmtypes("node_local",206,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_cycle")=206
- Set gtmtypes("node_local",207,"name")="node_local.db_onln_rlbkd_cycle"
- Set gtmtypes("node_local",207,"off")=104608
+ Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=206
+ Set gtmtypes("node_local",207,"name")="node_local.dbrndwn_access_skip"
+ Set gtmtypes("node_local",207,"off")=96428
Set gtmtypes("node_local",207,"len")=4
Set gtmtypes("node_local",207,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=207
- Set gtmtypes("node_local",208,"name")="node_local.onln_rlbk_pid"
- Set gtmtypes("node_local",208,"off")=104612
+ Set gtmtypfldindx("node_local","dbrndwn_access_skip")=207
+ Set gtmtypes("node_local",208,"name")="node_local.fastinteg_in_prog"
+ Set gtmtypes("node_local",208,"off")=96432
Set gtmtypes("node_local",208,"len")=4
- Set gtmtypes("node_local",208,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_pid")=208
- Set gtmtypes("node_local",209,"name")="node_local.dbrndwn_ftok_skip"
- Set gtmtypes("node_local",209,"off")=104616
+ Set gtmtypes("node_local",208,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fastinteg_in_prog")=208
+ Set gtmtypes("node_local",209,"name")="node_local.wtstart_errcnt"
+ Set gtmtypes("node_local",209,"off")=96436
Set gtmtypes("node_local",209,"len")=4
Set gtmtypes("node_local",209,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=209
- Set gtmtypes("node_local",210,"name")="node_local.dbrndwn_access_skip"
- Set gtmtypes("node_local",210,"off")=104620
+ Set gtmtypfldindx("node_local","wtstart_errcnt")=209
+ Set gtmtypes("node_local",210,"name")="node_local.fake_db_enospc"
+ Set gtmtypes("node_local",210,"off")=96440
Set gtmtypes("node_local",210,"len")=4
- Set gtmtypes("node_local",210,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_access_skip")=210
- Set gtmtypes("node_local",211,"name")="node_local.fastinteg_in_prog"
- Set gtmtypes("node_local",211,"off")=104624
+ Set gtmtypes("node_local",210,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fake_db_enospc")=210
+ Set gtmtypes("node_local",211,"name")="node_local.fake_jnl_enospc"
+ Set gtmtypes("node_local",211,"off")=96444
Set gtmtypes("node_local",211,"len")=4
Set gtmtypes("node_local",211,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fastinteg_in_prog")=211
- Set gtmtypes("node_local",212,"name")="node_local.wtstart_errcnt"
- Set gtmtypes("node_local",212,"off")=104628
+ Set gtmtypfldindx("node_local","fake_jnl_enospc")=211
+ Set gtmtypes("node_local",212,"name")="node_local.doing_epoch"
+ Set gtmtypes("node_local",212,"off")=96448
Set gtmtypes("node_local",212,"len")=4
- Set gtmtypes("node_local",212,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wtstart_errcnt")=212
- Set gtmtypes("node_local",213,"name")="node_local.fake_db_enospc"
- Set gtmtypes("node_local",213,"off")=104632
+ Set gtmtypes("node_local",212,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","doing_epoch")=212
+ Set gtmtypes("node_local",213,"name")="node_local.epoch_taper_start_dbuffs"
+ Set gtmtypes("node_local",213,"off")=96452
Set gtmtypes("node_local",213,"len")=4
- Set gtmtypes("node_local",213,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_db_enospc")=213
- Set gtmtypes("node_local",214,"name")="node_local.fake_jnl_enospc"
- Set gtmtypes("node_local",214,"off")=104636
+ Set gtmtypes("node_local",213,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=213
+ Set gtmtypes("node_local",214,"name")="node_local.epoch_taper_need_fsync"
+ Set gtmtypes("node_local",214,"off")=96456
Set gtmtypes("node_local",214,"len")=4
Set gtmtypes("node_local",214,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_jnl_enospc")=214
- Set gtmtypes("node_local",215,"name")="node_local.doing_epoch"
- Set gtmtypes("node_local",215,"off")=104640
- Set gtmtypes("node_local",215,"len")=4
- Set gtmtypes("node_local",215,"type")="boolean_t"
- Set gtmtypfldindx("node_local","doing_epoch")=215
- Set gtmtypes("node_local",216,"name")="node_local.epoch_taper_start_dbuffs"
- Set gtmtypes("node_local",216,"off")=104644
+ Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=214
+ Set gtmtypes("node_local",215,"name")="node_local.wt_pid_array"
+ Set gtmtypes("node_local",215,"off")=96460
+ Set gtmtypes("node_local",215,"len")=16
+ Set gtmtypes("node_local",215,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wt_pid_array")=215
+ Set gtmtypes("node_local",215,"dim")=4
+ Set gtmtypes("node_local",216,"name")="node_local.reorg_encrypt_pid"
+ Set gtmtypes("node_local",216,"off")=96476
Set gtmtypes("node_local",216,"len")=4
Set gtmtypes("node_local",216,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=216
- Set gtmtypes("node_local",217,"name")="node_local.epoch_taper_need_fsync"
- Set gtmtypes("node_local",217,"off")=104648
+ Set gtmtypfldindx("node_local","reorg_encrypt_pid")=216
+ Set gtmtypes("node_local",217,"name")="node_local.reorg_encrypt_cycle"
+ Set gtmtypes("node_local",217,"off")=96480
Set gtmtypes("node_local",217,"len")=4
- Set gtmtypes("node_local",217,"type")="boolean_t"
- Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=217
- Set gtmtypes("node_local",218,"name")="node_local.wt_pid_array"
- Set gtmtypes("node_local",218,"off")=104652
- Set gtmtypes("node_local",218,"len")=16
+ Set gtmtypes("node_local",217,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=217
+ Set gtmtypes("node_local",218,"name")="node_local.mupip_extract_count"
+ Set gtmtypes("node_local",218,"off")=96484
+ Set gtmtypes("node_local",218,"len")=4
Set gtmtypes("node_local",218,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wt_pid_array")=218
- Set gtmtypes("node_local",218,"dim")=4
- Set gtmtypes("node_local",219,"name")="node_local.reorg_encrypt_pid"
- Set gtmtypes("node_local",219,"off")=104668
+ Set gtmtypfldindx("node_local","mupip_extract_count")=218
+ Set gtmtypes("node_local",219,"name")="node_local.saved_acc_meth"
+ Set gtmtypes("node_local",219,"off")=96488
Set gtmtypes("node_local",219,"len")=4
- Set gtmtypes("node_local",219,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_pid")=219
- Set gtmtypes("node_local",220,"name")="node_local.reorg_encrypt_cycle"
- Set gtmtypes("node_local",220,"off")=104672
+ Set gtmtypes("node_local",219,"type")="int"
+ Set gtmtypfldindx("node_local","saved_acc_meth")=219
+ Set gtmtypes("node_local",220,"name")="node_local.saved_blk_size"
+ Set gtmtypes("node_local",220,"off")=96492
Set gtmtypes("node_local",220,"len")=4
- Set gtmtypes("node_local",220,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=220
- Set gtmtypes("node_local",221,"name")="node_local.mupip_extract_count"
- Set gtmtypes("node_local",221,"off")=104676
+ Set gtmtypes("node_local",220,"type")="int"
+ Set gtmtypfldindx("node_local","saved_blk_size")=220
+ Set gtmtypes("node_local",221,"name")="node_local.saved_lock_space_size"
+ Set gtmtypes("node_local",221,"off")=96496
Set gtmtypes("node_local",221,"len")=4
Set gtmtypes("node_local",221,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","mupip_extract_count")=221
- Set gtmtypes("node_local",222,"name")="node_local.saved_acc_meth"
- Set gtmtypes("node_local",222,"off")=104680
+ Set gtmtypfldindx("node_local","saved_lock_space_size")=221
+ Set gtmtypes("node_local",222,"name")="node_local.saved_jnl_buffer_size"
+ Set gtmtypes("node_local",222,"off")=96500
Set gtmtypes("node_local",222,"len")=4
Set gtmtypes("node_local",222,"type")="int"
- Set gtmtypfldindx("node_local","saved_acc_meth")=222
- Set gtmtypes("node_local",223,"name")="node_local.saved_blk_size"
- Set gtmtypes("node_local",223,"off")=104684
- Set gtmtypes("node_local",223,"len")=4
- Set gtmtypes("node_local",223,"type")="int"
- Set gtmtypfldindx("node_local","saved_blk_size")=223
- Set gtmtypes("node_local",224,"name")="node_local.saved_lock_space_size"
- Set gtmtypes("node_local",224,"off")=104688
+ Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=222
+ Set gtmtypes("node_local",223,"name")="node_local.update_underway_tn"
+ Set gtmtypes("node_local",223,"off")=96504
+ Set gtmtypes("node_local",223,"len")=8
+ Set gtmtypes("node_local",223,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","update_underway_tn")=223
+ Set gtmtypes("node_local",224,"name")="node_local.lastwriterbypas_msg_issued"
+ Set gtmtypes("node_local",224,"off")=96512
Set gtmtypes("node_local",224,"len")=4
- Set gtmtypes("node_local",224,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","saved_lock_space_size")=224
- Set gtmtypes("node_local",225,"name")="node_local.saved_jnl_buffer_size"
- Set gtmtypes("node_local",225,"off")=104692
+ Set gtmtypes("node_local",224,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=224
+ Set gtmtypes("node_local",225,"name")="node_local.first_writer_seen"
+ Set gtmtypes("node_local",225,"off")=96516
Set gtmtypes("node_local",225,"len")=4
- Set gtmtypes("node_local",225,"type")="int"
- Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=225
- Set gtmtypes("node_local",226,"name")="node_local.update_underway_tn"
- Set gtmtypes("node_local",226,"off")=104696
- Set gtmtypes("node_local",226,"len")=8
- Set gtmtypes("node_local",226,"type")="uint64_t"
- Set gtmtypfldindx("node_local","update_underway_tn")=226
- Set gtmtypes("node_local",227,"name")="node_local.lastwriterbypas_msg_issued"
- Set gtmtypes("node_local",227,"off")=104704
+ Set gtmtypes("node_local",225,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","first_writer_seen")=225
+ Set gtmtypes("node_local",226,"name")="node_local.first_nonbypas_writer_seen"
+ Set gtmtypes("node_local",226,"off")=96520
+ Set gtmtypes("node_local",226,"len")=4
+ Set gtmtypes("node_local",226,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=226
+ Set gtmtypes("node_local",227,"name")="node_local.ftok_counter_halted"
+ Set gtmtypes("node_local",227,"off")=96524
Set gtmtypes("node_local",227,"len")=4
Set gtmtypes("node_local",227,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=227
- Set gtmtypes("node_local",228,"name")="node_local.first_writer_seen"
- Set gtmtypes("node_local",228,"off")=104708
+ Set gtmtypfldindx("node_local","ftok_counter_halted")=227
+ Set gtmtypes("node_local",228,"name")="node_local.access_counter_halted"
+ Set gtmtypes("node_local",228,"off")=96528
Set gtmtypes("node_local",228,"len")=4
Set gtmtypes("node_local",228,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_writer_seen")=228
- Set gtmtypes("node_local",229,"name")="node_local.first_nonbypas_writer_seen"
- Set gtmtypes("node_local",229,"off")=104712
+ Set gtmtypfldindx("node_local","access_counter_halted")=228
+ Set gtmtypes("node_local",229,"name")="node_local.statsdb_created"
+ Set gtmtypes("node_local",229,"off")=96532
Set gtmtypes("node_local",229,"len")=4
Set gtmtypes("node_local",229,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=229
- Set gtmtypes("node_local",230,"name")="node_local.ftok_counter_halted"
- Set gtmtypes("node_local",230,"off")=104716
+ Set gtmtypfldindx("node_local","statsdb_created")=229
+ Set gtmtypes("node_local",230,"name")="node_local.statsdb_fname_len"
+ Set gtmtypes("node_local",230,"off")=96536
Set gtmtypes("node_local",230,"len")=4
- Set gtmtypes("node_local",230,"type")="boolean_t"
- Set gtmtypfldindx("node_local","ftok_counter_halted")=230
- Set gtmtypes("node_local",231,"name")="node_local.access_counter_halted"
- Set gtmtypes("node_local",231,"off")=104720
+ Set gtmtypes("node_local",230,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","statsdb_fname_len")=230
+ Set gtmtypes("node_local",231,"name")="node_local.statsdb_rundown_clean"
+ Set gtmtypes("node_local",231,"off")=96540
Set gtmtypes("node_local",231,"len")=4
Set gtmtypes("node_local",231,"type")="boolean_t"
- Set gtmtypfldindx("node_local","access_counter_halted")=231
- Set gtmtypes("node_local",232,"name")="node_local.statsdb_created"
- Set gtmtypes("node_local",232,"off")=104724
- Set gtmtypes("node_local",232,"len")=4
- Set gtmtypes("node_local",232,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_created")=232
- Set gtmtypes("node_local",233,"name")="node_local.statsdb_fname_len"
- Set gtmtypes("node_local",233,"off")=104728
- Set gtmtypes("node_local",233,"len")=4
- Set gtmtypes("node_local",233,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","statsdb_fname_len")=233
- Set gtmtypes("node_local",234,"name")="node_local.statsdb_rundown_clean"
- Set gtmtypes("node_local",234,"off")=104732
- Set gtmtypes("node_local",234,"len")=4
- Set gtmtypes("node_local",234,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_rundown_clean")=234
- Set gtmtypes("node_local",235,"name")="node_local.freeze_latch"
- Set gtmtypes("node_local",235,"off")=104736
+ Set gtmtypfldindx("node_local","statsdb_rundown_clean")=231
+ Set gtmtypes("node_local",232,"name")="node_local.freeze_latch"
+ Set gtmtypes("node_local",232,"off")=96544
+ Set gtmtypes("node_local",232,"len")=8
+ Set gtmtypes("node_local",232,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","freeze_latch")=232
+ Set gtmtypes("node_local",233,"name")="node_local.freeze_latch.u"
+ Set gtmtypes("node_local",233,"off")=96544
+ Set gtmtypes("node_local",233,"len")=8
+ Set gtmtypes("node_local",233,"type")="union"
+ Set gtmtypfldindx("node_local","freeze_latch.u")=233
+ Set gtmtypes("node_local",234,"name")="node_local.freeze_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",234,"off")=96544
+ Set gtmtypes("node_local",234,"len")=8
+ Set gtmtypes("node_local",234,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=234
+ Set gtmtypes("node_local",235,"name")="node_local.freeze_latch.u.parts"
+ Set gtmtypes("node_local",235,"off")=96544
Set gtmtypes("node_local",235,"len")=8
- Set gtmtypes("node_local",235,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","freeze_latch")=235
- Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u"
- Set gtmtypes("node_local",236,"off")=104736
- Set gtmtypes("node_local",236,"len")=8
- Set gtmtypes("node_local",236,"type")="union"
- Set gtmtypfldindx("node_local","freeze_latch.u")=236
- Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",237,"off")=104736
- Set gtmtypes("node_local",237,"len")=8
- Set gtmtypes("node_local",237,"type")="uint64_t"
- Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=237
- Set gtmtypes("node_local",238,"name")="node_local.freeze_latch.u.parts"
- Set gtmtypes("node_local",238,"off")=104736
+ Set gtmtypes("node_local",235,"type")="struct"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts")=235
+ Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",236,"off")=96544
+ Set gtmtypes("node_local",236,"len")=4
+ Set gtmtypes("node_local",236,"type")="int"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=236
+ Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",237,"off")=96548
+ Set gtmtypes("node_local",237,"len")=4
+ Set gtmtypes("node_local",237,"type")="int"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=237
+ Set gtmtypes("node_local",238,"name")="node_local.wcs_buffs_freed"
+ Set gtmtypes("node_local",238,"off")=96552
Set gtmtypes("node_local",238,"len")=8
- Set gtmtypes("node_local",238,"type")="struct"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts")=238
- Set gtmtypes("node_local",239,"name")="node_local.freeze_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",239,"off")=104736
- Set gtmtypes("node_local",239,"len")=4
- Set gtmtypes("node_local",239,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=239
- Set gtmtypes("node_local",240,"name")="node_local.freeze_latch.u.parts.latch_word"
- Set gtmtypes("node_local",240,"off")=104740
- Set gtmtypes("node_local",240,"len")=4
- Set gtmtypes("node_local",240,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=240
- Set gtmtypes("node_local",241,"name")="node_local.wcs_buffs_freed"
- Set gtmtypes("node_local",241,"off")=104744
+ Set gtmtypes("node_local",238,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_buffs_freed")=238
+ Set gtmtypes("node_local",239,"name")="node_local.dskspace_next_fire"
+ Set gtmtypes("node_local",239,"off")=96560
+ Set gtmtypes("node_local",239,"len")=8
+ Set gtmtypes("node_local",239,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","dskspace_next_fire")=239
+ Set gtmtypes("node_local",240,"name")="node_local.lock_crit"
+ Set gtmtypes("node_local",240,"off")=96568
+ Set gtmtypes("node_local",240,"len")=8
+ Set gtmtypes("node_local",240,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","lock_crit")=240
+ Set gtmtypes("node_local",241,"name")="node_local.lock_crit.u"
+ Set gtmtypes("node_local",241,"off")=96568
Set gtmtypes("node_local",241,"len")=8
- Set gtmtypes("node_local",241,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_buffs_freed")=241
- Set gtmtypes("node_local",242,"name")="node_local.dskspace_next_fire"
- Set gtmtypes("node_local",242,"off")=104752
+ Set gtmtypes("node_local",241,"type")="union"
+ Set gtmtypfldindx("node_local","lock_crit.u")=241
+ Set gtmtypes("node_local",242,"name")="node_local.lock_crit.u.pid_imgcnt"
+ Set gtmtypes("node_local",242,"off")=96568
Set gtmtypes("node_local",242,"len")=8
Set gtmtypes("node_local",242,"type")="uint64_t"
- Set gtmtypfldindx("node_local","dskspace_next_fire")=242
- Set gtmtypes("node_local",243,"name")="node_local.lock_crit"
- Set gtmtypes("node_local",243,"off")=104760
+ Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=242
+ Set gtmtypes("node_local",243,"name")="node_local.lock_crit.u.parts"
+ Set gtmtypes("node_local",243,"off")=96568
Set gtmtypes("node_local",243,"len")=8
- Set gtmtypes("node_local",243,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","lock_crit")=243
- Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u"
- Set gtmtypes("node_local",244,"off")=104760
- Set gtmtypes("node_local",244,"len")=8
- Set gtmtypes("node_local",244,"type")="union"
- Set gtmtypfldindx("node_local","lock_crit.u")=244
- Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.pid_imgcnt"
- Set gtmtypes("node_local",245,"off")=104760
- Set gtmtypes("node_local",245,"len")=8
- Set gtmtypes("node_local",245,"type")="uint64_t"
- Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=245
- Set gtmtypes("node_local",246,"name")="node_local.lock_crit.u.parts"
- Set gtmtypes("node_local",246,"off")=104760
- Set gtmtypes("node_local",246,"len")=8
- Set gtmtypes("node_local",246,"type")="struct"
- Set gtmtypfldindx("node_local","lock_crit.u.parts")=246
- Set gtmtypes("node_local",247,"name")="node_local.lock_crit.u.parts.latch_pid"
- Set gtmtypes("node_local",247,"off")=104760
+ Set gtmtypes("node_local",243,"type")="struct"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts")=243
+ Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u.parts.latch_pid"
+ Set gtmtypes("node_local",244,"off")=96568
+ Set gtmtypes("node_local",244,"len")=4
+ Set gtmtypes("node_local",244,"type")="int"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=244
+ Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.parts.latch_word"
+ Set gtmtypes("node_local",245,"off")=96572
+ Set gtmtypes("node_local",245,"len")=4
+ Set gtmtypes("node_local",245,"type")="int"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=245
+ Set gtmtypes("node_local",246,"name")="node_local.tp_hint"
+ Set gtmtypes("node_local",246,"off")=96576
+ Set gtmtypes("node_local",246,"len")=4
+ Set gtmtypes("node_local",246,"type")="int"
+ Set gtmtypfldindx("node_local","tp_hint")=246
+ Set gtmtypes("node_local",247,"name")="node_local.filler_8byte_align3"
+ Set gtmtypes("node_local",247,"off")=96580
Set gtmtypes("node_local",247,"len")=4
Set gtmtypes("node_local",247,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=247
- Set gtmtypes("node_local",248,"name")="node_local.lock_crit.u.parts.latch_word"
- Set gtmtypes("node_local",248,"off")=104764
- Set gtmtypes("node_local",248,"len")=4
- Set gtmtypes("node_local",248,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=248
- Set gtmtypes("node_local",249,"name")="node_local.tp_hint"
- Set gtmtypes("node_local",249,"off")=104768
- Set gtmtypes("node_local",249,"len")=4
- Set gtmtypes("node_local",249,"type")="int"
- Set gtmtypfldindx("node_local","tp_hint")=249
- Set gtmtypes("node_local",250,"name")="node_local.filler_8byte_align6"
- Set gtmtypes("node_local",250,"off")=104772
- Set gtmtypes("node_local",250,"len")=4
- Set gtmtypes("node_local",250,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align6")=250
+ Set gtmtypfldindx("node_local","filler_8byte_align3")=247
;
Set gtmtypes("noisolation_element")="struct"
Set gtmtypes("noisolation_element",0)=2
@@ -27126,8 +27192,8 @@ Init
Set gtmtypfldindx("sgmm_addrs","filler")=1
;
Set gtmtypes("sgmnt_addrs")="struct"
- Set gtmtypes("sgmnt_addrs",0)=153
- Set gtmtypes("sgmnt_addrs","len")=864
+ Set gtmtypes("sgmnt_addrs",0)=156
+ Set gtmtypes("sgmnt_addrs","len")=876
Set gtmtypes("sgmnt_addrs",1,"name")="sgmnt_addrs.hdr"
Set gtmtypes("sgmnt_addrs",1,"off")=0
Set gtmtypes("sgmnt_addrs",1,"len")=4
@@ -27895,9 +27961,24 @@ Init
Set gtmtypes("sgmnt_addrs",153,"len")=4
Set gtmtypes("sgmnt_addrs",153,"type")="boolean_t"
Set gtmtypfldindx("sgmnt_addrs","statsDB_setup_completed")=153
+ Set gtmtypes("sgmnt_addrs",154,"name")="sgmnt_addrs.gd_instinfo"
+ Set gtmtypes("sgmnt_addrs",154,"off")=864
+ Set gtmtypes("sgmnt_addrs",154,"len")=4
+ Set gtmtypes("sgmnt_addrs",154,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_instinfo")=154
+ Set gtmtypes("sgmnt_addrs",155,"name")="sgmnt_addrs.gd_ptr"
+ Set gtmtypes("sgmnt_addrs",155,"off")=868
+ Set gtmtypes("sgmnt_addrs",155,"len")=4
+ Set gtmtypes("sgmnt_addrs",155,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_ptr")=155
+ Set gtmtypes("sgmnt_addrs",156,"name")="sgmnt_addrs.jnlpool"
+ Set gtmtypes("sgmnt_addrs",156,"off")=872
+ Set gtmtypes("sgmnt_addrs",156,"len")=4
+ Set gtmtypes("sgmnt_addrs",156,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","jnlpool")=156
;
Set gtmtypes("sgmnt_data")="struct"
- Set gtmtypes("sgmnt_data",0)=592
+ Set gtmtypes("sgmnt_data",0)=593
Set gtmtypes("sgmnt_data","len")=8192
Set gtmtypes("sgmnt_data",1,"name")="sgmnt_data.label"
Set gtmtypes("sgmnt_data",1,"off")=0
@@ -28154,11 +28235,11 @@ Init
Set gtmtypes("sgmnt_data",51,"len")=4
Set gtmtypes("sgmnt_data",51,"type")="int"
Set gtmtypfldindx("sgmnt_data","abandoned_kills")=51
- Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.freeze_online"
+ Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.unused_freeze_online_filler"
Set gtmtypes("sgmnt_data",52,"off")=312
Set gtmtypes("sgmnt_data",52,"len")=4
Set gtmtypes("sgmnt_data",52,"type")="unsigned-int"
- Set gtmtypfldindx("sgmnt_data","freeze_online")=52
+ Set gtmtypfldindx("sgmnt_data","unused_freeze_online_filler")=52
Set gtmtypes("sgmnt_data",53,"name")="sgmnt_data.filler_320"
Set gtmtypes("sgmnt_data",53,"off")=316
Set gtmtypes("sgmnt_data",53,"len")=4
@@ -30865,16 +30946,21 @@ Init
Set gtmtypes("sgmnt_data",590,"len")=256
Set gtmtypes("sgmnt_data",590,"type")="unsigned-char"
Set gtmtypfldindx("sgmnt_data","basedb_fname")=590
- Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.read_only"
Set gtmtypes("sgmnt_data",591,"off")=6724
- Set gtmtypes("sgmnt_data",591,"len")=444
- Set gtmtypes("sgmnt_data",591,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_7k")=591
- Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_8k"
- Set gtmtypes("sgmnt_data",592,"off")=7168
- Set gtmtypes("sgmnt_data",592,"len")=1024
+ Set gtmtypes("sgmnt_data",591,"len")=4
+ Set gtmtypes("sgmnt_data",591,"type")="boolean_t"
+ Set gtmtypfldindx("sgmnt_data","read_only")=591
+ Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",592,"off")=6728
+ Set gtmtypes("sgmnt_data",592,"len")=440
Set gtmtypes("sgmnt_data",592,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_8k")=592
+ Set gtmtypfldindx("sgmnt_data","filler_7k")=592
+ Set gtmtypes("sgmnt_data",593,"name")="sgmnt_data.filler_8k"
+ Set gtmtypes("sgmnt_data",593,"off")=7168
+ Set gtmtypes("sgmnt_data",593,"len")=1024
+ Set gtmtypes("sgmnt_data",593,"type")="char"
+ Set gtmtypfldindx("sgmnt_data","filler_8k")=593
;
Set gtmtypes("shm_forw_multi_t")="struct"
Set gtmtypes("shm_forw_multi_t",0)=20
@@ -31051,7 +31137,7 @@ Init
Set gtmtypes("shm_reg_ctl_t",9,"dim")=3
;
Set gtmtypes("shm_snapshot_t")="struct"
- Set gtmtypes("shm_snapshot_t",0)=614
+ Set gtmtypes("shm_snapshot_t",0)=615
Set gtmtypes("shm_snapshot_t","len")=12360
Set gtmtypes("shm_snapshot_t",1,"name")="shm_snapshot_t.ss_info"
Set gtmtypes("shm_snapshot_t",1,"off")=0
@@ -31418,11 +31504,11 @@ Init
Set gtmtypes("shm_snapshot_t",73,"len")=4
Set gtmtypes("shm_snapshot_t",73,"type")="int"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.abandoned_kills")=73
- Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.freeze_online"
+ Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shm_snapshot_t",74,"off")=4480
Set gtmtypes("shm_snapshot_t",74,"len")=4
Set gtmtypes("shm_snapshot_t",74,"type")="unsigned-int"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.freeze_online")=74
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.unused_freeze_online_filler")=74
Set gtmtypes("shm_snapshot_t",75,"name")="shm_snapshot_t.shadow_file_header.filler_320"
Set gtmtypes("shm_snapshot_t",75,"off")=4484
Set gtmtypes("shm_snapshot_t",75,"len")=4
@@ -34129,16 +34215,21 @@ Init
Set gtmtypes("shm_snapshot_t",612,"len")=256
Set gtmtypes("shm_snapshot_t",612,"type")="unsigned-char"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.basedb_fname")=612
- Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.read_only"
Set gtmtypes("shm_snapshot_t",613,"off")=10892
- Set gtmtypes("shm_snapshot_t",613,"len")=444
- Set gtmtypes("shm_snapshot_t",613,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=613
- Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
- Set gtmtypes("shm_snapshot_t",614,"off")=11336
- Set gtmtypes("shm_snapshot_t",614,"len")=1024
+ Set gtmtypes("shm_snapshot_t",613,"len")=4
+ Set gtmtypes("shm_snapshot_t",613,"type")="boolean_t"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.read_only")=613
+ Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",614,"off")=10896
+ Set gtmtypes("shm_snapshot_t",614,"len")=440
Set gtmtypes("shm_snapshot_t",614,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=614
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=614
+ Set gtmtypes("shm_snapshot_t",615,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
+ Set gtmtypes("shm_snapshot_t",615,"off")=11336
+ Set gtmtypes("shm_snapshot_t",615,"len")=1024
+ Set gtmtypes("shm_snapshot_t",615,"type")="char"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=615
;
Set gtmtypes("shmpool_blk_hdr")="struct"
Set gtmtypes("shmpool_blk_hdr",0)=11
@@ -34200,7 +34291,7 @@ Init
Set gtmtypfldindx("shmpool_blk_hdr","image_count")=11
;
Set gtmtypes("shmpool_buff_hdr")="struct"
- Set gtmtypes("shmpool_buff_hdr",0)=621
+ Set gtmtypes("shmpool_buff_hdr",0)=622
Set gtmtypes("shmpool_buff_hdr","len")=8544
Set gtmtypes("shmpool_buff_hdr",1,"name")="shmpool_buff_hdr.shmpool_crit_latch"
Set gtmtypes("shmpool_buff_hdr",1,"off")=0
@@ -34602,11 +34693,11 @@ Init
Set gtmtypes("shmpool_buff_hdr",80,"len")=4
Set gtmtypes("shmpool_buff_hdr",80,"type")="int"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.abandoned_kills")=80
- Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.freeze_online"
+ Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shmpool_buff_hdr",81,"off")=664
Set gtmtypes("shmpool_buff_hdr",81,"len")=4
Set gtmtypes("shmpool_buff_hdr",81,"type")="unsigned-int"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.freeze_online")=81
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.unused_freeze_online_filler")=81
Set gtmtypes("shmpool_buff_hdr",82,"name")="shmpool_buff_hdr.shadow_file_header.filler_320"
Set gtmtypes("shmpool_buff_hdr",82,"off")=668
Set gtmtypes("shmpool_buff_hdr",82,"len")=4
@@ -37313,16 +37404,21 @@ Init
Set gtmtypes("shmpool_buff_hdr",619,"len")=256
Set gtmtypes("shmpool_buff_hdr",619,"type")="unsigned-char"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.basedb_fname")=619
- Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.read_only"
Set gtmtypes("shmpool_buff_hdr",620,"off")=7076
- Set gtmtypes("shmpool_buff_hdr",620,"len")=444
- Set gtmtypes("shmpool_buff_hdr",620,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=620
- Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
- Set gtmtypes("shmpool_buff_hdr",621,"off")=7520
- Set gtmtypes("shmpool_buff_hdr",621,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",620,"len")=4
+ Set gtmtypes("shmpool_buff_hdr",620,"type")="boolean_t"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.read_only")=620
+ Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",621,"off")=7080
+ Set gtmtypes("shmpool_buff_hdr",621,"len")=440
Set gtmtypes("shmpool_buff_hdr",621,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=621
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=621
+ Set gtmtypes("shmpool_buff_hdr",622,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
+ Set gtmtypes("shmpool_buff_hdr",622,"off")=7520
+ Set gtmtypes("shmpool_buff_hdr",622,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",622,"type")="char"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=622
;
Set gtmtypes("show_reply")="struct"
Set gtmtypes("show_reply",0)=2
@@ -41055,11 +41151,11 @@ Init
Set gtmtypfldindx("unique_file_id","file_id")=5
;
Set gtmtypes("unix_db_info")="struct"
- Set gtmtypes("unix_db_info",0)=169
- Set gtmtypes("unix_db_info","len")=932
+ Set gtmtypes("unix_db_info",0)=172
+ Set gtmtypes("unix_db_info","len")=944
Set gtmtypes("unix_db_info",1,"name")="unix_db_info.s_addrs"
Set gtmtypes("unix_db_info",1,"off")=0
- Set gtmtypes("unix_db_info",1,"len")=864
+ Set gtmtypes("unix_db_info",1,"len")=876
Set gtmtypes("unix_db_info",1,"type")="sgmnt_addrs"
Set gtmtypfldindx("unix_db_info","s_addrs")=1
Set gtmtypes("unix_db_info",2,"name")="unix_db_info.s_addrs.hdr"
@@ -41829,81 +41925,96 @@ Init
Set gtmtypes("unix_db_info",154,"len")=4
Set gtmtypes("unix_db_info",154,"type")="boolean_t"
Set gtmtypfldindx("unix_db_info","s_addrs.statsDB_setup_completed")=154
- Set gtmtypes("unix_db_info",155,"name")="unix_db_info.fn"
+ Set gtmtypes("unix_db_info",155,"name")="unix_db_info.s_addrs.gd_instinfo"
Set gtmtypes("unix_db_info",155,"off")=864
Set gtmtypes("unix_db_info",155,"len")=4
Set gtmtypes("unix_db_info",155,"type")="addr"
- Set gtmtypfldindx("unix_db_info","fn")=155
- Set gtmtypes("unix_db_info",156,"name")="unix_db_info.fd"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_instinfo")=155
+ Set gtmtypes("unix_db_info",156,"name")="unix_db_info.s_addrs.gd_ptr"
Set gtmtypes("unix_db_info",156,"off")=868
Set gtmtypes("unix_db_info",156,"len")=4
- Set gtmtypes("unix_db_info",156,"type")="int"
- Set gtmtypfldindx("unix_db_info","fd")=156
- Set gtmtypes("unix_db_info",157,"name")="unix_db_info.owning_gd"
+ Set gtmtypes("unix_db_info",156,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_ptr")=156
+ Set gtmtypes("unix_db_info",157,"name")="unix_db_info.s_addrs.jnlpool"
Set gtmtypes("unix_db_info",157,"off")=872
Set gtmtypes("unix_db_info",157,"len")=4
Set gtmtypes("unix_db_info",157,"type")="addr"
- Set gtmtypfldindx("unix_db_info","owning_gd")=157
- Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fileid"
+ Set gtmtypfldindx("unix_db_info","s_addrs.jnlpool")=157
+ Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fn"
Set gtmtypes("unix_db_info",158,"off")=876
- Set gtmtypes("unix_db_info",158,"len")=20
- Set gtmtypes("unix_db_info",158,"type")="unix_file_id"
- Set gtmtypfldindx("unix_db_info","fileid")=158
- Set gtmtypes("unix_db_info",159,"name")="unix_db_info.fileid.inode"
- Set gtmtypes("unix_db_info",159,"off")=876
- Set gtmtypes("unix_db_info",159,"len")=8
- Set gtmtypes("unix_db_info",159,"type")="ino_t"
- Set gtmtypfldindx("unix_db_info","fileid.inode")=159
- Set gtmtypes("unix_db_info",160,"name")="unix_db_info.fileid.device"
+ Set gtmtypes("unix_db_info",158,"len")=4
+ Set gtmtypes("unix_db_info",158,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","fn")=158
+ Set gtmtypes("unix_db_info",159,"name")="unix_db_info.fd"
+ Set gtmtypes("unix_db_info",159,"off")=880
+ Set gtmtypes("unix_db_info",159,"len")=4
+ Set gtmtypes("unix_db_info",159,"type")="int"
+ Set gtmtypfldindx("unix_db_info","fd")=159
+ Set gtmtypes("unix_db_info",160,"name")="unix_db_info.owning_gd"
Set gtmtypes("unix_db_info",160,"off")=884
- Set gtmtypes("unix_db_info",160,"len")=8
- Set gtmtypes("unix_db_info",160,"type")="dev_t"
- Set gtmtypfldindx("unix_db_info","fileid.device")=160
- Set gtmtypes("unix_db_info",161,"name")="unix_db_info.fileid.st_gen"
- Set gtmtypes("unix_db_info",161,"off")=892
- Set gtmtypes("unix_db_info",161,"len")=4
- Set gtmtypes("unix_db_info",161,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","fileid.st_gen")=161
- Set gtmtypes("unix_db_info",162,"name")="unix_db_info.semid"
- Set gtmtypes("unix_db_info",162,"off")=896
- Set gtmtypes("unix_db_info",162,"len")=4
- Set gtmtypes("unix_db_info",162,"type")="int"
- Set gtmtypfldindx("unix_db_info","semid")=162
- Set gtmtypes("unix_db_info",163,"name")="unix_db_info.gt_sem_ctime"
- Set gtmtypes("unix_db_info",163,"off")=900
- Set gtmtypes("unix_db_info",163,"len")=4
- Set gtmtypes("unix_db_info",163,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=163
- Set gtmtypes("unix_db_info",164,"name")="unix_db_info.shmid"
+ Set gtmtypes("unix_db_info",160,"len")=4
+ Set gtmtypes("unix_db_info",160,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","owning_gd")=160
+ Set gtmtypes("unix_db_info",161,"name")="unix_db_info.fileid"
+ Set gtmtypes("unix_db_info",161,"off")=888
+ Set gtmtypes("unix_db_info",161,"len")=20
+ Set gtmtypes("unix_db_info",161,"type")="unix_file_id"
+ Set gtmtypfldindx("unix_db_info","fileid")=161
+ Set gtmtypes("unix_db_info",162,"name")="unix_db_info.fileid.inode"
+ Set gtmtypes("unix_db_info",162,"off")=888
+ Set gtmtypes("unix_db_info",162,"len")=8
+ Set gtmtypes("unix_db_info",162,"type")="ino_t"
+ Set gtmtypfldindx("unix_db_info","fileid.inode")=162
+ Set gtmtypes("unix_db_info",163,"name")="unix_db_info.fileid.device"
+ Set gtmtypes("unix_db_info",163,"off")=896
+ Set gtmtypes("unix_db_info",163,"len")=8
+ Set gtmtypes("unix_db_info",163,"type")="dev_t"
+ Set gtmtypfldindx("unix_db_info","fileid.device")=163
+ Set gtmtypes("unix_db_info",164,"name")="unix_db_info.fileid.st_gen"
Set gtmtypes("unix_db_info",164,"off")=904
Set gtmtypes("unix_db_info",164,"len")=4
- Set gtmtypes("unix_db_info",164,"type")="int"
- Set gtmtypfldindx("unix_db_info","shmid")=164
- Set gtmtypes("unix_db_info",165,"name")="unix_db_info.gt_shm_ctime"
+ Set gtmtypes("unix_db_info",164,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","fileid.st_gen")=164
+ Set gtmtypes("unix_db_info",165,"name")="unix_db_info.semid"
Set gtmtypes("unix_db_info",165,"off")=908
Set gtmtypes("unix_db_info",165,"len")=4
- Set gtmtypes("unix_db_info",165,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=165
- Set gtmtypes("unix_db_info",166,"name")="unix_db_info.ftok_semid"
+ Set gtmtypes("unix_db_info",165,"type")="int"
+ Set gtmtypfldindx("unix_db_info","semid")=165
+ Set gtmtypes("unix_db_info",166,"name")="unix_db_info.gt_sem_ctime"
Set gtmtypes("unix_db_info",166,"off")=912
Set gtmtypes("unix_db_info",166,"len")=4
- Set gtmtypes("unix_db_info",166,"type")="int"
- Set gtmtypfldindx("unix_db_info","ftok_semid")=166
- Set gtmtypes("unix_db_info",167,"name")="unix_db_info.key"
+ Set gtmtypes("unix_db_info",166,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=166
+ Set gtmtypes("unix_db_info",167,"name")="unix_db_info.shmid"
Set gtmtypes("unix_db_info",167,"off")=916
Set gtmtypes("unix_db_info",167,"len")=4
- Set gtmtypes("unix_db_info",167,"type")="key_t"
- Set gtmtypfldindx("unix_db_info","key")=167
- Set gtmtypes("unix_db_info",168,"name")="unix_db_info.raw"
+ Set gtmtypes("unix_db_info",167,"type")="int"
+ Set gtmtypfldindx("unix_db_info","shmid")=167
+ Set gtmtypes("unix_db_info",168,"name")="unix_db_info.gt_shm_ctime"
Set gtmtypes("unix_db_info",168,"off")=920
Set gtmtypes("unix_db_info",168,"len")=4
- Set gtmtypes("unix_db_info",168,"type")="boolean_t"
- Set gtmtypfldindx("unix_db_info","raw")=168
- Set gtmtypes("unix_db_info",169,"name")="unix_db_info.db_fs_block_size"
+ Set gtmtypes("unix_db_info",168,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=168
+ Set gtmtypes("unix_db_info",169,"name")="unix_db_info.ftok_semid"
Set gtmtypes("unix_db_info",169,"off")=924
Set gtmtypes("unix_db_info",169,"len")=4
- Set gtmtypes("unix_db_info",169,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","db_fs_block_size")=169
+ Set gtmtypes("unix_db_info",169,"type")="int"
+ Set gtmtypfldindx("unix_db_info","ftok_semid")=169
+ Set gtmtypes("unix_db_info",170,"name")="unix_db_info.key"
+ Set gtmtypes("unix_db_info",170,"off")=928
+ Set gtmtypes("unix_db_info",170,"len")=4
+ Set gtmtypes("unix_db_info",170,"type")="key_t"
+ Set gtmtypfldindx("unix_db_info","key")=170
+ Set gtmtypes("unix_db_info",171,"name")="unix_db_info.raw"
+ Set gtmtypes("unix_db_info",171,"off")=932
+ Set gtmtypes("unix_db_info",171,"len")=4
+ Set gtmtypes("unix_db_info",171,"type")="boolean_t"
+ Set gtmtypfldindx("unix_db_info","raw")=171
+ Set gtmtypes("unix_db_info",172,"name")="unix_db_info.db_fs_block_size"
+ Set gtmtypes("unix_db_info",172,"off")=936
+ Set gtmtypes("unix_db_info",172,"len")=4
+ Set gtmtypes("unix_db_info",172,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","db_fs_block_size")=172
;
Set gtmtypes("unix_file_id")="struct"
Set gtmtypes("unix_file_id",0)=3
@@ -43039,6 +43150,7 @@ Init
Set gtmstructs("gd_binding_struct")="gd_binding"
Set gtmstructs("gd_gblname_struct")="gd_gblname"
Set gtmstructs("gd_id_struct")="unix_file_id"
+ Set gtmstructs("gd_inst_info_struct")="gd_inst_info"
Set gtmstructs("gd_region_struct")="gd_region"
Set gtmstructs("gd_segment_struct")="gd_segment"
Set gtmstructs("gdr_name_struct")="gdr_name"
@@ -43090,6 +43202,7 @@ Init
Set gtmstructs("jnl_private_control_struct")="jnl_private_control"
Set gtmstructs("jnl_process_vector_struct")="jnl_process_vector"
Set gtmstructs("jnlext_multi_struct")="jnlext_multi_t"
+ Set gtmstructs("jnlpool_addrs_struct")="jnlpool_addrs"
Set gtmstructs("job_parm_struct")="job_parm"
Set gtmstructs("joberr_msg_struct")="joberr_msg"
Set gtmstructs("key_value_struct")="key_cum_value"
diff --git a/sr_i386/cmerrors_ctl.c b/sr_i386/cmerrors_ctl.c
index 3d09df6..11fb5d8 100644
--- a/sr_i386/cmerrors_ctl.c
+++ b/sr_i386/cmerrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
diff --git a/sr_i386/cmierrors_ctl.c b/sr_i386/cmierrors_ctl.c
index 4ff26bf..75c8f04 100644
--- a/sr_i386/cmierrors_ctl.c
+++ b/sr_i386/cmierrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
diff --git a/sr_i386/gdeerrors_ctl.c b/sr_i386/gdeerrors_ctl.c
index a7a8ef2..eed1b5f 100644
--- a/sr_i386/gdeerrors_ctl.c
+++ b/sr_i386/gdeerrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -73,7 +73,7 @@ LITDEF err_msg gdeerrors[] = {
{ "KEYFORBLK", "But block size !AD and reserved bytes !AD limit key size to !AD", 6 },
{ "STRMISSQUOTE", "Missing double-quote at end of string specification !AD", 2 },
{ "GBLNAMEIS", "in gblname !AD", 2 },
- { "NAMSUBSEMPTY", "Subscript #!UL is empty in name specification", 3 },
+ { "NAMSUBSEMPTY", "Subscript #!UL is empty in name specification", 1 },
{ "NAMSUBSBAD", "Subscript #!UL with value !AD in name specification is an invalid number or string", 3 },
{ "NAMNUMSUBSOFLOW", "Subscript #!UL with value !AD in name specification has a numeric overflow", 3 },
{ "NAMNUMSUBNOTEXACT", "Subscript #!UL with value !AD in name specification is not an exact GT.M number", 3 },
@@ -94,7 +94,7 @@ LITDEF err_msg gdeerrors[] = {
{ "NAMRANGEORDER", "Range in name specification !AD specifies out-of-order subscripts using collation sequence #!UL", 3 },
{ "NAMRANGEOVERLAP", "Range in name specifications !AD and !AD overlap using collation sequence #!UL", 5 },
{ "NAMGVSUBOFLOW", "Subscripted name !AD...!AD is too long to represent in the database using collation value #!UL", 5 },
- { "GBLNAMCOLLRANGE", "Collation sequence #!UL is out of range (0 thru 255)", 3 },
+ { "GBLNAMCOLLRANGE", "Collation sequence #!UL is out of range (0 thru 255)", 1 },
{ "STDNULLCOLLREQ", "Region !AD needs Standard Null Collation enabled because global !AD spans through it", 4 },
{ "GBLNAMCOLLVER", "Global directory indicates GBLNAME !AD has collation sequence #!UL with a version #!UL but shared library reports different version #!UL", 5 },
{ "GDEASYNCIONOMM", "!AD segment has ASYNCIO turned on. Cannot support MM access method.", 2 },
diff --git a/sr_i386/merrors_ansi.h b/sr_i386/merrors_ansi.h
index 9b6ba07..204c51d 100644
--- a/sr_i386/merrors_ansi.h
+++ b/sr_i386/merrors_ansi.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -1148,7 +1148,7 @@ const static readonly int error_ansi[] = {
0, /* CRYPTDLNOOPEN */
0, /* CRYPTNOV4 */
0, /* CRYPTNOMM */
- 0, /* UNUSEDMSG1319 */
+ 0, /* READONLYNOBG */
0, /* CRYPTKEYFETCHFAILED */
0, /* CRYPTKEYFETCHFAILEDNF */
0, /* CRYPTHASHGENFAILED */
@@ -1206,7 +1206,7 @@ const static readonly int error_ansi[] = {
0, /* MUUSERLBK */
0, /* SETINSETTRIGONLY */
0, /* DZTRIGINTRIG */
- 0, /* UNUSEDMSG1377 */
+ 0, /* LSINSERTED */
0, /* BOOLSIDEFFECT */
0, /* DBBADUPGRDSTATE */
0, /* WRITEWAITPID */
@@ -1218,7 +1218,7 @@ const static readonly int error_ansi[] = {
0, /* JNLORDBFLU */
0, /* ZCCLNUPRTNMISNG */
0, /* ZCINVALIDKEYWORD */
- 0, /* UNUSEDMSG1389 */
+ 0, /* REPLMULTINSTUPDATE */
0, /* DBSHMNAMEDIFF */
0, /* SHMREMOVED */
0, /* DEVICEWRITEONLY */
@@ -1498,4 +1498,8 @@ const static readonly int error_ansi[] = {
0, /* JNLBUFFPHS2SALVAGE */
0, /* JNLPOOLPHS2SALVAGE */
0, /* MURNDWNARGLESS */
+ 0, /* DBFREEZEON */
+ 0, /* DBFREEZEOFF */
+ 0, /* STPCRIT */
+ 0, /* STPOFLOW */
};
diff --git a/sr_i386/merrors_ctl.c b/sr_i386/merrors_ctl.c
index e9fb7da..74a9179 100644
--- a/sr_i386/merrors_ctl.c
+++ b/sr_i386/merrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -155,7 +155,7 @@ LITDEF err_msg merrors[] = {
{ "NOTPRINCIO", "Output currently directed to device !AD", 2 },
{ "NOTTOEOFONPUT", "Not positioned to EOF on write (sequential organization only)", 0 },
{ "NOZBRK", "No zbreak at that location", 0 },
- { "NULSUBSC", "Null subscripts are not allowed for region: !AD", 2 },
+ { "NULSUBSC", "!AD Null subscripts are not allowed for current region", 2 },
{ "NUMOFLOW", "Numeric overflow", 0 },
{ "PARFILSPC", "Parameter: !AD file specification: !AD", 4 },
{ "PATCLASS", "Illegal character class for pattern code", 0 },
@@ -584,7 +584,7 @@ LITDEF err_msg merrors[] = {
{ "MUTEXERR", "Mutual Exclusion subsystem failure", 0 },
{ "JNLVSIZE", "Journal File !AD has incorrect virtual_filesize !UL. Allocation : !UL, Extension : !UL, Filesize : !UL, File system block size : !UL", 7 },
{ "MUTEXLCKALERT", "Mutual Exclusion subsystem ALERT - lock attempt threshold crossed for region !AD. Process !UL is in crit cycle !UL.", 4 },
- { "MUTEXFRCDTERM", "Mutual Exclusion subsystem detected forced termination of process !UL. Crit salvaged from region !AD.", 3 },
+ { "MUTEXFRCDTERM", "Mutual Exclusion subsystem detected forced termination of process !UL. Crit salvaged from database file !AD.", 3 },
{ "GTMSECSHR", "!UL : Error during gtmsecshr operation", 1 },
{ "GTMSECSHRSRVFID", "!AD: !UL - Attempt to service request failed.!/ client id: !UL, mesg type: !UL, mesg data: !UL", 6 },
{ "GTMSECSHRSRVFIL", "!AD: !UL - Attempt to service request failed.!/ client id: !UL, mesg type: !UL!/file: !AD", 7 },
@@ -1150,7 +1150,7 @@ LITDEF err_msg merrors[] = {
{ "CRYPTDLNOOPEN", "Could not load encryption library while opening encrypted file !AD. !AD", 4 },
{ "CRYPTNOV4", "!AD is an encrypted database. Cannot downgrade(to V4) with Encryption option enabled.", 2 },
{ "CRYPTNOMM", "!AD is an encrypted database. Cannot support MM access method.", 2 },
- { "UNUSEDMSG1319", "Last used in V6.2-002A", 0 },
+ { "READONLYNOBG", "Read-only cannot be enabled on non-MM databases", 0 },
{ "CRYPTKEYFETCHFAILED", "Could not retrieve encryption key corresponding to file !AD. !AD", 4 },
{ "CRYPTKEYFETCHFAILEDNF", "Could not retrieve encryption key during !AD operation key. !AD", 4 },
{ "CRYPTHASHGENFAILED", "Could not generate cryptographic hash for symmetric key corresponding to file !AD. !AD", 4 },
@@ -1191,7 +1191,7 @@ LITDEF err_msg merrors[] = {
{ "ZTRIGINVACT", "Missing or invalid parameter in position !UL given to $ZTRIGGER()", 1 },
{ "INDRCOMPFAIL", "Compilation of indirection failed", 0 },
{ "QUITALSINV", "QUIT * return when the extrinsic was not invoked with SET *", 0 },
- { "PROCTERM", "!AD process termination due to !AD (return code !UL) from !AD", 7 },
+ { "PROCTERM", "!AD process termination due to !AZ (return code !UL) from !AD", 6 },
{ "SRCLNNTDSP", "Source lines exceeding !UL character width are not displayed", 1 },
{ "ARROWNTDSP", "Unable to display ^----- due to length of source line", 0 },
{ "TRIGDEFBAD", "Trigger initialization failed for global ^!AD. Error while processing ^#t(\"!AD\",!AD)", 6 },
@@ -1208,7 +1208,7 @@ LITDEF err_msg merrors[] = {
{ "MUUSERLBK", "Abnormal shutdown of replication-enabled database !AD detected", 2 },
{ "SETINSETTRIGONLY", "ISV !AD can only be modified in a 'SET' type trigger", 2 },
{ "DZTRIGINTRIG", "$ZTRIGGER() is not allowed inside trigger context. Trigger name: !AD", 2 },
- { "UNUSEDMSG1377", "SECNODZTRIGINTP : Last used in V6.2-000", 0 },
+ { "LSINSERTED", "Line !UL, source module !AD exceeds maximum source line length; line seperator inserted, terminating scope of any prior IF, ELSE, or FOR", 3 },
{ "BOOLSIDEFFECT", "Extrinsic ($$), External call ($&) or $INCREMENT() with potential side effects in Boolean expression", 0 },
{ "DBBADUPGRDSTATE", "Correcting conflicting values for fields describing database version upgrade state in the file header for region !AD (!AD) - make fresh backups with new journal files immediately.", 4 },
{ "WRITEWAITPID", "PID !UL waited !UL minute(s) for PID !UL to finish writing block 0x!XL in database file !AD", 6 },
@@ -1220,7 +1220,7 @@ LITDEF err_msg merrors[] = {
{ "JNLORDBFLU", "Error flushing database blocks to !AD. See related messages in the operator log", 2 },
{ "ZCCLNUPRTNMISNG", "External call: Cleanup routine name missing. Cannot continue", 0 },
{ "ZCINVALIDKEYWORD", "External call: Invalid keyword found. Cannot continue", 0 },
- { "UNUSEDMSG1389", "REPLNOMULTILINETRG : Last used in V6.2-000", 0 },
+ { "REPLMULTINSTUPDATE", "Previous updates in the current transaction are to !AD so updates to !AD (in !AD) not allowed", 6 },
{ "DBSHMNAMEDIFF", "Database file !AD points to shared memory (id = !UL) which points to a different database file !AZ", 4 },
{ "SHMREMOVED", "Removed Shared Memory id !UL corresponding to file !AD", 3 },
{ "DEVICEWRITEONLY", "Cannot read from a write-only device", 0 },
@@ -1461,7 +1461,7 @@ LITDEF err_msg merrors[] = {
{ "DBBLKSIZEALIGN", "Database file !AD has AIO=ON and block_size=!UL which is not a multiple of filesystem block size !UL", 4 },
{ "ASYNCIONOMM", "Database file !AD!AD cannot !AD", 6 },
{ "RESYNCSEQLOW", "MUPIP JOURNAL -ROLLBACK -FORWARD -RESYNC=!@ZQ [0x!16 at XQ] requested is lower than !@ZQ [0x!16 at XQ] which is the starting sequence number of the instance", 4 },
- { "DBNULCOL", "NULL collation representation for record !UL in block !UL is !AD which differs from the database file header settings of !AD", 6 },
+ { "DBNULCOL", "!AD NULL collation representation differs from the database file header setting", 2 },
{ "UTF16ENDIAN", "The device previously set UTF-16 endianness to !AD and cannot change to !AD", 4 },
{ "OFRZACTIVE", "Region !AD has an Online Freeze", 2 },
{ "OFRZAUTOREL", "Online Freeze automatically released for region !AD", 2 },
@@ -1470,8 +1470,8 @@ LITDEF err_msg merrors[] = {
{ "OFRZNOTHELD", "Online Freeze had been automatically released for at least one region", 0 },
{ "AIOBUFSTUCK", "Waited !UL minutes for PID: !UL to finish AIO disk write of block: !UL [0x!XL] aio_error=!UL", 5 },
{ "DBDUPNULCOL", "Discarding !AD=!AD key due to duplicate null collation record", 4 },
- { "CHANGELOGINTERVAL", "!AD Server now logging to !AD with a !UL second interval", 5 },
- { "DBNONUMSUBS", "!AD key contains a numeric form of subscript in a global defined to collate all subscripts as strings", 2 },
+ { "CHANGELOGINTERVAL", "!AD Server is now logging to !AD every !UL transactions", 5 },
+ { "DBNONUMSUBS", "!AD Key contains a numeric form of subscript in a global defined to collate all subscripts as strings", 2 },
{ "AUTODBCREFAIL", "Automatic creation of database file !AD associated with region !AD failed; see associated messages for details", 4 },
{ "RNDWNSTATSDBFAIL", "Rundown of statistics database region !AD (DB !AD) failed at/in !AD with following error: !AD", 8 },
{ "STATSDBNOTSUPP", "Attempted operation is not supported on statistics database file !AD", 2 },
@@ -1500,6 +1500,10 @@ LITDEF err_msg merrors[] = {
{ "JNLBUFFPHS2SALVAGE", "Salvaged journal records from process !UL for database file !AD at transaction number [0x!16 at XQ] and journal-sequence-number/unique-token [0x!16 at XQ] with journal file starting offset [0x!XL] and length [0x!XL]", 7 },
{ "JNLPOOLPHS2SALVAGE", "Salvaged journal records from process !UL for replication instance file !AD at journal sequence number [0x!16 at XQ] with journal pool starting offset [0x!16 at XQ] and length [0x!XL]", 6 },
{ "MURNDWNARGLESS", "Argumentless MUPIP RUNDOWN started with process id !UL by userid !UL from directory !AD", 4 },
+ { "DBFREEZEON", "Region !AD is FROZEN (!AZOVERRIDE !AZONLINE !AZAUTOREL)", 5 },
+ { "DBFREEZEOFF", "Region !AD is UNFROZEN (!AZOVERRIDE !AZAUTOREL)", 4 },
+ { "STPCRIT", "String pool space critical", 0 },
+ { "STPOFLOW", "String pool space overflow", 0 },
};
LITDEF int ERR_ACK = 150372361;
@@ -1693,7 +1697,7 @@ LITDEF int ERR_UNIMPLOP = 150373858;
LITDEF int ERR_VAREXPECTED = 150373866;
LITDEF int ERR_VARRECBLKSZ = 150373874;
LITDEF int ERR_MAXARGCNT = 150373882;
-LITDEF int ERR_GTMSECSHRSEMGET = 150373890;
+LITDEF int ERR_GTMSECSHRSEMGET = 150373892;
LITDEF int ERR_VIEWARGCNT = 150373898;
LITDEF int ERR_GTMSECSHRDMNSTARTED = 150373907;
LITDEF int ERR_ZATTACHERR = 150373914;
@@ -1764,12 +1768,12 @@ LITDEF int ERR_QUITARGUSE = 150374426;
LITDEF int ERR_NAMEEXPECTED = 150374434;
LITDEF int ERR_FALLINTOFLST = 150374442;
LITDEF int ERR_NOTEXTRINSIC = 150374450;
-LITDEF int ERR_GTMSECSHRREMSEMFAIL = 150374458;
+LITDEF int ERR_GTMSECSHRREMSEMFAIL = 150374456;
LITDEF int ERR_FMLLSTMISSING = 150374466;
LITDEF int ERR_ACTLSTTOOLONG = 150374474;
LITDEF int ERR_ACTOFFSET = 150374482;
LITDEF int ERR_MAXACTARG = 150374490;
-LITDEF int ERR_GTMSECSHRREMSEM = 150374498;
+LITDEF int ERR_GTMSECSHRREMSEM = 150374499;
LITDEF int ERR_JNLTMQUAL2 = 150374506;
LITDEF int ERR_GDINVALID = 150374514;
LITDEF int ERR_ASSERT = 150374524;
@@ -1913,7 +1917,7 @@ LITDEF int ERR_LDGOQFMT = 150375618;
LITDEF int ERR_BEGINST = 150375627;
LITDEF int ERR_INVMVXSZ = 150375636;
LITDEF int ERR_JNLWRTNOWWRTR = 150375642;
-LITDEF int ERR_GTMSECSHRSHMCONCPROC = 150375650;
+LITDEF int ERR_GTMSECSHRSHMCONCPROC = 150375648;
LITDEF int ERR_JNLINVALLOC = 150375656;
LITDEF int ERR_JNLINVEXT = 150375664;
LITDEF int ERR_MUPCLIERR = 150375674;
@@ -2084,7 +2088,7 @@ LITDEF int ERR_INVCTLMNE = 150376986;
LITDEF int ERR_SOCKLISTEN = 150376994;
LITDEF int ERR_LQLENGTHNA = 150377002;
LITDEF int ERR_ADDRTOOLONG = 150377010;
-LITDEF int ERR_GTMSECSHRGETSEMFAIL = 150377018;
+LITDEF int ERR_GTMSECSHRGETSEMFAIL = 150377016;
LITDEF int ERR_CPBEYALLOC = 150377026;
LITDEF int ERR_DBRDONLY = 150377034;
LITDEF int ERR_DUPTN = 150377040;
@@ -2212,11 +2216,11 @@ LITDEF int ERR_GTMSECSHRTMOUT = 150378011;
LITDEF int ERR_GTMSECSHRRECVF = 150378018;
LITDEF int ERR_GTMSECSHRSENDF = 150378026;
LITDEF int ERR_SIZENOTVALID8 = 150378034;
-LITDEF int ERR_GTMSECSHROPCMP = 150378040;
+LITDEF int ERR_GTMSECSHROPCMP = 150378044;
LITDEF int ERR_GTMSECSHRSUIDF = 150378048;
LITDEF int ERR_GTMSECSHRSGIDF = 150378056;
LITDEF int ERR_GTMSECSHRSSIDF = 150378064;
-LITDEF int ERR_GTMSECSHRFORKF = 150378074;
+LITDEF int ERR_GTMSECSHRFORKF = 150378076;
LITDEF int ERR_DBFSYNCERR = 150378082;
LITDEF int ERR_SECONDAHEAD = 150378090;
LITDEF int ERR_SCNDDBNOUPD = 150378098;
@@ -2639,7 +2643,7 @@ LITDEF int ERR_CRYPTOPFAILED = 150381426;
LITDEF int ERR_CRYPTDLNOOPEN = 150381434;
LITDEF int ERR_CRYPTNOV4 = 150381442;
LITDEF int ERR_CRYPTNOMM = 150381450;
-LITDEF int ERR_UNUSEDMSG1319 = 150381458;
+LITDEF int ERR_READONLYNOBG = 150381458;
LITDEF int ERR_CRYPTKEYFETCHFAILED = 150381466;
LITDEF int ERR_CRYPTKEYFETCHFAILEDNF = 150381474;
LITDEF int ERR_CRYPTHASHGENFAILED = 150381482;
@@ -2697,7 +2701,7 @@ LITDEF int ERR_GVZTRIGFAIL = 150381890;
LITDEF int ERR_MUUSERLBK = 150381898;
LITDEF int ERR_SETINSETTRIGONLY = 150381906;
LITDEF int ERR_DZTRIGINTRIG = 150381914;
-LITDEF int ERR_UNUSEDMSG1377 = 150381922;
+LITDEF int ERR_LSINSERTED = 150381920;
LITDEF int ERR_BOOLSIDEFFECT = 150381928;
LITDEF int ERR_DBBADUPGRDSTATE = 150381936;
LITDEF int ERR_WRITEWAITPID = 150381946;
@@ -2709,7 +2713,7 @@ LITDEF int ERR_GTMSECSHRCHDIRF = 150381986;
LITDEF int ERR_JNLORDBFLU = 150381994;
LITDEF int ERR_ZCCLNUPRTNMISNG = 150382002;
LITDEF int ERR_ZCINVALIDKEYWORD = 150382010;
-LITDEF int ERR_UNUSEDMSG1389 = 150382018;
+LITDEF int ERR_REPLMULTINSTUPDATE = 150382018;
LITDEF int ERR_DBSHMNAMEDIFF = 150382026;
LITDEF int ERR_SHMREMOVED = 150382035;
LITDEF int ERR_DEVICEWRITEONLY = 150382042;
@@ -2804,9 +2808,9 @@ LITDEF int ERR_DBSPANCHUNKORD = 150382746;
LITDEF int ERR_DBDATAMX = 150382754;
LITDEF int ERR_DBIOERR = 150382762;
LITDEF int ERR_INITORRESUME = 150382770;
-LITDEF int ERR_GTMSECSHRNOARG0 = 150382778;
-LITDEF int ERR_GTMSECSHRISNOT = 150382786;
-LITDEF int ERR_GTMSECSHRBADDIR = 150382794;
+LITDEF int ERR_GTMSECSHRNOARG0 = 150382780;
+LITDEF int ERR_GTMSECSHRISNOT = 150382788;
+LITDEF int ERR_GTMSECSHRBADDIR = 150382796;
LITDEF int ERR_JNLBUFFREGUPD = 150382800;
LITDEF int ERR_JNLBUFFDBUPD = 150382808;
LITDEF int ERR_LOCKINCR2HIGH = 150382818;
@@ -2989,9 +2993,13 @@ LITDEF int ERR_MUCREFILERR = 150384226;
LITDEF int ERR_JNLBUFFPHS2SALVAGE = 150384235;
LITDEF int ERR_JNLPOOLPHS2SALVAGE = 150384243;
LITDEF int ERR_MURNDWNARGLESS = 150384251;
+LITDEF int ERR_DBFREEZEON = 150384259;
+LITDEF int ERR_DBFREEZEOFF = 150384267;
+LITDEF int ERR_STPCRIT = 150384274;
+LITDEF int ERR_STPOFLOW = 150384284;
GBLDEF err_ctl merrors_ctl = {
246,
"GTM",
&merrors[0],
- 1487};
+ 1491};
diff --git a/sr_i386/ttt.c b/sr_i386/ttt.c
index 9f171a6..4da6d9c 100644
--- a/sr_i386/ttt.c
+++ b/sr_i386/ttt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -14,49 +14,49 @@
#include "vxi.h"
#include "vxt.h"
#include "xfer_enum.h"
-LITDEF short ttt[4318] = {
+LITDEF short ttt[4315] = {
-/* 0 */ 0,0,0,0,330,3431,2872,554,
-/* 8 */ 2250,2857,2887,1931,408,3381,2043,3005,
-/* 16 */ 2126,2114,3614,3651,2087,2096,2168,2108,
+/* 0 */ 0,0,0,0,330,3425,2866,554,
+/* 8 */ 2244,2851,2881,1931,408,3375,2043,2999,
+/* 16 */ 2126,2114,3608,3645,2087,2096,2168,2108,
/* 24 */ 2159,2138,2066,754,781,769,808,820,
/* 32 */ 832,850,892,910,928,949,978,1008,
-/* 40 */ 1023,1038,1053,1071,1083,2975,2990,1155,
+/* 40 */ 1023,1038,1053,1071,1083,2969,2984,1155,
/* 48 */ 1188,1221,1260,1323,1374,1650,1665,1680,
-/* 56 */ 1710,1749,1761,1785,1812,1833,1851,3446,
-/* 64 */ 3468,0,0,0,0,569,0,510,
-/* 72 */ 0,1917,0,2961,0,0,0,0,
-/* 80 */ 0,0,362,420,2228,2234,2649,2676,
-/* 88 */ 2694,2797,2735,2726,2812,3520,3604,2908,
-/* 96 */ 0,2940,3071,3034,3019,3049,3395,3247,
-/* 104 */ 3313,3526,3538,3553,3577,3586,3571,3562,
-/* 112 */ 3346,3647,3660,3682,3719,3731,3752,3776,
-/* 120 */ 3842,0,0,2845,2210,3123,4267,642,
-/* 128 */ 4270,696,2706,3089,524,530,4273,2313,
-/* 136 */ 2400,2300,477,2336,2420,2075,2358,2430,
-/* 144 */ 4276,2195,2186,4280,1392,1410,4281,358,
-/* 152 */ 354,3337,432,4285,4288,4291,2926,4294,
-/* 160 */ 4297,4300,4303,4306,4309,3417,0,2821,
-/* 168 */ 2489,2467,1629,2458,2246,2057,2772,1952,
-/* 176 */ 721,2762,0,0,2265,3595,3623,1605,
-/* 184 */ 3547,2348,1945,539,3743,1797,2177,1308,
-/* 192 */ 345,3075,608,674,592,652,3707,1203,
-/* 200 */ 1242,3675,2901,2204,2836,2915,624,1095,
-/* 208 */ 2776,4312,2410,3794,3812,3827,501,2791,
-/* 216 */ 3067,1890,3863,3854,1446,3409,583,1695,
-/* 224 */ 1737,2373,4315,3480,2446,730,868,3106,
-/* 232 */ 3635,3504,3490,3497,3486,706,963,2323,
-/* 240 */ 1137,2287,1125,2147,1110,1170,2385,1575,
+/* 56 */ 1710,1749,1761,1785,1812,1833,1851,3440,
+/* 64 */ 3462,0,0,0,0,569,0,510,
+/* 72 */ 0,1917,0,2955,0,0,0,0,
+/* 80 */ 0,0,362,420,0,2228,2643,2670,
+/* 88 */ 2688,2791,2729,2720,2806,3514,3598,2902,
+/* 96 */ 0,2934,3065,3028,3013,3043,3389,3241,
+/* 104 */ 3307,3520,3532,3547,3571,3580,3565,3556,
+/* 112 */ 3340,3641,3654,3676,3716,3728,3749,3773,
+/* 120 */ 3839,0,0,2839,2210,3117,4264,642,
+/* 128 */ 4267,696,2700,3083,524,530,4270,2307,
+/* 136 */ 2394,2294,477,2330,2414,2075,2352,2424,
+/* 144 */ 4273,2195,2186,4277,1392,1410,4278,358,
+/* 152 */ 354,3331,432,4282,4285,4288,2920,4291,
+/* 160 */ 4294,4297,4300,4303,4306,3411,0,2815,
+/* 168 */ 2483,2461,1629,2452,2240,2057,2766,1952,
+/* 176 */ 721,2756,0,0,2259,3589,3617,1605,
+/* 184 */ 3541,2342,1945,539,3740,1797,2177,1308,
+/* 192 */ 345,3069,608,674,592,652,3704,1203,
+/* 200 */ 1242,3669,2895,2204,2830,2909,624,1095,
+/* 208 */ 2770,4309,2404,3791,3809,3824,501,2785,
+/* 216 */ 3061,1890,3860,3851,1446,3403,583,1695,
+/* 224 */ 1737,2367,4312,3474,2440,730,868,3100,
+/* 232 */ 3629,3498,3484,3491,3480,706,963,2317,
+/* 240 */ 1137,2281,1125,2147,1110,1170,2379,1575,
/* 248 */ 1518,1503,1557,1473,1485,1530,1458,1542,
-/* 256 */ 1590,0,3367,0,987,996,3226,3292,
-/* 264 */ 1824,3205,3271,2274,3899,3869,3875,3887,
-/* 272 */ 3909,1347,1359,1281,1293,1335,3458,1725,
-/* 280 */ 1863,3944,3959,4013,4040,3995,3133,3145,
-/* 288 */ 3157,3169,2685,2700,1617,441,796,1428,
-/* 296 */ 633,3181,3193,4025,4031,0,0,0,
-/* 304 */ 0,3698,4055,4066,4078,4087,4101,4114,
-/* 312 */ 4124,4141,4153,4162,4174,4186,4198,4213,
-/* 320 */ 4225,0,0,4234,4255,1878,3977,3923,
+/* 256 */ 1590,0,3361,0,987,996,3220,3286,
+/* 264 */ 1824,3199,3265,2268,3896,3866,3872,3884,
+/* 272 */ 3906,1347,1359,1281,1293,1335,3452,1725,
+/* 280 */ 1863,3941,3956,4010,4037,3992,3127,3139,
+/* 288 */ 3151,3163,2679,2694,1617,441,796,1428,
+/* 296 */ 633,3175,3187,4022,4028,0,0,0,
+/* 304 */ 0,3692,4052,4063,4075,4084,4098,4111,
+/* 312 */ 4121,4138,4150,4159,4171,4183,4195,4210,
+/* 320 */ 4222,0,0,4231,4252,1878,3974,3920,
/* 328 */ 0,0,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,
/* 336 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_add,
/* 344 */ VXT_END,
@@ -360,347 +360,346 @@ LITDEF short ttt[4318] = {
/* 2210 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
/* 2218 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,
/* 2226 */ SIZEOF(char *) * (short int)xf_gvzwrite,VXT_END,
-/* 2228 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_halt,VXT_END,
-/* 2234 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 2242 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_hang,VXT_END,
-/* 2246 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_hardret,VXT_END,
-/* 2250 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2258 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_idiv,VXT_END,
-/* 2265 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_igetsrc,
-/* 2273 */ VXT_END,
-/* 2274 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2282 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_inddevparms,VXT_END,
-/* 2287 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2295 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname,VXT_END,
-/* 2300 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2308 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfun,VXT_END,
-/* 2313 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2321 */ SIZEOF(char *) * (short int)xf_indglvn,VXT_END,
-/* 2323 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2331 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indincr,VXT_END,
-/* 2336 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvadr,VXI_MOVL,VXT_REG,
-/* 2344 */ 0x50,VXT_ADDR,0,VXT_END,
-/* 2348 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2356 */ SIZEOF(char *) * (short int)xf_indlvarg,VXT_END,
-/* 2358 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2366 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indname,VXT_END,
-/* 2373 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvnamadr,VXI_MOVL,VXT_REG,
-/* 2381 */ 0x50,VXT_ADDR,0,VXT_END,
-/* 2385 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2393 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indo2,VXT_END,
-/* 2400 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2408 */ SIZEOF(char *) * (short int)xf_indpat,VXT_END,
-/* 2410 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2418 */ SIZEOF(char *) * (short int)xf_indrzshow,VXT_END,
-/* 2420 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2428 */ SIZEOF(char *) * (short int)xf_indset,VXT_END,
-/* 2430 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 2438 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indtext,VXT_END,
-/* 2446 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 2454 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_iocontrol,VXT_END,
-/* 2458 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_iretmvad,
-/* 2466 */ VXT_END,
-/* 2467 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2475 */ SIZEOF(char *) * (short int)xf_iretmval,VXT_END,
-/* 2477 */ VXI_BRB,VXT_JMP,1,VXT_END,
-/* 2481 */ VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2485 */ VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2489 */ VXI_JMP,VXT_VAL,1,VXT_END,
-/* 2493 */ VXI_BEQL,VXT_JMP,1,VXT_END,
-/* 2497 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2504 */ VXI_BNEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2511 */ VXI_BGEQ,VXT_JMP,1,VXT_END,
-/* 2515 */ VXI_BLSS,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2522 */ VXI_BLSS,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2529 */ VXI_BGTR,VXT_JMP,1,VXT_END,
-/* 2533 */ VXI_BLEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2540 */ VXI_BLEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2547 */ VXI_BLEQ,VXT_JMP,1,VXT_END,
-/* 2551 */ VXI_BGTR,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2558 */ VXI_BGTR,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2565 */ VXI_BLSS,VXT_JMP,1,VXT_END,
-/* 2569 */ VXI_BGEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2576 */ VXI_BGEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2583 */ VXI_BNEQ,VXT_JMP,1,VXT_END,
-/* 2587 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2594 */ VXI_BEQL,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2601 */ VXI_BLBC,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
-/* 2607 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
-/* 2615 */ VXT_END,
-/* 2616 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
-/* 2624 */ VXT_END,
-/* 2625 */ VXI_BLBS,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
-/* 2631 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
-/* 2639 */ VXT_END,
-/* 2640 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
-/* 2648 */ VXT_END,
-/* 2649 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,7,VXI_PUSHAB,VXT_VAL,
-/* 2657 */ 6,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,
-/* 2665 */ VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,
-/* 2673 */ VXT_XFER,SIZEOF(char *) * (short int)xf_job,VXT_END,
-/* 2676 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_kill,
-/* 2684 */ VXT_END,
-/* 2685 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_killalias,
-/* 2693 */ VXT_END,
-/* 2694 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killall,VXT_END,
-/* 2700 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killaliasall,VXT_END,
-/* 2706 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2714 */ 3,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_labaddr,VXI_MOVL,VXT_REG,
-/* 2722 */ 0x50,VXT_ADDR,0,VXT_END,
-/* 2726 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckdecr,
-/* 2734 */ VXT_END,
-/* 2735 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckincr,
-/* 2743 */ VXT_END,
+/* 2228 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 2236 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_hang,VXT_END,
+/* 2240 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_hardret,VXT_END,
+/* 2244 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2252 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_idiv,VXT_END,
+/* 2259 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_igetsrc,
+/* 2267 */ VXT_END,
+/* 2268 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2276 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_inddevparms,VXT_END,
+/* 2281 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2289 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname,VXT_END,
+/* 2294 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2302 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfun,VXT_END,
+/* 2307 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2315 */ SIZEOF(char *) * (short int)xf_indglvn,VXT_END,
+/* 2317 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2325 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indincr,VXT_END,
+/* 2330 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvadr,VXI_MOVL,VXT_REG,
+/* 2338 */ 0x50,VXT_ADDR,0,VXT_END,
+/* 2342 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2350 */ SIZEOF(char *) * (short int)xf_indlvarg,VXT_END,
+/* 2352 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2360 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indname,VXT_END,
+/* 2367 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvnamadr,VXI_MOVL,VXT_REG,
+/* 2375 */ 0x50,VXT_ADDR,0,VXT_END,
+/* 2379 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2387 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indo2,VXT_END,
+/* 2394 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2402 */ SIZEOF(char *) * (short int)xf_indpat,VXT_END,
+/* 2404 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2412 */ SIZEOF(char *) * (short int)xf_indrzshow,VXT_END,
+/* 2414 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2422 */ SIZEOF(char *) * (short int)xf_indset,VXT_END,
+/* 2424 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 2432 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indtext,VXT_END,
+/* 2440 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 2448 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_iocontrol,VXT_END,
+/* 2452 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_iretmvad,
+/* 2460 */ VXT_END,
+/* 2461 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2469 */ SIZEOF(char *) * (short int)xf_iretmval,VXT_END,
+/* 2471 */ VXI_BRB,VXT_JMP,1,VXT_END,
+/* 2475 */ VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2479 */ VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2483 */ VXI_JMP,VXT_VAL,1,VXT_END,
+/* 2487 */ VXI_BEQL,VXT_JMP,1,VXT_END,
+/* 2491 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2498 */ VXI_BNEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2505 */ VXI_BGEQ,VXT_JMP,1,VXT_END,
+/* 2509 */ VXI_BLSS,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2516 */ VXI_BLSS,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2523 */ VXI_BGTR,VXT_JMP,1,VXT_END,
+/* 2527 */ VXI_BLEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2534 */ VXI_BLEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2541 */ VXI_BLEQ,VXT_JMP,1,VXT_END,
+/* 2545 */ VXI_BGTR,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2552 */ VXI_BGTR,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2559 */ VXI_BLSS,VXT_JMP,1,VXT_END,
+/* 2563 */ VXI_BGEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2570 */ VXI_BGEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2577 */ VXI_BNEQ,VXT_JMP,1,VXT_END,
+/* 2581 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2588 */ VXI_BEQL,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2595 */ VXI_BLBC,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
+/* 2601 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
+/* 2609 */ VXT_END,
+/* 2610 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
+/* 2618 */ VXT_END,
+/* 2619 */ VXI_BLBS,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
+/* 2625 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
+/* 2633 */ VXT_END,
+/* 2634 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
+/* 2642 */ VXT_END,
+/* 2643 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,7,VXI_PUSHAB,VXT_VAL,
+/* 2651 */ 6,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,
+/* 2659 */ VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,
+/* 2667 */ VXT_XFER,SIZEOF(char *) * (short int)xf_job,VXT_END,
+/* 2670 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_kill,
+/* 2678 */ VXT_END,
+/* 2679 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_killalias,
+/* 2687 */ VXT_END,
+/* 2688 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killall,VXT_END,
+/* 2694 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killaliasall,VXT_END,
+/* 2700 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2708 */ 3,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_labaddr,VXI_MOVL,VXT_REG,
+/* 2716 */ 0x50,VXT_ADDR,0,VXT_END,
+/* 2720 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckdecr,
+/* 2728 */ VXT_END,
+/* 2729 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckincr,
+/* 2737 */ VXT_END,
+/* 2738 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
/* 2744 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
/* 2750 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
-/* 2756 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
-/* 2762 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2770 */ SIZEOF(char *) * (short int)xf_linefetch,VXT_END,
-/* 2772 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_linestart,VXT_END,
-/* 2776 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 2784 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
-/* 2791 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_lkinit,VXT_END,
-/* 2797 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 2805 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
-/* 2812 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lock,
-/* 2820 */ VXT_END,
-/* 2821 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 2829 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvpatwrite,VXT_END,
-/* 2836 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwithdraw,
-/* 2844 */ VXT_END,
-/* 2845 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 2853 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwrite,VXT_END,
-/* 2857 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2865 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_flt_mod,VXT_END,
-/* 2872 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2880 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_mul,VXT_END,
-/* 2887 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,1,
-/* 2895 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_neg,VXT_END,
-/* 2901 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newintrinsic,VXT_END,
-/* 2908 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newvar,VXT_END,
-/* 2915 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_nullexp,VXI_MOVL,VXT_REG,0x50,
-/* 2923 */ VXT_ADDR,0,VXT_END,
-/* 2926 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 2934 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_numcmp,VXT_END,
-/* 2940 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
-/* 2948 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 2956 */ VXT_LIT,4,VXT_XFER,SIZEOF(char *) * (short int)xf_open,VXT_END,
-/* 2961 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 2969 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_pattern,VXT_END,
-/* 2975 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2983 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnpopulation,VXT_END,
-/* 2990 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2998 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpopulation,VXT_END,
-/* 3005 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_putindx,
-/* 3013 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 3019 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 3027 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_rdone,VXT_END,
-/* 3034 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 3042 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_read,VXT_END,
-/* 3049 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 3057 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,3,VXT_XFER,
-/* 3065 */ SIZEOF(char *) * (short int)xf_readfl,VXT_END,
-/* 3067 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_END,
-/* 3071 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_ret,VXT_END,
-/* 3075 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVL,VXT_VAL,2,
-/* 3083 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_retarg,VXT_END,
-/* 3089 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3097 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
-/* 3105 */ VXT_END,
-/* 3106 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3114 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
-/* 3122 */ VXT_END,
-/* 3123 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 3131 */ SIZEOF(char *) * (short int)xf_rterror,VXT_END,
-/* 3133 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3141 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setals2als,VXT_END,
-/* 3145 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3153 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsin2alsct,VXT_END,
-/* 3157 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3165 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsctin2als,VXT_END,
-/* 3169 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3177 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsct2alsct,VXT_END,
-/* 3181 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3189 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2als,VXT_END,
-/* 3193 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3201 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2alsct,VXT_END,
-/* 3205 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3213 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3221 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setextract,VXT_END,
-/* 3226 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3234 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3242 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setp1,VXT_END,
-/* 3247 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3255 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 3263 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setpiece,VXT_END,
-/* 3271 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3279 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3287 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzextract,VXT_END,
-/* 3292 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3300 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3308 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzp1,VXT_END,
-/* 3313 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3321 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 3329 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setzpiece,VXT_END,
-/* 3337 */ VXI_BISB2,VXT_LIT,1,VXT_REG,0x5A,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_dt_true,
-/* 3345 */ VXT_END,
-/* 3346 */ VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3354 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,3,VXI_CALLS,
-/* 3362 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzbrk,VXT_END,
-/* 3367 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 3375 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sorts_after,VXT_END,
-/* 3381 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_srchindx,
-/* 3389 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 3395 */ VXI_MOVAB,VXT_VAL,2,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,1,
-/* 3403 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
-/* 3409 */ VXI_MOVC3,VXT_LIT,16,VXT_VAL,2,VXT_VAL,1,VXT_END,
-/* 3417 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,0,
-/* 3425 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
-/* 3431 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3439 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_sub,VXT_END,
-/* 3446 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3454 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svget,VXT_END,
-/* 3458 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 3466 */ SIZEOF(char *) * (short int)xf_psvput,VXT_END,
-/* 3468 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3476 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svput,VXT_END,
-/* 3480 */ VXI_MOVL,VXT_REG,0x50,VXT_REG,0x5A,VXT_END,
-/* 3486 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tcommit,VXT_END,
-/* 3490 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trollback,VXT_END,
-/* 3497 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trestart,VXT_END,
-/* 3504 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3512 */ 2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tstart,VXT_END,
-/* 3520 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_unlock,VXT_END,
-/* 3526 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3534 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_use,VXT_END,
-/* 3538 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_view,
-/* 3546 */ VXT_END,
-/* 3547 */ VXI_CMPL,VXT_VAL,1,VXT_VAL,2,VXT_END,
-/* 3553 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_write,
-/* 3561 */ VXT_END,
-/* 3562 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wteol,
-/* 3570 */ VXT_END,
-/* 3571 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_wtff,VXT_END,
-/* 3577 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wtone,
-/* 3585 */ VXT_END,
-/* 3586 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wttab,
-/* 3594 */ VXT_END,
-/* 3595 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_xkill,
-/* 3603 */ VXT_END,
-/* 3604 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 3612 */ SIZEOF(char *) * (short int)xf_xnew,VXT_END,
-/* 3614 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zallocate,
-/* 3622 */ VXT_END,
-/* 3623 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3631 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zattach,VXT_END,
-/* 3635 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3643 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zcompile,VXT_END,
-/* 3647 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
-/* 3651 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zdeallocate,
-/* 3659 */ VXT_END,
-/* 3660 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3668 */ 1,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_zedit,VXT_END,
-/* 3675 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zg1,VXT_END,
-/* 3682 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHL,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
-/* 3690 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zgoto,VXT_END,
-/* 3698 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zhalt,
-/* 3706 */ VXT_END,
-/* 3707 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3715 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zhelp,VXT_END,
-/* 3719 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3727 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zlink,VXT_END,
-/* 3731 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 3739 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zmess,VXT_END,
-/* 3743 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zprevious,
-/* 3751 */ VXT_END,
-/* 3752 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,
-/* 3760 */ 4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 3768 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_zprint,VXT_END,
-/* 3776 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,
-/* 3784 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
-/* 3792 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
-/* 3794 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3802 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
-/* 3810 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
-/* 3812 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3820 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
-/* 3827 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3835 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
-/* 3842 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3850 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zsystem,VXT_END,
-/* 3854 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_ztcommit,
-/* 3862 */ VXT_END,
-/* 3863 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztstart,VXT_END,
-/* 3869 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_merge,VXT_END,
-/* 3875 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3883 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
-/* 3887 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3895 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
-/* 3899 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,
-/* 3907 */ SIZEOF(char *) * (short int)xf_indmerge,VXT_END,
-/* 3909 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_m_srchindx,
-/* 3917 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 3923 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3931 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3939 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzatransform,VXT_END,
-/* 3944 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3952 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzconvert2,VXT_END,
-/* 3959 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3967 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 3975 */ SIZEOF(char *) * (short int)xf_fnzconvert3,VXT_END,
-/* 3977 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3985 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 3993 */ SIZEOF(char *) * (short int)xf_fnzcollate,VXT_END,
-/* 3995 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 4003 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 4011 */ SIZEOF(char *) * (short int)xf_fnzsubstr,VXT_END,
-/* 4013 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4021 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwidth,VXT_END,
-/* 4025 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztrigger,VXT_END,
-/* 4031 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zwritesvn,
-/* 4039 */ VXT_END,
-/* 4040 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 4048 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwrite,VXT_END,
-/* 4055 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_igetdst,VXI_MOVL,VXT_REG,0x50,
-/* 4063 */ VXT_ADDR,0,VXT_END,
-/* 4066 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4074 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget1,VXT_END,
-/* 4078 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnpop,
-/* 4086 */ VXT_END,
-/* 4087 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnslot,
-/* 4095 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 4101 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 4109 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indsavglvn,VXT_END,
-/* 4114 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 4122 */ SIZEOF(char *) * (short int)xf_indsavlvn,VXT_END,
-/* 4124 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4132 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshlvn,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
-/* 4140 */ VXT_END,
-/* 4141 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 4149 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_savgvn,VXT_END,
-/* 4153 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_savlvn,
-/* 4161 */ VXT_END,
-/* 4162 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4170 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_shareslot,VXT_END,
-/* 4174 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4182 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_stoglvn,VXT_END,
-/* 4186 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4194 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshgvn,VXT_END,
-/* 4198 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 4206 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname2,VXT_END,
-/* 4213 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 4221 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget2,VXT_END,
-/* 4225 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_indmerge2,
-/* 4233 */ VXT_END,
-/* 4234 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 4242 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 4250 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpeek,VXT_END,
-/* 4255 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4263 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsyslog,VXT_END,
-/* 4267 */ 366,380,373,2477,2485,2481,2744,2756,
-/* 4275 */ 2750,0,0,0,487,463,454,0,
-/* 4283 */ 0,450,1986,2024,2005,2625,2640,2631,
-/* 4291 */ 2601,2616,2607,2493,2504,2497,2583,2594,
-/* 4299 */ 2587,2529,2540,2533,2547,2558,2551,2565,
-/* 4307 */ 2576,2569,2511,2522,2515,1965,1979,1972,
-/* 4315 */ 387,401,394};
+/* 2756 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2764 */ SIZEOF(char *) * (short int)xf_linefetch,VXT_END,
+/* 2766 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_linestart,VXT_END,
+/* 2770 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 2778 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
+/* 2785 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_lkinit,VXT_END,
+/* 2791 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 2799 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
+/* 2806 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lock,
+/* 2814 */ VXT_END,
+/* 2815 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 2823 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvpatwrite,VXT_END,
+/* 2830 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwithdraw,
+/* 2838 */ VXT_END,
+/* 2839 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 2847 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwrite,VXT_END,
+/* 2851 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2859 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_flt_mod,VXT_END,
+/* 2866 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2874 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_mul,VXT_END,
+/* 2881 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,1,
+/* 2889 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_neg,VXT_END,
+/* 2895 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newintrinsic,VXT_END,
+/* 2902 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newvar,VXT_END,
+/* 2909 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_nullexp,VXI_MOVL,VXT_REG,0x50,
+/* 2917 */ VXT_ADDR,0,VXT_END,
+/* 2920 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 2928 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_numcmp,VXT_END,
+/* 2934 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
+/* 2942 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 2950 */ VXT_LIT,4,VXT_XFER,SIZEOF(char *) * (short int)xf_open,VXT_END,
+/* 2955 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 2963 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_pattern,VXT_END,
+/* 2969 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2977 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnpopulation,VXT_END,
+/* 2984 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2992 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpopulation,VXT_END,
+/* 2999 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_putindx,
+/* 3007 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 3013 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 3021 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_rdone,VXT_END,
+/* 3028 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 3036 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_read,VXT_END,
+/* 3043 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 3051 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 3059 */ SIZEOF(char *) * (short int)xf_readfl,VXT_END,
+/* 3061 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_END,
+/* 3065 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_ret,VXT_END,
+/* 3069 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVL,VXT_VAL,2,
+/* 3077 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_retarg,VXT_END,
+/* 3083 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3091 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
+/* 3099 */ VXT_END,
+/* 3100 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3108 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
+/* 3116 */ VXT_END,
+/* 3117 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 3125 */ SIZEOF(char *) * (short int)xf_rterror,VXT_END,
+/* 3127 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3135 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setals2als,VXT_END,
+/* 3139 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3147 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsin2alsct,VXT_END,
+/* 3151 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3159 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsctin2als,VXT_END,
+/* 3163 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3171 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsct2alsct,VXT_END,
+/* 3175 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3183 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2als,VXT_END,
+/* 3187 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3195 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2alsct,VXT_END,
+/* 3199 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3207 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3215 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setextract,VXT_END,
+/* 3220 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3228 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3236 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setp1,VXT_END,
+/* 3241 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3249 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 3257 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setpiece,VXT_END,
+/* 3265 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3273 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3281 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzextract,VXT_END,
+/* 3286 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3294 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3302 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzp1,VXT_END,
+/* 3307 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3315 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 3323 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setzpiece,VXT_END,
+/* 3331 */ VXI_BISB2,VXT_LIT,1,VXT_REG,0x5A,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_dt_true,
+/* 3339 */ VXT_END,
+/* 3340 */ VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3348 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,3,VXI_CALLS,
+/* 3356 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzbrk,VXT_END,
+/* 3361 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 3369 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sorts_after,VXT_END,
+/* 3375 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_srchindx,
+/* 3383 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 3389 */ VXI_MOVAB,VXT_VAL,2,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,1,
+/* 3397 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
+/* 3403 */ VXI_MOVC3,VXT_LIT,16,VXT_VAL,2,VXT_VAL,1,VXT_END,
+/* 3411 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,0,
+/* 3419 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
+/* 3425 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3433 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_sub,VXT_END,
+/* 3440 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3448 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svget,VXT_END,
+/* 3452 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 3460 */ SIZEOF(char *) * (short int)xf_psvput,VXT_END,
+/* 3462 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3470 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svput,VXT_END,
+/* 3474 */ VXI_MOVL,VXT_REG,0x50,VXT_REG,0x5A,VXT_END,
+/* 3480 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tcommit,VXT_END,
+/* 3484 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trollback,VXT_END,
+/* 3491 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trestart,VXT_END,
+/* 3498 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3506 */ 2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tstart,VXT_END,
+/* 3514 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_unlock,VXT_END,
+/* 3520 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3528 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_use,VXT_END,
+/* 3532 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_view,
+/* 3540 */ VXT_END,
+/* 3541 */ VXI_CMPL,VXT_VAL,1,VXT_VAL,2,VXT_END,
+/* 3547 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_write,
+/* 3555 */ VXT_END,
+/* 3556 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wteol,
+/* 3564 */ VXT_END,
+/* 3565 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_wtff,VXT_END,
+/* 3571 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wtone,
+/* 3579 */ VXT_END,
+/* 3580 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wttab,
+/* 3588 */ VXT_END,
+/* 3589 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_xkill,
+/* 3597 */ VXT_END,
+/* 3598 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 3606 */ SIZEOF(char *) * (short int)xf_xnew,VXT_END,
+/* 3608 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zallocate,
+/* 3616 */ VXT_END,
+/* 3617 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3625 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zattach,VXT_END,
+/* 3629 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3637 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zcompile,VXT_END,
+/* 3641 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
+/* 3645 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zdeallocate,
+/* 3653 */ VXT_END,
+/* 3654 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3662 */ 1,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_zedit,VXT_END,
+/* 3669 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zg1,VXT_END,
+/* 3676 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHL,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
+/* 3684 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zgoto,VXT_END,
+/* 3692 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3700 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zhalt,VXT_END,
+/* 3704 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3712 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zhelp,VXT_END,
+/* 3716 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3724 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zlink,VXT_END,
+/* 3728 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 3736 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zmess,VXT_END,
+/* 3740 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zprevious,
+/* 3748 */ VXT_END,
+/* 3749 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,
+/* 3757 */ 4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 3765 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_zprint,VXT_END,
+/* 3773 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,
+/* 3781 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 3789 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
+/* 3791 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3799 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 3807 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
+/* 3809 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3817 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
+/* 3824 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3832 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
+/* 3839 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3847 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zsystem,VXT_END,
+/* 3851 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_ztcommit,
+/* 3859 */ VXT_END,
+/* 3860 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztstart,VXT_END,
+/* 3866 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_merge,VXT_END,
+/* 3872 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3880 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
+/* 3884 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3892 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
+/* 3896 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,
+/* 3904 */ SIZEOF(char *) * (short int)xf_indmerge,VXT_END,
+/* 3906 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_m_srchindx,
+/* 3914 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 3920 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3928 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3936 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzatransform,VXT_END,
+/* 3941 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3949 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzconvert2,VXT_END,
+/* 3956 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3964 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 3972 */ SIZEOF(char *) * (short int)xf_fnzconvert3,VXT_END,
+/* 3974 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3982 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 3990 */ SIZEOF(char *) * (short int)xf_fnzcollate,VXT_END,
+/* 3992 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 4000 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 4008 */ SIZEOF(char *) * (short int)xf_fnzsubstr,VXT_END,
+/* 4010 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4018 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwidth,VXT_END,
+/* 4022 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztrigger,VXT_END,
+/* 4028 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zwritesvn,
+/* 4036 */ VXT_END,
+/* 4037 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 4045 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwrite,VXT_END,
+/* 4052 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_igetdst,VXI_MOVL,VXT_REG,0x50,
+/* 4060 */ VXT_ADDR,0,VXT_END,
+/* 4063 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4071 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget1,VXT_END,
+/* 4075 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnpop,
+/* 4083 */ VXT_END,
+/* 4084 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnslot,
+/* 4092 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 4098 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 4106 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indsavglvn,VXT_END,
+/* 4111 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 4119 */ SIZEOF(char *) * (short int)xf_indsavlvn,VXT_END,
+/* 4121 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4129 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshlvn,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
+/* 4137 */ VXT_END,
+/* 4138 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 4146 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_savgvn,VXT_END,
+/* 4150 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_savlvn,
+/* 4158 */ VXT_END,
+/* 4159 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4167 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_shareslot,VXT_END,
+/* 4171 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4179 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_stoglvn,VXT_END,
+/* 4183 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4191 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshgvn,VXT_END,
+/* 4195 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 4203 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname2,VXT_END,
+/* 4210 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 4218 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget2,VXT_END,
+/* 4222 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_indmerge2,
+/* 4230 */ VXT_END,
+/* 4231 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 4239 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 4247 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpeek,VXT_END,
+/* 4252 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4260 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsyslog,VXT_END,
+/* 4264 */ 366,380,373,2471,2479,2475,2738,2750,
+/* 4272 */ 2744,0,0,0,487,463,454,0,
+/* 4280 */ 0,450,1986,2024,2005,2619,2634,2625,
+/* 4288 */ 2595,2610,2601,2487,2498,2491,2577,2588,
+/* 4296 */ 2581,2523,2534,2527,2541,2552,2545,2559,
+/* 4304 */ 2570,2563,2505,2516,2509,1965,1979,1972,
+/* 4312 */ 387,401,394};
diff --git a/sr_linux/gtm_env_sp.csh b/sr_linux/gtm_env_sp.csh
index e5489a6..b32c012 100755
--- a/sr_linux/gtm_env_sp.csh
+++ b/sr_linux/gtm_env_sp.csh
@@ -184,7 +184,7 @@ if ( $?gtm_version_change == "1" ) then
endif
# If our compiler happens not to support --help=warnings, the following will produce junk, but it is
# unlikely that the junk will match the warning options of interest, so it shouldn't be a problem.
- set -f supported_warnings = `cc --help=warnings | & awk '$1 ~ /^-/ {print $1}'`
+ set -f supported_warnings = `cc --help=warnings | & awk '$1 ~ /^-[^=]*$/ {print $1}'`
foreach w ($desired_warnings)
# Add the warning to a copy of the supported list, discarding duplicates.
set -f tmp_warnings = ($supported_warnings $w)
diff --git a/sr_linux/platform.cmake b/sr_linux/platform.cmake
index 94579ee..50e33bb 100644
--- a/sr_linux/platform.cmake
+++ b/sr_linux/platform.cmake
@@ -1,6 +1,6 @@
#################################################################
# #
-# Copyright (c) 2013-2016 Fidelity National Information #
+# Copyright (c) 2013-2017 Fidelity National Information #
# Services, Inc. and/or its subsidiaries. All rights reserved. #
# #
# This source code contains the intellectual property #
@@ -69,6 +69,7 @@ set(gtm_link "-Wl,-u,gtm_filename_to_id -Wl,-u,gtm_zstatus -Wl,--version-script
set(gtm_dep "${GTM_BINARY_DIR}/gtmexe_symbols.export")
set(libgtmshr_link "-Wl,-u,gtm_ci -Wl,-u,gtm_filename_to_id -Wl,-u,gtm_is_main_thread")
+set(libgtmshr_link "${libgtmshr_link} -Wl,-u,accumulate -Wl,-u,is_big_endian -Wl,-u,to_ulong")
set(libgtmshr_link "${libgtmshr_link} -Wl,--version-script,\"${GTM_BINARY_DIR}/gtmshr_symbols.export\"")
set(libgtmshr_dep "${GTM_BINARY_DIR}/gtmexe_symbols.export")
diff --git a/sr_linux/release_name.h b/sr_linux/release_name.h
index 0764a5a..0f96979 100644
--- a/sr_linux/release_name.h
+++ b/sr_linux/release_name.h
@@ -12,15 +12,15 @@
#ifndef GTM_RELEASE_NAME
#ifdef __CYGWIN__
-#define GTM_RELEASE_NAME "GT.M V6.3-002 CYGWIN x86"
+#define GTM_RELEASE_NAME "GT.M V6.3-003A CYGWIN x86"
#elif defined(__ia64)
-#define GTM_RELEASE_NAME "GT.M V6.3-002 Linux IA64"
+#define GTM_RELEASE_NAME "GT.M V6.3-003A Linux IA64"
#elif defined(__x86_64__)
-#define GTM_RELEASE_NAME "GT.M V6.3-002 Linux x86_64"
+#define GTM_RELEASE_NAME "GT.M V6.3-003A Linux x86_64"
#elif defined(__s390__)
-#define GTM_RELEASE_NAME "GT.M V6.3-002 Linux S390X"
+#define GTM_RELEASE_NAME "GT.M V6.3-003A Linux S390X"
#else
-#define GTM_RELEASE_NAME "GT.M V6.3-002 Linux x86"
+#define GTM_RELEASE_NAME "GT.M V6.3-003A Linux x86"
#endif
#endif
#define GTM_PRODUCT "GT.M"
diff --git a/sr_port/aio_shim.h b/sr_port/aio_shim.h
index b8318f7..09c884d 100644
--- a/sr_port/aio_shim.h
+++ b/sr_port/aio_shim.h
@@ -23,7 +23,15 @@
#elif !defined(USE_LIBAIO) /* USE_NOAIO */
#define AIO_SHIM_WRITE(UNUSED, AIOCBP, RET) MBSTART { RET = aio_write(AIOCBP); } MBEND
#define AIO_SHIM_RETURN(AIOCBP, RET) MBSTART { RET = aio_return(AIOCBP);} MBEND
-#define AIO_SHIM_ERROR(AIOCBP, RET) MBSTART { RET = aio_error(AIOCBP); } MBEND
+#define AIO_SHIM_ERROR(AIOCBP, RET) \
+MBSTART { \
+ intrpt_state_t prev_intrpt_state; \
+ \
+ /* Defer interrupts around aio_error() to prevent pthread mutex deadlock. */ \
+ DEFER_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+ RET = aio_error(AIOCBP); \
+ ENABLE_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+} MBEND
#define SIGNAL_ERROR_IN_WORKER_THREAD(gdi, err_str, errno) /* no-op, N/A */
#define CHECK_ERROR_IN_WORKER_THREAD(reg, udi) /* no-op, N/A */
diff --git a/sr_port/alloc_reg.c b/sr_port/alloc_reg.c
index 43ddbbe..bfe0b5e 100755
--- a/sr_port/alloc_reg.c
+++ b/sr_port/alloc_reg.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -23,6 +23,7 @@
#include "opcode.h"
#include "alloc_reg.h"
#include "cdbg_dump.h"
+#include "fullbool.h"
GBLDEF int4 sa_temps[VALUED_REF_TYPES];
GBLDEF int4 sa_temps_offset[VALUED_REF_TYPES];
@@ -59,7 +60,9 @@ void alloc_reg(void)
int r, c, temphigh[VALUED_REF_TYPES];
unsigned int oct;
int4 size;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
memset(&tempcont[0][0], 0, SIZEOF(tempcont));
memset(&temphigh[0], -1, SIZEOF(temphigh));
temphigh[TVAR_REF] = mvmax - 1;
@@ -97,16 +100,18 @@ void alloc_reg(void)
COMPDBG(PRINTF(" ** Converting triple to NOOP (rsn 2) **\n"););
continue; /* continue, because 'normal' NOOP continues from this switch */
}
-# ifndef DEBUG
- break;
-# endif
case OC_LINEFETCH:
-# ifdef DEBUG
+ /* this code is a sad hack - it used to assert that there was no temp leak, but in non-short-circuit
+ * mode there can be a leak, we weren't finding it and the customers were justifiably impatient
+ * so the following code now makes the leak go away
+ */
for (c = temphigh[TVAL_REF]; 0 <= c; c--)
- assert(0 == tempcont[TVAL_REF][c]); /* check against leaking TVAL temps */
+ {
+ assert((GTM_BOOL != TREF(gtm_fullbool)) || (0 == tempcont[TVAL_REF][c]));
+ tempcont[TVAL_REF][c] = 0; /* prevent leaking TVAL temps */
+ }
if (OC_LINESTART == opc)
break;
-# endif
case OC_FETCH:
assert((TRIP_REF == x->operand[0].oprclass) && (OC_ILIT == x->operand[0].oprval.tref->opcode));
if (x->operand[0].oprval.tref->operand[0].oprval.ilit == mvmax)
@@ -148,6 +153,8 @@ void alloc_reg(void)
COMPDBG(PRINTF(" *** OC_PASSTHRU opcode being NOOP'd\n"););
remove_backptr(x, &x->operand[0], tempcont);
x->opcode = OC_NOOP;
+ x->operand[0].oprclass = NO_REF;
+ assert(NO_REF == x->operand[1].oprclass);
continue;
}
if (NO_REF == (dest_type = x->destination.oprclass)) /* Note assignment */
@@ -230,13 +237,8 @@ void remove_backptr(triple *curtrip, oprtype *opnd, char (*tempcont)[MAX_TEMP_CO
int r;
assert(TRIP_REF == opnd->oprclass);
+ assert(OC_PASSTHRU != opnd->oprval.tref->opcode);
ref = opnd->oprval.tref;
- while (OC_PASSTHRU == opnd->oprval.tref->opcode)
- {
- ref = ref->operand[0].oprval.tref;
- opnd = &ref->operand[0];
- assert(TRIP_REF == opnd->oprclass);
- }
r = ref->destination.oprclass;
if (NO_REF != r)
{
diff --git a/sr_port/anticipatory_freeze.h b/sr_port/anticipatory_freeze.h
index 365a043..003ab32 100644
--- a/sr_port/anticipatory_freeze.h
+++ b/sr_port/anticipatory_freeze.h
@@ -9,10 +9,8 @@
* the license, please stop and do not read further. *
* *
****************************************************************/
-#ifndef _ANTICIPATORY_FREEZE_H
-#define _ANTICIPATORY_FREEZE_H
-
-#ifdef UNIX
+#ifndef ANTICIPATORY_FREEZE_H
+#define ANTICIPATORY_FREEZE_H
#include "gtm_time.h" /* needed for GET_CUR_TIME */
#include "gdsroot.h"
@@ -38,7 +36,7 @@ typedef void (*set_anticipatory_freeze_t)(sgmnt_addrs *csa, int msg_id);
GBLREF is_anticipatory_freeze_needed_t is_anticipatory_freeze_needed_fnptr;
GBLREF set_anticipatory_freeze_t set_anticipatory_freeze_fnptr;
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
GBLREF boolean_t mupip_jnl_recover;
#ifdef DEBUG
GBLREF uint4 lseekwrite_target;
@@ -62,13 +60,15 @@ error_def(ERR_TEXT);
} \
}
-#define CHECK_IF_FREEZE_ON_ERROR_NEEDED(CSA, MSG_ID, FREEZE_NEEDED, FREEZE_MSG_ID) \
+#define CHECK_IF_FREEZE_ON_ERROR_NEEDED(CSA, MSG_ID, FREEZE_NEEDED, FREEZE_MSG_ID, LCL_JNLPOOL) \
{ \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
\
- if (!FREEZE_NEEDED && CUSTOM_ERRORS_LOADED && (NULL != is_anticipatory_freeze_needed_fnptr)) \
+ if (!FREEZE_NEEDED && CSA && CUSTOM_ERRORS_LOADED_CSA(CSA, LCL_JNLPOOL) \
+ && (NULL != is_anticipatory_freeze_needed_fnptr)) \
{ /* NOT gtmsecshr */ \
- if (IS_REPL_INST_UNFROZEN && (*is_anticipatory_freeze_needed_fnptr)((sgmnt_addrs *)CSA, MSG_ID)) \
+ if (IS_REPL_INST_UNFROZEN_JPL(LCL_JNLPOOL) \
+ && (*is_anticipatory_freeze_needed_fnptr)((sgmnt_addrs *)CSA, MSG_ID)) \
{ \
FREEZE_NEEDED = TRUE; \
FREEZE_MSG_ID = MSG_ID; \
@@ -76,38 +76,37 @@ error_def(ERR_TEXT);
} \
}
-#define FREEZE_INSTANCE_IF_NEEDED(CSA, FREEZE_NEEDED, FREEZE_MSG_ID) \
+#define FREEZE_INSTANCE_IF_NEEDED(CSA, FREEZE_NEEDED, FREEZE_MSG_ID, LCL_JNLPOOL) \
{ \
- GBLREF jnlpool_addrs jnlpool; \
- \
if (FREEZE_NEEDED) \
{ \
assert(NULL != set_anticipatory_freeze_fnptr); \
(*set_anticipatory_freeze_fnptr)((sgmnt_addrs *)CSA, FREEZE_MSG_ID); \
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_REPLINSTFROZEN, 1, \
- jnlpool.repl_inst_filehdr->inst_info.this_instname); \
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool.jnlpool_ctl->freeze_comment); \
+ LCL_JNLPOOL->repl_inst_filehdr->inst_info.this_instname); \
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, \
+ LCL_JNLPOOL->jnlpool_ctl->freeze_comment); \
} \
}
#define CLEAR_ANTICIPATORY_FREEZE(FREEZE_CLEARED) \
{ \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
\
if (IS_REPL_INST_FROZEN) \
{ \
- jnlpool.jnlpool_ctl->freeze = 0; \
+ jnlpool->jnlpool_ctl->freeze = 0; \
FREEZE_CLEARED = TRUE; \
} \
}
#define REPORT_INSTANCE_UNFROZEN(FREEZE_CLEARED) \
{ \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
\
if (FREEZE_CLEARED) \
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_REPLINSTUNFROZEN, 1, \
- jnlpool.repl_inst_filehdr->inst_info.this_instname); \
+ jnlpool->repl_inst_filehdr->inst_info.this_instname); \
}
#define AFREEZE_MASK 0x01
@@ -119,9 +118,17 @@ error_def(ERR_TEXT);
* Use INST_FREEZE_ON_ERROR_POLICY to select alternative journal pool attach/detach behavior.
*/
#define CUSTOM_ERRORS_AVAILABLE (0 != (TREF(gtm_custom_errors)).len)
-#define CUSTOM_ERRORS_LOADED ((NULL != jnlpool.jnlpool_ctl) \
- && jnlpool.jnlpool_ctl->instfreeze_environ_inited)
-#define INST_FREEZE_ON_ERROR_POLICY (CUSTOM_ERRORS_AVAILABLE || CUSTOM_ERRORS_LOADED)
+#define CUSTOM_ERRORS_LOADED ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl) \
+ && jnlpool->jnlpool_ctl->instfreeze_environ_inited)
+#define CUSTOM_ERRORS_LOADED_CSA(CSA, LCL_JNLPOOL) \
+( \
+ (LCL_JNLPOOL = JNLPOOL_FROM((sgmnt_addrs *)CSA)) \
+ && (NULL != LCL_JNLPOOL->jnlpool_ctl) \
+ && LCL_JNLPOOL->jnlpool_ctl->instfreeze_environ_inited \
+)
+#define INST_FREEZE_ON_ERROR_POLICY (CUSTOM_ERRORS_AVAILABLE || CUSTOM_ERRORS_LOADED)
+#define INST_FREEZE_ON_ERROR_POLICY_CSA(CSA, LCL_JNLPOOL) (CUSTOM_ERRORS_AVAILABLE \
+ || CUSTOM_ERRORS_LOADED_CSA(CSA, LCL_JNLPOOL))
/* INSTANCE_FREEZE_HONORED determines whether operations on a particular database can trigger an instance freeze.
* INST_FREEZE_ON_ERROR_ENABLED() determines whether operations on a particular database can trigger an instance freeze in the
@@ -132,26 +139,32 @@ error_def(ERR_TEXT);
* trigger an instance freeze.
* Note that it is possible for these macros to be invoked while in "gvcst_cre_autoDB" in which case CSA->nl would be NULL
* hence the check for NULL before trying to access onln_rlbk_pid.
+ * These macros set LCL_JNLPOOL to the assocaited jnlpool if TRUE otherwise to NULL
*/
-#define INSTANCE_FREEZE_HONORED(CSA) (DBG_ASSERT(NULL != CSA) \
- ((NULL != jnlpool.jnlpool_ctl) \
+#define INSTANCE_FREEZE_HONORED(CSA, LCL_JNLPOOL) (DBG_ASSERT((NULL != CSA)) \
+ (LCL_JNLPOOL = JNLPOOL_FROM((sgmnt_addrs *)CSA)) \
+ && ((NULL != LCL_JNLPOOL->jnlpool_ctl) \
&& ((REPL_ALLOWED(((sgmnt_addrs *)CSA)->hdr)) \
|| mupip_jnl_recover /* recover or rollback */ \
|| (NULL != ((sgmnt_addrs *)CSA)->nl) \
&& (((sgmnt_addrs *)CSA)->nl->onln_rlbk_pid))))
-#define INST_FREEZE_ON_ERROR_ENABLED(CSA) (INSTANCE_FREEZE_HONORED(CSA) \
- && CUSTOM_ERRORS_LOADED \
+#define INST_FREEZE_ON_ERROR_ENABLED(CSA, LCL_JNLPOOL) (INSTANCE_FREEZE_HONORED(CSA, LCL_JNLPOOL) \
+ && CUSTOM_ERRORS_LOADED_CSA(CSA, LCL_JNLPOOL) \
&& (((sgmnt_addrs *)CSA)->hdr->freeze_on_fail))
-#define INST_FREEZE_ON_MSG_ENABLED(CSA, MSG) (INST_FREEZE_ON_ERROR_ENABLED(CSA) \
+#define INST_FREEZE_ON_MSG_ENABLED(CSA, MSG, LCL_JNLPOOL) (INST_FREEZE_ON_ERROR_ENABLED(CSA, LCL_JNLPOOL) \
&& (NULL != is_anticipatory_freeze_needed_fnptr) \
&& (*is_anticipatory_freeze_needed_fnptr)(CSA, MSG))
-#define INST_FREEZE_ON_NOSPC_ENABLED(CSA) INST_FREEZE_ON_MSG_ENABLED(CSA, ERR_DSKNOSPCAVAIL)
+#define INST_FREEZE_ON_NOSPC_ENABLED(CSA, LCL_JNLPOOL) INST_FREEZE_ON_MSG_ENABLED(CSA, ERR_DSKNOSPCAVAIL, LCL_JNLPOOL)
/* IS_REPL_INST_FROZEN is TRUE if we know that the instance is frozen.
* IS_REPL_INST_UNFROZEN is TRUE if we know that the instance is not frozen.
*/
-#define IS_REPL_INST_FROZEN ((NULL != jnlpool.jnlpool_ctl) && jnlpool.jnlpool_ctl->freeze)
-#define IS_REPL_INST_UNFROZEN ((NULL != jnlpool.jnlpool_ctl) && !jnlpool.jnlpool_ctl->freeze)
+#define IS_REPL_INST_FROZEN IS_REPL_INST_FROZEN_JPL(jnlpool)
+#define IS_REPL_INST_UNFROZEN IS_REPL_INST_UNFROZEN_JPL(jnlpool)
+#define IS_REPL_INST_FROZEN_JPL(JNLPOOL) ((NULL != JNLPOOL) && (NULL != JNLPOOL->jnlpool_ctl) \
+ && JNLPOOL->jnlpool_ctl->freeze)
+#define IS_REPL_INST_UNFROZEN_JPL(JNLPOOL) ((NULL != JNLPOOL) && (NULL != JNLPOOL->jnlpool_ctl) \
+ && !JNLPOOL->jnlpool_ctl->freeze)
#define INST_FROZEN_COMMENT "PID %d encountered %s; Instance frozen"
@@ -183,27 +196,28 @@ error_def(ERR_TEXT);
/* #GTM_THREAD_SAFE : The below macro (WAIT_FOR_REPL_INST_UNFREEZE) is thread-safe */
#define WAIT_FOR_REPL_INST_UNFREEZE(CSA) \
{ \
- gd_region *reg; \
- char time_str[CTIME_BEFORE_NL + 2]; /* for GET_CUR_TIME macro */ \
+ gd_region *reg; \
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INSTANCE_FREEZE_HONORED */ \
+ char time_str[CTIME_BEFORE_NL + 2]; /* for GET_CUR_TIME macro */ \
DCL_THREADGBL_ACCESS; \
\
SETUP_THREADGBL_ACCESS; \
assert(NULL != CSA); \
- if (INSTANCE_FREEZE_HONORED(CSA)) \
+ if (INSTANCE_FREEZE_HONORED(CSA, local_jnlpool)) \
{ \
reg = ((sgmnt_addrs *)CSA)->region; \
if (!IS_GTM_IMAGE) \
{ \
GET_CUR_TIME(time_str); \
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_MUINSTFROZEN, 5, CTIME_BEFORE_NL, &time_str[0], \
- jnlpool.repl_inst_filehdr->inst_info.this_instname, DB_LEN_STR(reg)); \
+ local_jnlpool->repl_inst_filehdr->inst_info.this_instname, DB_LEN_STR(reg)); \
} \
- WAIT_FOR_REPL_INST_UNFREEZE_NOCSA; \
+ WAIT_FOR_REPL_INST_UNFREEZE_NOCSA_JPL(local_jnlpool); \
if (!IS_GTM_IMAGE) \
{ \
GET_CUR_TIME(time_str); \
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_MUINSTUNFROZEN, 5, CTIME_BEFORE_NL, &time_str[0], \
- jnlpool.repl_inst_filehdr->inst_info.this_instname, DB_LEN_STR(reg)); \
+ local_jnlpool->repl_inst_filehdr->inst_info.this_instname, DB_LEN_STR(reg)); \
} \
} \
}
@@ -214,10 +228,12 @@ error_def(ERR_TEXT);
/* #GTM_THREAD_SAFE : The below macro (WAIT_FOR_REPL_INST_UNFREEZE_SAFE) is thread-safe */
#define WAIT_FOR_REPL_INST_UNFREEZE_SAFE(CSA) \
{ \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
+ jnlpool_addrs_ptr_t local_jnlpool; \
\
assert(NULL != CSA); \
- if (IS_REPL_INST_FROZEN) \
+ local_jnlpool = JNLPOOL_FROM(CSA); \
+ if (IS_REPL_INST_FROZEN_JPL(local_jnlpool)) \
WAIT_FOR_REPL_INST_UNFREEZE(CSA); \
}
@@ -225,13 +241,17 @@ error_def(ERR_TEXT);
/* #GTM_THREAD_SAFE : The below macro (WAIT_FOR_REPL_INST_UNFREEZE_NOCSA) is thread-safe */
#define WAIT_FOR_REPL_INST_UNFREEZE_NOCSA \
{ \
- GBLREF jnlpool_addrs jnlpool; \
- GBLREF int4 exit_state; \
- GBLREF int4 exi_condition; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
+ WAIT_FOR_REPL_INST_UNFREEZE_NOCSA_JPL(jnlpool); \
+}
+#define WAIT_FOR_REPL_INST_UNFREEZE_NOCSA_JPL(JPL) \
+{ \
+ GBLREF int4 exit_state; \
+ GBLREF int4 exi_condition; \
\
- assert(NULL != jnlpool.jnlpool_ctl); \
+ assert((NULL != JPL) && (NULL != JPL->jnlpool_ctl)); \
/* If this region is not replicated, do not care for instance freezes */ \
- while (jnlpool.jnlpool_ctl->freeze) \
+ while (JPL->jnlpool_ctl->freeze) \
{ \
if (exit_state != 0) \
{ \
@@ -244,7 +264,7 @@ error_def(ERR_TEXT);
}
#define WAIT_FOR_REPL_INST_UNFREEZE_NOCSA_SAFE \
{ \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
\
if (IS_REPL_INST_FROZEN) \
WAIT_FOR_REPL_INST_UNFREEZE_NOCSA; \
@@ -256,36 +276,42 @@ error_def(ERR_TEXT);
* GTM_REPL_INST_FSYNC is different in that we currently don't care about instance freeze for replication
* instance file writes.
*/
-#define GTM_DB_FSYNC(CSA, FD, RC) \
-{ \
- GBLREF jnlpool_addrs jnlpool; \
- node_local_ptr_t cnl; \
- \
- assert((NULL != CSA) || (NULL == jnlpool.jnlpool_ctl)); \
- if (NULL != CSA) \
- { \
- WAIT_FOR_REPL_INST_UNFREEZE_SAFE(CSA); \
- cnl = (CSA)->nl; \
- if (NULL != cnl) \
- INCR_GVSTATS_COUNTER((CSA), cnl, n_db_fsync, 1); \
- } \
- GTM_FSYNC(FD, RC); \
+#define GTM_DB_FSYNC(CSA, FD, RC) \
+{ \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
+ jnlpool_addrs_ptr_t local_jnlpool; \
+ node_local_ptr_t cnl; \
+ sgmnt_addrs *local_csa; \
+ \
+ local_csa = CSA; \
+ local_jnlpool = JNLPOOL_FROM(local_csa); \
+ assert(local_csa || (!local_jnlpool || !local_jnlpool->jnlpool_ctl)); \
+ if (NULL != local_csa) \
+ { \
+ WAIT_FOR_REPL_INST_UNFREEZE_SAFE(local_csa); \
+ cnl = local_csa->nl; \
+ if (NULL != cnl) \
+ INCR_GVSTATS_COUNTER(local_csa, cnl, n_db_fsync, 1); \
+ } \
+ GTM_FSYNC(FD, RC); \
}
-#define GTM_JNL_FSYNC(CSA, FD, RC) \
-{ \
- GBLREF jnlpool_addrs jnlpool; \
- node_local_ptr_t cnl; \
- \
- assert((NULL != CSA) || (NULL == jnlpool.jnlpool_ctl)); \
- if (NULL != CSA) \
- { \
- WAIT_FOR_REPL_INST_UNFREEZE_SAFE(CSA); \
- cnl = (CSA)->nl; \
- if (NULL != cnl) \
- INCR_GVSTATS_COUNTER((CSA), cnl, n_jnl_fsync, 1); \
- } \
- GTM_FSYNC(FD, RC); \
+#define GTM_JNL_FSYNC(CSA, FD, RC) \
+{ \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
+ jnlpool_addrs_ptr_t local_jnlpool; \
+ node_local_ptr_t cnl; \
+ \
+ local_jnlpool = JNLPOOL_FROM(CSA); \
+ assert(CSA || (!local_jnlpool || !local_jnlpool->jnlpool_ctl)); \
+ if (NULL != CSA) \
+ { \
+ WAIT_FOR_REPL_INST_UNFREEZE_SAFE(CSA); \
+ cnl = (CSA)->nl; \
+ if (NULL != cnl) \
+ INCR_GVSTATS_COUNTER((CSA), cnl, n_jnl_fsync, 1); \
+ } \
+ GTM_FSYNC(FD, RC); \
}
#define GTM_REPL_INST_FSYNC(FD, RC) GTM_FSYNC(FD, RC)
@@ -299,7 +325,7 @@ error_def(ERR_TEXT);
#ifdef DEBUG
#define FAKE_ENOSPC(CSA, FAKE_WHICH_ENOSPC, LSEEKWRITE_TARGET, LCL_STATUS) \
MBSTART { \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
GBLREF boolean_t multi_thread_in_use; \
\
if ((NULL != CSA) && !multi_thread_in_use) /* Do not manipulate fake-enospc (global variable) while in threaded code */ \
@@ -316,7 +342,8 @@ MBSTART { \
LEN_AND_LIT("Turning on fake ENOSPC for exit status test")); \
} \
} else if (!IS_DSE_IMAGE /*DSE does not freeze so let it work as normal */ \
- && ((NULL != jnlpool.jnlpool_ctl) && (NULL != ((sgmnt_addrs *)CSA)->nl)) \
+ && (!CSA->jnlpool || (CSA->jnlpool == jnlpool)) \
+ && (jnlpool && jnlpool->jnlpool_ctl) && (NULL != ((sgmnt_addrs *)CSA)->nl) \
&& ((sgmnt_addrs *)CSA)->nl->FAKE_WHICH_ENOSPC) \
{ \
LCL_STATUS = ENOSPC; \
@@ -340,7 +367,7 @@ MBSTART { \
sgmnt_addrs *CSA_LOCAL = CSA; \
\
assert(!CSA_LOCAL || !CSA_LOCAL->region || FILE_INFO(CSA_LOCAL->region)->grabbed_access_sem \
- || !FROZEN_CHILLED(CSA_LOCAL->hdr) || !(CSA_LOCAL)->nl || FREEZE_LATCH_HELD(CSA_LOCAL)); \
+ || !(CSA_LOCAL)->nl || !FROZEN_CHILLED(CSA_LOCAL) || FREEZE_LATCH_HELD(CSA_LOCAL)); \
DBG_CHECK_DIO_ALIGNMENT(UDI, OFFSET, BUFF, SIZE); \
DO_LSEEKWRITE(CSA_LOCAL, DB_FN, FD, OFFSET, BUFF, SIZE, STATUS, fake_db_enospc, LSEEKWRITE_IS_TO_DB); \
} MBEND
@@ -376,16 +403,17 @@ MBSTART { \
/* #GTM_THREAD_SAFE : The below macro (DO_LSEEKWRITE) is thread-safe */
#define DO_LSEEKWRITE(CSA, FNPTR, FD, OFFSET, BUFF, SIZE, STATUS, FAKE_WHICH_ENOSPC, LSEEKWRITE_TARGET) \
MBSTART { \
- int lcl_status; \
+ int lcl_status; \
+ sgmnt_addrs *local_csa = CSA; \
\
- if (NULL != CSA) \
- WAIT_FOR_REPL_INST_UNFREEZE_SAFE(CSA); \
+ if (NULL != local_csa) \
+ WAIT_FOR_REPL_INST_UNFREEZE_SAFE(local_csa); \
LSEEKWRITE(FD, OFFSET, BUFF, SIZE, lcl_status); \
- FAKE_ENOSPC(CSA, FAKE_WHICH_ENOSPC, LSEEKWRITE_TARGET, lcl_status); \
+ FAKE_ENOSPC(local_csa, FAKE_WHICH_ENOSPC, LSEEKWRITE_TARGET, lcl_status); \
if (ENOSPC == lcl_status) \
{ \
- wait_for_disk_space(CSA, (char *)FNPTR, FD, (off_t)OFFSET, (char *)BUFF, (size_t)SIZE, &lcl_status); \
- assert((NULL == CSA) || (NULL == ((sgmnt_addrs *)CSA)->nl) || !((sgmnt_addrs *)CSA)->nl->FAKE_WHICH_ENOSPC \
+ wait_for_disk_space(local_csa, (char *)FNPTR, FD, (off_t)OFFSET, (char *)BUFF, (size_t)SIZE, &lcl_status); \
+ assert((NULL == local_csa) || (NULL == local_csa->nl) || !local_csa->nl->FAKE_WHICH_ENOSPC \
|| (ENOSPC != lcl_status)); \
} \
STATUS = lcl_status; \
@@ -416,15 +444,7 @@ MBSTART { \
*/
#define REPL_INST_LSEEKWRITE LSEEKWRITE
-#define REPL_INST_AVAILABLE (repl_inst_get_name((char *)replpool_id.instfilename, &full_len, SIZEOF(replpool_id.instfilename), \
- return_on_error))
-
-#else /* #ifdef UNIX */
-# define INST_FREEZE_ON_ERROR_POLICY FALSE
-# define INST_FREEZE_ON_ERROR_ENABLED(CSA) FALSE
-# define REPL_INST_AVAILABLE FALSE
-# define WAIT_FOR_REPL_INST_UNFREEZE
-# define WAIT_FOR_REPL_INST_UNFREEZE_SAFE
-#endif /* #ifdef UNIX */
+#define REPL_INST_AVAILABLE(GD_PTR) (repl_inst_get_name((char *)replpool_id.instfilename, &full_len, \
+ SIZEOF(replpool_id.instfilename), return_on_error, GD_PTR))
-#endif /* #ifndef _ANTICIPATORY_FREEZE_H */
+#endif /* #ifndef ANTICIPATORY_FREEZE_H */
diff --git a/sr_port/bx_boollit.c b/sr_port/bx_boollit.c
index c7116bf..6a60c22 100644
--- a/sr_port/bx_boollit.c
+++ b/sr_port/bx_boollit.c
@@ -27,6 +27,9 @@
LITREF octabstruct oc_tab[];
+error_def(ERR_NUMOFLOW);
+error_def(ERR_PATNOTFOUND);
+
void bx_boollit(triple *t)
/* search the Boolean in t (recursively) for literal leaves; the logic is similar to bx_tail
* the rest of the arguments parallel those in bx_boolop and used primarily handling basic Boolean operations (ON, NOR, AND, NAND)
@@ -97,8 +100,17 @@ void bx_boollit(triple *t)
} else if (MV_NM & mv->mvtype)
mv->sgn = !mv->sgn;
} else
+ {
s2n(mv);
+ if (!(MV_NM & mv->mvtype))
+ {
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NUMOFLOW);
+ assert(TREF(rts_error_in_parse));
+ return;
+ }
+ }
n2s(mv);
+ assert((MV_NM & mv->mvtype) && (MV_STR & mv->mvtype));
v[j] = mv;
assert(ref0 == optrip[j]);
put_lit_s(v[j], ref0);
@@ -123,23 +135,12 @@ void bx_boollit(triple *t)
} else if (OC_LIT == optrip[1]->opcode)
j = 1;
if (2 == j)
- { /* Both sides are literals; remove them */
+ {
for (j = 0; j < ARRAYSIZE(v); j++)
- { /* both arguments are literals, so do the operation at compile time */
- /* We don't need any COBOOLs, and all the negatives/coms should be out */
- for (ref0 = t->operand[j].oprval.tref; ref0 != optrip[j]; ref0 = ref0->operand[0].oprval.tref)
- {
- assert((OC_NEG != ref0->opcode) && (OC_FORCENUM != ref0->opcode) && (OC_COM != ref0->opcode));
- dqdel(ref0, exorder);
- t->operand[j].oprval.tref = ref0->operand[0].oprval.tref;
- }
+ { /* both arguments are literals, so try the operation at compile time */
v[j] = &optrip[j]->operand[0].oprval.mlit->v;
tv[j] = (0 != v[j]->m[1]);
- unuse_literal(v[j]);
- optrip[j]->opcode = OC_NOOP; /* shouldn't dqdel be safe? */
- optrip[j]->operand[0].oprclass = NO_REF;
}
- t->operand[1].oprclass = NO_REF;
switch (t->opcode)
{ /* optimize the Boolean operations here */
case OC_NAND:
@@ -175,7 +176,11 @@ void bx_boollit(triple *t)
break;
case OC_NPATTERN:
case OC_PATTERN:
+ if (TREF(xecute_literal_parse))
+ return;
tvr = !(*(uint4 *)v[1]->str.addr) ? do_pattern(v[0], v[1]) : do_patfixed(v[0], v[1]);
+ if (ERR_PATNOTFOUND == TREF(source_error_found))
+ return;
break;
case OC_NSORTS_AFTER:
case OC_SORTS_AFTER:
@@ -184,6 +189,20 @@ void bx_boollit(triple *t)
default:
assertpro(FALSE);
}
+ for (j = 0; j < ARRAYSIZE(v); j++)
+ { /* finish cleaning up the original triples */
+ /* We don't need any COBOOLs, and all the negatives/coms should be out */
+ for (ref0 = t->operand[j].oprval.tref; ref0 != optrip[j]; ref0 = ref0->operand[0].oprval.tref)
+ {
+ assert((OC_NEG != ref0->opcode) && (OC_FORCENUM != ref0->opcode) && (OC_COM != ref0->opcode));
+ dqdel(ref0, exorder);
+ t->operand[j].oprval.tref = ref0->operand[0].oprval.tref;
+ }
+ unuse_literal(v[j]);
+ optrip[j]->opcode = OC_NOOP; /* shouldn't dqdel be safe? */
+ optrip[j]->operand[0].oprclass = NO_REF;
+ }
+ t->operand[1].oprclass = NO_REF;
if (OCT_NEGATED & oc_tab[t->opcode].octype)
tvr = !tvr;
ref0 = maketriple(OC_LIT);
diff --git a/sr_port/bx_boolop.c b/sr_port/bx_boolop.c
index 7661fa7..7a5d3bf 100644
--- a/sr_port/bx_boolop.c
+++ b/sr_port/bx_boolop.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -59,15 +59,6 @@ MBSTART { /* Input: \
} \
} MBEND
-#define TRACK_JMP_TARGET(T, REF0) \
-MBSTART { /* T is triple to tag; REF0 is the new target triple with which it's tagged */ \
- tripbp = &T->jmplist; /* borrow jmplist to track jmp targets */ \
- assert(NULL == tripbp->bpt); \
- assert((tripbp == tripbp->que.fl) && (tripbp == tripbp->que.bl)); \
- tripbp->bpt = REF0; /* point to the new location */ \
- dqins(TREF(bool_targ_ptr), que, tripbp); /* queue jmplist for clean-up */ \
-} MBEND
-
void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean_t sense, oprtype *addr)
/* process the operations into a chain of mostly conditional jumps
* *t points to the Boolean operation
@@ -81,7 +72,7 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
opctype c;
oprtype *adj_addr, *i, *p;
tbp *tripbp;
- triple *ref0, *ref1, *ref2, *t0, *t1, *tb, *tj;
+ triple *bfini, *binit, *ref0, *ref1, *ref2, *t0, *t1, *tb, *tj;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -123,12 +114,20 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
TREF(boolchain_ptr) = &(TREF(boolchain));
dqinit(TREF(boolchain_ptr), exorder);
t0 = t->exorder.fl;
- TREF(bool_targ_ptr) = &(TREF(bool_targ_anchor)); /* mcalloc won't persist over multiple complies */
+ TREF(bool_targ_ptr) = &(TREF(bool_targ_anchor)); /* mcalloc won't persist over multiple compiles */
dqinit(TREF(bool_targ_ptr), que);
- /* ex_tail wraps bools that produce a value with OC_BOOLINIT (clr) and OC_BOOLFINI (set) */
- assert((OC_BOOLFINI != t0->opcode)
- || ((OC_COMVAL == t0->exorder.fl->opcode) && (TRIP_REF == t0->operand[0].oprclass)));
}
+ if (OC_BOOLFINI == (bfini = t->exorder.fl)->opcode) /* WARNING assignment */
+ { /* ex_tail wraps bools that produce a value with OC_BOOLINIT (clr) and OC_BOOLFINI (set) followed by an OC_COMVAL */
+ assert((TRIP_REF == bfini->operand[0].oprclass) && (OC_BOOLINIT == bfini->operand[0].oprval.tref->opcode));
+ assert(NO_REF == bfini->operand[0].oprval.tref->operand[0].oprclass);
+ bfini->operand[0].oprval.tref->opcode = OC_NOOP;
+ binit = maketriple(OC_BOOLINIT);
+ DEBUG_ONLY(binit->src = bfini->operand[0].oprval.tref->src);
+ ref1 = (TREF(boolchain_ptr))->exorder.bl;
+ dqins(ref1, exorder, binit);
+ } else
+ bfini = binit = NULL;
for (i = t->operand; i < ARRAYTOP(t->operand); i++)
{
assert(NULL != TREF(boolchain_ptr));
@@ -141,8 +140,6 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
{ /* operand[1] */
bx_tail(tb, sense, addr); /* do normal transform */
RETURN_IF_RTS_ERROR;
- if (!expr_fini) /* leaving ref0 same as for operand 0 */
- break; /* only need to relocate last operand[1] */
}
if (OC_NOOP == tb->opcode)
{ /* the technique of sprinkling noops means fishing around for the actual instruction */
@@ -171,7 +168,7 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
}
}
assert(OC_NOOP != tb->opcode);
- ref0 = maketriple(tb->opcode); /* copy operation for place in new ladder */
+ ref0 = maketriple(tb->opcode); /* copy operation to place in new ladder */
DEBUG_ONLY(ref0->src = tb->src);
ref1 = (TREF(boolchain_ptr))->exorder.bl; /* common setup for coming copy of this op */
switch (tb->opcode)
@@ -190,10 +187,10 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
}
t1 = tb->exorder.fl;
assert(OCT_JUMP & oc_tab[t1->opcode].octype);
- tj = maketriple(t1->opcode); /* create new jmp on result of coerce */
+ tj = maketriple(t1->opcode); /* create JMP in boolchain on result of coerce */
DEBUG_ONLY(tj->src = t1->src);
tj->operand[0] = t1->operand[0];
- t1->opcode = OC_NOOP; /* wipe out original jmp */
+ t1->opcode = OC_NOOP; /* wipe out original JMP */
t1->operand[0].oprclass = NO_REF;
break;
case OC_CONTAIN:
@@ -209,117 +206,127 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
STOTEMP_IF_NEEDED(ref0, 0, tb, tb->operand[0]);
t1 = tb->exorder.fl;
assert(OCT_JUMP & oc_tab[t1->opcode].octype);
- tj = maketriple(t1->opcode); /* copy jmp */
+ tj = maketriple(t1->opcode); /* copy JMP */
DEBUG_ONLY(tj->src = t1->src);
tj->operand[0] = t1->operand[0];
STOTEMP_IF_NEEDED(ref0, 1, t1, tb->operand[1]);
- if (OC_NOOP == tb->opcode) /* does op[0] need cleanup? */
+ if (OC_NOOP == tb->opcode) /* does operand[0] need cleanup? */
tb->operand[0].oprclass = tb->operand[1].oprclass = NO_REF;
break;
case OC_JMPTCLR:
case OC_JMPTSET:
- t1 = tb; /* move copy of jmp to boolchain and NOOP it */
- tj = ref0;
- tj->operand[0] = t1->operand[0]; /* new jmp gets old target */
+ t1 = tb;
+ tj = ref0; /* put revised JMP in boolchain */
+ tj->opcode = (OC_JMPTCLR == tb->opcode) ? OC_JMPEQU : OC_JMPNEQ;
+ tj->operand[0] = tb->operand[0]; /* new JMP gets old target */
assert(INDR_REF == tj->operand[0].oprclass);
- ref2 = maketriple(OC_NOOP); /* insert NOOP rather than COBOOL in new chain */
- DEBUG_ONLY(ref2->src = tj->src);
- dqins(ref1, exorder, ref2);
- t1->opcode = OC_NOOP; /* wipe out original jmp */
+ ref0 = maketriple(OC_COBOOL); /* insert COBOOL in new chain */
+ DEBUG_ONLY(ref0->src = tj->src);
+ ref0->operand[0] = put_tref(t1); /* aim it at the original JMP */
+ dqins(ref1, exorder, ref0);
+ t1->opcode = OC_GETTRUTH; /* and replace original JMP with OC_GETTRUTH */
t1->operand[0].oprclass = NO_REF;
break;
default:
- assertpro(FALSE);
+ tj = NULL; /* toss in indicator as flag for code below */
}
- assert((OC_STOTEMP == t1->opcode) || (OC_NOOP == t1->opcode) || (OC_COMVAL == t1->opcode)
- || (OC_LITC == t1->opcode));
- assert(OCT_JUMP & oc_tab[tj->opcode].octype);
+ if (NULL != tj)
+ {
+ TRACK_JMP_TARGET(tb, ref0);
+ assert((OC_STOTEMP == t1->opcode) || (OC_NOOP == t1->opcode) || (OC_COMVAL == t1->opcode)
+ || (OC_LITC == t1->opcode) || (OC_GETTRUTH == t1->opcode));
+ assert(OCT_JUMP & oc_tab[tj->opcode].octype);
+ ref1 = (TREF(boolchain_ptr))->exorder.bl;
+ dqins(ref1, exorder, tj); /* common insert for new jmp */
+ }
+ }
+ TRACK_JMP_TARGET(t, (TREF(boolchain_ptr))->exorder.bl); /* track the operator as well as the operands */
+ if (bfini == t->exorder.fl)
+ { /* if OC_BOOLINIT/OC_BOOLFINI pair, move them to the new chain */
+ assert((NULL != binit) && (OC_BOOLFINI == bfini->opcode) && (OC_BOOLINIT == binit->opcode));
+ assert((OC_COMVAL == bfini->exorder.fl->opcode) && (TRIP_REF == bfini->exorder.fl->operand[0].oprclass));
+ ref0 = bfini->exorder.fl; /* get a pointer to the OC_COMVAL */
+ bfini->opcode = OC_NOOP;
+ bfini->operand[0].oprclass = NO_REF;
+ assert(NO_REF == binit->operand[0].oprclass);
+ ref2 = maketriple(OC_BOOLFINI); /* put the OC_BOOLFINI at the current end */
+ DEBUG_ONLY(ref2->src = bfini->src);
+ ref2->operand[0] = put_tref(binit);
+ ref1 = (TREF(boolchain_ptr))->exorder.bl;
+ dqins(ref1, exorder, ref2);
+ TRACK_JMP_TARGET(bfini, ref2);
+ bfini = ref2;
+ ref2 = maketriple(OC_COMVAL); /* followed by the OC_COMVAL */
+ DEBUG_ONLY(ref2->src = ref0->src);
+ ref2->operand[0] = put_tref(binit);
ref1 = (TREF(boolchain_ptr))->exorder.bl;
- dqins(ref1, exorder, tj); /* common insert for new jmp */
- TRACK_JMP_TARGET(tb, ref0);
+ dqins(ref1, exorder, ref2);
+ ref0->opcode = OC_PASSTHRU; /* turn original OC_COMVAL into an OC_PASSTHRU */
+ ref0->operand[0] = put_tref(ref2);
+ TRACK_JMP_TARGET(ref0, ref2); /* also track it, in case it's a jump target */
+ TRACK_JMP_TARGET(ref2, ref2); /* ??? not sure about this line */
+ if ((OCT_JUMP & oc_tab[(ref1 = bfini->exorder.bl)->opcode].octype) /* WARNING assignment */
+ && (INDR_REF == ref1->operand[0].oprclass) && (NO_REF == ref1->operand[0].oprval.indr->oprclass))
+ *ref1->operand[0].oprval.indr = put_tnxt(bfini); /* unresolved JMP around BOOLFINI goes to COMVAL */
+ bfini = binit = NULL;
}
- assert(oc_tab[t->opcode].octype & OCT_BOOL);
+ assert(OCT_BOOL & oc_tab[t->opcode].octype);
t->opcode = OC_NOOP; /* wipe out the original boolean op */
t->operand[0].oprclass = t->operand[1].oprclass = NO_REF;
- TRACK_JMP_TARGET(t, (jmp_to_next ? (TREF(boolchain_ptr))->exorder.bl : ref0)); /* point at op[1] or op[0] respectively */
+ CHKTCHAIN(TREF(boolchain_ptr), exorder, FALSE); /* ensure no cross threading between the 2 chains */
if (!expr_fini)
- return;
+ return; /* more to come */
/* time to deal with new jump ladder */
assert(NULL != TREF(boolchain_ptr));
assert(NULL != TREF(bool_targ_ptr));
assert(TREF(bool_targ_ptr) != (TREF(bool_targ_ptr))->que.fl);
- assert(t0->exorder.bl == t);
- assert(t0 == t->exorder.fl);
- dqadd(t, TREF(boolchain_ptr), exorder); /* insert the new jump ladder */
- ref0 = (TREF(boolchain_ptr))->exorder.bl->exorder.fl;
- if (ref0 == TREF(curtchain))
- ref0 = newtriple(OC_NOOP); /* add a safe target */
- t0 = t->exorder.fl;
- assert((OC_COBOOL == t0->opcode) || (OC_JMPTSET != t0->opcode) || (OC_JMPTCLR != t0->opcode)) ;
- t0 = t0->exorder.fl;
- assert(OCT_JUMP & oc_tab[t0->opcode].octype);
- for (; (t0 != ref0) && (OCT_JUMP & oc_tab[t0->opcode].octype); t0 = t0->exorder.fl)
+ assert((t0->exorder.bl == t) && (t0 == t->exorder.fl));
+ ref2 = maketriple(OC_NOOP); /* add a safe target */
+ ref1 = (TREF(boolchain_ptr))->exorder.bl;
+ dqins(ref1, exorder, ref2);
+ ref0 = TREF(boolchain_ptr);
+ for (t0 = ref0->exorder.fl; (t0 != ref0); t0 = t0->exorder.fl)
{ /* process replacement jmps */
+ if (!(OCT_JUMP & oc_tab[t0->opcode].octype))
+ continue;
adj_addr = &t0->operand[0];
- switch (t0->opcode)
- {
- default:
- if (NULL != (t1 = (adj_addr = adj_addr->oprval.indr)->oprval.tref)) /* WARNING assignment */
- { /* need to adjust target */
- if (TNXT_REF == adj_addr->oprclass) /* TNXT requires a different adjustment */
+ if (NULL != (t1 = (adj_addr = adj_addr->oprval.indr)->oprval.tref)) /* WARNING assignment */
+ { /* need to adjust target */
+ if (TNXT_REF == adj_addr->oprclass) /* TNXT requires a different adjustment */
+ {
+ for (ref1 = t1->exorder.fl; ref1 != ref0; ref1 = ref1->exorder.fl)
{
- for (ref1 = t1->exorder.fl; ref1 != ref0; ref1 = ref1->exorder.fl)
+ if (NULL != ref1->jmplist.bpt) /* find 1st recorded target after TNXT */
{
- if (NULL != ref1->jmplist.bpt) /* find 1st recorded target after TNXT */
- {
- assert((OC_NOOP == ref1->opcode) || (OC_STOTEMP == ref1->opcode));
- ref1 = ref1->jmplist.bpt; /* should point to appropriate new target */
- assert((OCT_BOOL & oc_tab[ref1->opcode].octype)
- || (OC_NOOP == ref1->opcode));
- break;
- }
+ assert((OC_NOOP == ref1->opcode) || (OC_STOTEMP == ref1->opcode)
+ || (OC_COMVAL == ref1->opcode) || (OC_PASSTHRU == ref1->opcode));
+ ref1 = ref1->jmplist.bpt; /* should point to appropriate new target */
+ assert((OCT_BOOL & oc_tab[ref1->opcode].octype)
+ || (OC_NOOP == ref1->opcode) || (OC_COMVAL == ref1->opcode));
+ break;
}
- } else
+ }
+ } else
+ {
+ assert(TJMP_REF == adj_addr->oprclass);
+ assert(OC_NOOP == t1->opcode);
+ assert(&(t1->jmplist) != t1->jmplist.que.fl);
+ assert(NULL != t1->jmplist.bpt);
+ ref1 = t1->jmplist.bpt;
+ if (ref1 == ref0->exorder.bl->exorder.bl) /* if it wants to jump to the end of the chain */
{
- assert(TJMP_REF == adj_addr->oprclass);
- if ((t == t1) || (t1 == ref0))
- ref1 = ref0; /* adjust to end of boolean expression */
- else
- { /* old target should have jmplist entry */
- /* from the jmp jmplisted in the old target we move past the next test (or NOOP)
- * and jmp which correspond to the old target and pick the subsequent test (or NOOP)
- * and jmp which correspond to those that originally followed the logic after the
- * old target and are therefore the appropriate new target for this jmp
- */
- assert(OC_NOOP == t1->opcode);
- assert(&(t1->jmplist) != t1->jmplist.que.fl);
- assert(NULL != t1->jmplist.bpt);
- assert(OCT_JUMP & oc_tab[t1->jmplist.bpt->opcode].octype);
- ref1 = t1->jmplist.bpt->exorder.fl;
- assert((OCT_BOOL & oc_tab[ref1->opcode].octype) || (OC_NOOP == ref1->opcode));
- ref1 = ref1->exorder.fl->exorder.fl;
- while ((triple *)-1 == ref1->exorder.fl->operand[0].oprval.tref)
- { /* avoid jumping to a "dead" TRUE item */
- assert(OC_JMP == ref1->exorder.fl->opcode);
- ref1 = ref1->exorder.fl->exorder.fl;
- assert(INDR_REF == ref1->operand[0].oprclass);
- }
- assert((OCT_BOOL & oc_tab[(c = ref1->opcode)].octype) /* WARNING assignments */
- || (OC_BOOLFINI == c)
- || ((OC_NOOP == c) && ((TREF(curtchain) == ref1->exorder.fl)
- || ((OC_JMP == (c = ref1->exorder.fl->opcode)) || (OC_JMPTCLR == c)
- || (OC_JMPTSET == c))
- && (INDR_REF == ref1->exorder.fl->operand[0].oprclass))));
- }
+ assert(OC_NOOP == ref0->exorder.bl->opcode);
+ ref1 = ref0->exorder.bl; /* no need to do more fishing */
+ } else
+ { /* from the jmp jmplisted in the old target, move forward to the next COBOOL) */
+ assert(OCT_JUMP & oc_tab[ref1->opcode].octype);
+ ref1 = ref1->exorder.fl;
+ assert((OCT_BOOL & oc_tab[ref1->opcode].octype) || (OC_BOOLFINI == ref1->opcode)
+ || (OC_BOOLINIT == ref1->opcode));
}
- t0->operand[0] = put_tjmp(ref1); /* no indirection simplifies later interations */
}
+ t0->operand[0] = put_tjmp(ref1); /* no indirection simplifies later compilation */
}
- t0 = t0->exorder.fl;
- if ((OC_BOOLFINI == t0->opcode) || (TREF(curtchain) == t0->exorder.fl))
- break;
- assert((OCT_BOOL & oc_tab[t0->opcode].octype) || (OC_JMP == (c = t0->exorder.fl->opcode)) || (OC_JMPTSET == c)
- || (OC_JMPTCLR == c)); /* WARNING assignment */
}
dqloop(TREF(bool_targ_ptr), que, tripbp) /* clean up borrowed jmplist entries */
{
@@ -328,6 +335,7 @@ void bx_boolop(triple *t, boolean_t jmp_type_one, boolean_t jmp_to_next, boolean
}
assert((TREF(bool_targ_ptr) == (TREF(bool_targ_ptr))->que.fl)
&& (TREF(bool_targ_ptr) == (TREF(bool_targ_ptr))->que.bl));
+ dqadd(t, TREF(boolchain_ptr), exorder); /* insert the new JMP ladder */
TREF(boolchain_ptr) = NULL;
if (TREF(expr_start) != TREF(expr_start_orig))
{ /* inocculate against an unwanted GVRECTARG */
diff --git a/sr_port/bx_relop.c b/sr_port/bx_relop.c
index 1933f94..d34316d 100755
--- a/sr_port/bx_relop.c
+++ b/sr_port/bx_relop.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -13,6 +13,8 @@
#include "mdef.h"
#include "compiler.h"
#include "mdq.h"
+#include "opcode.h"
+#include "fullbool.h"
LITREF octabstruct oc_tab[];
@@ -24,7 +26,8 @@ void bx_relop(triple *t, opctype cmp, opctype tst, oprtype *addr)
*/
{
oprtype *p;
- triple *ref;
+ tbp *tripbp;
+ triple *bini, *comv, *ref, *ref0, ref1;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -38,6 +41,25 @@ void bx_relop(triple *t, opctype cmp, opctype tst, oprtype *addr)
{
ex_tail(p);
RETURN_IF_RTS_ERROR;
+ if ((NULL != TREF(boolchain_ptr)) && (OC_COMVAL == (comv = p->oprval.tref)->opcode))
+ { /* RELOP needed a BOOLINIT/BOOLFINI/COMVAL, which now must move to the boolchain */
+ assert(TREF(saw_side_effect) && (GTM_BOOL != TREF(gtm_fullbool)));
+ assert(OC_BOOLINIT == comv->operand[0].oprval.tref->opcode);
+ assert(OC_BOOLFINI == comv->exorder.bl->opcode);
+ assert(comv->operand[0].oprval.tref == comv->exorder.bl->operand[0].oprval.tref);
+ for (ref = (bini = comv->operand[0].oprval.tref)->exorder.fl; ref != comv; ref = ref->exorder.fl)
+ { /* process to matching end of sequence so to conform with addr adjust at end of bx_boolop */
+ if (!(OCT_JUMP & oc_tab[ref->opcode].octype))
+ TRACK_JMP_TARGET(ref, ref);
+ }
+ TRACK_JMP_TARGET(comv, comv);
+ dqdelchain(bini->exorder.bl, comv->exorder.fl, exorder); /* snip out the sequence */
+ ref0 = &ref1; /* anchor it */
+ ref0->exorder.fl = bini;
+ ref0->exorder.bl = comv;
+ ref = (TREF(boolchain_ptr))->exorder.bl;
+ dqadd(ref, ref0, exorder); /* and insert it in new chain */
+ }
}
}
return;
diff --git a/sr_port/cdb_sc_table.h b/sr_port/cdb_sc_table.h
index 133d5c9..6286859 100755
--- a/sr_port/cdb_sc_table.h
+++ b/sr_port/cdb_sc_table.h
@@ -54,6 +54,7 @@
* cdb_sc_reorg_encrypt
* cdb_sc_optrestart
* cdb_sc_phase2waitfail
+ * cdb_sc_wcs_recover
*/
CDB_SC_NUM_ENTRY( cdb_sc_normal, FALSE, 0) /* 0 success */
@@ -68,7 +69,7 @@ CDB_SC_NUM_ENTRY( cdb_sc_starrecord, FALSE, 8) /* 8 star reco
CDB_SC_NUM_ENTRY( cdb_sc_extend, FALSE, 9) /* 9 extend requested when none seemed needed - from gdsfilext */
CDB_SC_NUM_ENTRY( cdb_sc_jnlclose, TRUE, 10) /* 10 journal file has been closed */
-CDB_SC_UCHAR_ENTRY(cdb_sc_wcs_recover, FALSE, FALSE, 'A') /* 'A' tp_hist/t_end found concurrent "wcs_recover" invocation */
+CDB_SC_UCHAR_ENTRY(cdb_sc_wcs_recover, TRUE, FALSE, 'A') /* 'A' tp_hist/t_end found concurrent "wcs_recover" invocation */
CDB_SC_UCHAR_ENTRY(cdb_sc_keyoflow, FALSE, FALSE, 'B') /* 'B' gvcst_expand_key or gvcst_search (3) found key overflow */
CDB_SC_UCHAR_ENTRY(cdb_sc_rmisalign, FALSE, FALSE, 'C') /* 'C' Record misaligned from nearly everyone */
CDB_SC_UCHAR_ENTRY(cdb_sc_r2small, FALSE, FALSE, 'D') /* 'D' gvcst_expand_key found record too small */
diff --git a/sr_port/cert_blk.c b/sr_port/cert_blk.c
index df90bb9..59a5cb7 100644
--- a/sr_port/cert_blk.c
+++ b/sr_port/cert_blk.c
@@ -82,24 +82,35 @@ error_def(ERR_DBNONUMSUBS);
#define BITS_PER_UCHAR 8
#define BLKS_PER_UINT4 ((SIZEOF(uint4) / SIZEOF(unsigned char)) * BITS_PER_UCHAR) / BML_BITS_PER_BLK
#define BLOCK_WINDOW 8
-#define LEVEL_WINDOW 3
+#define LEVEL_WINDOW 2
#define OFFSET_WINDOW 4
-#define TEXT1 ": "
-#define TEXT2 " "
-#define TEXT3 ":"
-#define TEXT4 ", "
+#define TEXT0 "BLK=0x"
+#define TEXT1 " : OFF=0x"
+#define TEXT2 " : LVL=0x"
+#define TEXT3 " : LVL=0x"
+#define TEXT4 ","
-#define MAX_UTIL_LEN 40
-#define RTS_ERROR_FUNC(CSA, ERR, BUFF) \
-{ \
- if (gtmassert_on_error) \
+#define MAX_UTIL_LEN STRLEN(TEXT0) + BLOCK_WINDOW + STRLEN(TEXT3) + LEVEL_WINDOW + STRLEN(TEXT4) + 1
+#define RTS_ERROR_FUNC(CSA, ERR, BUFF, ERROR_ACTION) \
+{ \
+ switch (ERROR_ACTION) \
+ { \
+ case ASSERTPRO_ON_CERT_FAIL: \
+ case RTS_ERROR_ON_CERT_FAIL: \
+ rts_error_csa(CSA_ARG(CSA) VARLSTCNT(4) MAKE_MSG_INFO(ERR), 2, LEN_AND_STR((char_ptr_t)BUFF)); \
+ /* WARNING fallthrough (because the message is INFO) */ \
+ case SEND_MSG_ON_CERT_FAIL: \
+ send_msg_csa(CSA_ARG(CSA) VARLSTCNT(4) MAKE_MSG_INFO(ERR), 2, LEN_AND_STR((char_ptr_t)BUFF)); \
+ if ((ASSERTPRO_ON_CERT_FAIL != ERROR_ACTION) || (INFO == SEVMASK(ERR))) \
+ break; \
assertpro(0 == ERR); \
- rts_error_csa(CSA_ARG(CSA) VARLSTCNT(4) MAKE_MSG_INFO(ERR), 2, LEN_AND_STR((char_ptr_t)BUFF)); \
+ default: \
+ assert(ERROR_ACTION); \
+ } \
}
-int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
- boolean_t gtmassert_on_error, gv_namehead *gvt)
+int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root, int4 error_action, gv_namehead *gvt)
{
block_id child, prev_child;
rec_hdr_ptr_t rp, r_top;
@@ -138,17 +149,18 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
blk_levl = bp->levl;
blk_size = bp->bsiz;
offset = (uint4)blk / bplmap;
-
util_len=0;
- i2hex_blkfill(blk,&util_buff[util_len], BLOCK_WINDOW);
+ assert((STRLEN(TEXT1) + OFFSET_WINDOW + STRLEN(TEXT2)) == STRLEN(TEXT3));
+ MEMCPY_LIT(&util_buff[util_len], TEXT0);
+ util_len += STRLEN(TEXT0);
+ i2hexl(blk, &util_buff[util_len], BLOCK_WINDOW);
util_len += BLOCK_WINDOW;
- MEMCPY_LIT(&util_buff[util_len], TEXT1); /* OFFSET_WINDOW + 1 spaces */
- util_len += SIZEOF(TEXT3) - 1;
- util_len += OFFSET_WINDOW +1;
- i2hex_blkfill(blk_levl, &util_buff[util_len], LEVEL_WINDOW);
+ MEMCPY_LIT(&util_buff[util_len], TEXT3); /* Blanks for "OFF=" + OFFSET_WINDOW */
+ util_len += STRLEN(TEXT3);
+ i2hex(blk_levl, &util_buff[util_len], LEVEL_WINDOW);
util_len += LEVEL_WINDOW;
- MEMCPY_LIT(&util_buff[util_len], TEXT2);
- util_len += SIZEOF(TEXT2) - 1;
+ MEMCPY_LIT(&util_buff[util_len], TEXT4);
+ util_len += STRLEN(TEXT4);
util_buff[util_len] = 0;
chain = *(off_chain *)&blk;
/* Assert that if at all chain.flag is non-zero (i.e. a created block), we are in TP and not yet in the commit logic.
@@ -162,18 +174,18 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{
if ((unsigned char)blk_levl != LCL_MAP_LEVL)
{
- RTS_ERROR_FUNC(csa, MAKE_MSG_INFO(ERR_DBLVLINC), util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBLVLINC, util_buff, error_action);
return FALSE;
}
if (blk_size != BM_SIZE(bplmap))
{
- RTS_ERROR_FUNC(csa, ERR_DBBMSIZE, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBMSIZE, util_buff, error_action);
return FALSE;
}
mp = (sm_uc_ptr_t)bp + SIZEOF(blk_hdr);
if ((*mp & 1) != 0)
{ /* bitmap doesn't protect itself */
- RTS_ERROR_FUNC(csa, ERR_DBBMBARE, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBMBARE, util_buff, error_action);
return FALSE;
}
full = TRUE;
@@ -197,14 +209,13 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
mask1 &= chunk; /* check against the original contents */
if (mask1 != 0) /* busy and reused should never appear together */
{
- RTS_ERROR_FUNC(csa, ERR_DBBMINV, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBMINV, util_buff, error_action);
return FALSE;
}
-
}
if (full == (NO_FREE_SPACE != gtm_ffs(blk / bplmap, MM_ADDR(csd), MASTER_MAP_BITS_PER_LMAP)))
{
- RTS_ERROR_FUNC(csa, ERR_DBBMMSTR, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBMMSTR, util_buff, error_action);
/* DSE CACHE -VERIFY used to fail occasionally with the DBBMMSTR error because of passing
* an older twin global buffer that contained stale bitmap information. That is now fixed.
* So we dont expect any more such failures. Assert accordingly.
@@ -216,37 +227,37 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
}
if (blk_levl > MAX_BT_DEPTH)
{
- RTS_ERROR_FUNC(csa, ERR_DBBLEVMX, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBLEVMX, util_buff, error_action);
return FALSE;
}
if (blk_levl < 0)
{
- RTS_ERROR_FUNC(csa, ERR_DBBLEVMN, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBLEVMN, util_buff, error_action);
return FALSE;
}
if (blk_levl == 0)
{ /* data block */
if ((DIR_ROOT == blk) || (blk == root))
{ /* headed for where an index block should be */
- RTS_ERROR_FUNC(csa, ERR_DBROOTBURN, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBROOTBURN, util_buff, error_action);
return FALSE;
}
if (blk_size < (uint4)SIZEOF(blk_hdr))
{
- RTS_ERROR_FUNC(csa, ERR_DBBSIZMN, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBSIZMN, util_buff, error_action);
return FALSE;
}
} else
{ /* index block */
if (blk_size < (uint4)(SIZEOF(blk_hdr) + SIZEOF(rec_hdr) + SIZEOF(block_id)))
{ /* must have at least one record */
- RTS_ERROR_FUNC(csa, ERR_DBBSIZMN, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBSIZMN, util_buff, error_action);
return FALSE;
}
}
if (blk_size > (uint4)csd->blk_size)
{
- RTS_ERROR_FUNC(csa, ERR_DBBSIZMX, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBSIZMX, util_buff, error_action);
return FALSE;
}
is_directory = FALSE;
@@ -282,29 +293,17 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
rec_num++;
GET_RSIZ(rec_size, rp);
rec_offset = (uint4)((sm_ulong_t)rp - (sm_ulong_t)bp);
- /*add util_buff here*/
-
- util_len=0;
- i2hex_blkfill(blk,&util_buff[util_len], BLOCK_WINDOW);
- util_len += BLOCK_WINDOW;
- MEMCPY_LIT(&util_buff[util_len], TEXT1); /* OFFSET_WINDOW + 1 spaces */
- util_len += SIZEOF(TEXT3) - 1;
- i2hex_nofill(rec_offset, &util_buff[util_len], OFFSET_WINDOW);
- util_len += OFFSET_WINDOW + 1;
- i2hex_blkfill(blk_levl, &util_buff[util_len], LEVEL_WINDOW);
- util_len += LEVEL_WINDOW;
- MEMCPY_LIT(&util_buff[util_len], TEXT2);
- util_len += SIZEOF(TEXT2) - 1;
- util_buff[util_len] = 0;
-
+ MEMCPY_LIT(&util_buff[STRLEN(TEXT0) + BLOCK_WINDOW], TEXT1); /* insert offset between block and level */
+ i2hex_nofill(rec_offset, &util_buff[STRLEN(TEXT0) + BLOCK_WINDOW + STRLEN(TEXT1)], OFFSET_WINDOW);
+ MEMCPY_LIT(&util_buff[STRLEN(TEXT0) + BLOCK_WINDOW + STRLEN(TEXT1) + OFFSET_WINDOW], TEXT2);
if (rec_size <= (uint4)SIZEOF(rec_hdr))
{
- RTS_ERROR_FUNC(csa, ERR_DBRSIZMN, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBRSIZMN, util_buff, error_action);
return FALSE;
}
if (rec_size > (uint4)((sm_ulong_t)blk_top - (sm_ulong_t)rp))
{
- RTS_ERROR_FUNC(csa, ERR_DBRSIZMX, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBRSIZMX, util_buff, error_action);
return FALSE;
}
r_top = (rec_hdr_ptr_t)((sm_ulong_t)rp + rec_size);
@@ -313,7 +312,7 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{
if (rec_cmpc)
{
- RTS_ERROR_FUNC(csa, ERR_DBCMPNZRO, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBCMPNZRO, util_buff, error_action);
return FALSE;
}
if (0 == blk_levl)
@@ -321,7 +320,7 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
ch = *((sm_uc_ptr_t)rp + SIZEOF(rec_hdr));
if (!(VALFIRSTCHAR_WITH_TRIG(ch)))
{
- RTS_ERROR_FUNC(csa, ERR_GVINVALID, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_GVINVALID, util_buff, error_action);
return FALSE;
}
}
@@ -330,12 +329,12 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{ /* star key */
if (rec_size != SIZEOF(rec_hdr) + SIZEOF(block_id))
{
- RTS_ERROR_FUNC(csa, ERR_DBSTARSIZ, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBSTARSIZ, util_buff, error_action);
return FALSE;
}
if (rec_cmpc)
{
- RTS_ERROR_FUNC(csa, ERR_DBSTARCMP, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBSTARCMP, util_buff, error_action);
return FALSE;
}
blk_id_ptr = (sm_uc_ptr_t)rp + SIZEOF(rec_hdr);
@@ -349,7 +348,7 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{
if (rec_cmpc >= prior_expkeylen)
{
- RTS_ERROR_FUNC(csa, ERR_DBCMPMX, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBCMPMX, util_buff, error_action);
return FALSE;
}
for (b_ptr = prior_expkey; b_ptr < (prior_expkey + rec_cmpc); b_ptr++)
@@ -380,7 +379,7 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
prev_char_is_delimiter = FALSE;
if (blk_id_ptr >= (sm_uc_ptr_t)r_top)
{
- RTS_ERROR_FUNC(csa, ERR_DBKEYMX, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBKEYMX, util_buff, error_action);
return FALSE;
}
}
@@ -391,7 +390,7 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
if (is_gvt)
{ /* this is a contradiction. a block cannot be a directory and gvt at the same time.
* gvt should contain all keys with the same global name */
- RTS_ERROR_FUNC(csa, ERR_DBINVGBL, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBINVGBL, util_buff, error_action);
return FALSE;
}
is_directory = TRUE; /* no need to do this if it was already TRUE but we save an if check */
@@ -401,19 +400,19 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
if (is_directory)
{ /* this is a contradiction. a block cannot be a directory and gvt at the same time.
* the directory tree should contain only name-level (i.e. unsubscripted) globals */
- RTS_ERROR_FUNC(csa, ERR_DBDIRTSUBSC, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBDIRTSUBSC, util_buff, error_action);
return FALSE;
}
is_gvt = TRUE; /* no need to do this if it was already TRUE but we save an if check */
}
if (MAX_GVSUBSCRIPTS <= num_subscripts)
{
- RTS_ERROR_FUNC(csa, ERR_DBMAXNRSUBS, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBMAXNRSUBS, util_buff, error_action);
return FALSE;
}
if (blk_levl && (key_size != (rec_size - SIZEOF(block_id) - SIZEOF(rec_hdr))))
{
- RTS_ERROR_FUNC(csa, ERR_DBKEYMN, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBKEYMN, util_buff, error_action);
return FALSE;
}
assert(first_key || (rec_cmpc < prior_expkeylen));
@@ -421,12 +420,12 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{
if (prior_expkey[rec_cmpc] == key_base[0])
{
- RTS_ERROR_FUNC(csa, ERR_DBCMPBAD, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBCMPBAD, util_buff, error_action);
return FALSE;
}
if (((unsigned int)prior_expkey[rec_cmpc] >= (unsigned int)key_base[0]))
{
- RTS_ERROR_FUNC(csa, ERR_DBKEYORD, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBKEYORD, util_buff, error_action);
return FALSE;
}
}
@@ -434,7 +433,10 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
prior_expkeylen = rec_cmpc + key_size;
null_subscript_cnt = 0;
if (is_gvt && (0 == blk_levl))
- {
+ { /* The messages in this section detect mismatches between header settings and an existing
+ * representation, but don't actually make the data inaccessible so they are "info-ised" in line
+ * to prevent them from generating any assertpro.
+ */
for (r_ptr = prior_expkey; *r_ptr != KEY_DELIMITER; r_ptr++)
;
for(;;)
@@ -459,9 +461,8 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
MAX_ZWR_KEY_SZ, tmp_gvkey, TRUE);
fmtd_key_len = (int)(temp - key_buffer);
key_buffer[fmtd_key_len] = '\0';
- rts_error_csa(CSA_ARG(csa) VARLSTCNT(4)
- MAKE_MSG_INFO(ERR_DBNONUMSUBS), 2,
- LEN_AND_STR(key_buffer));
+ RTS_ERROR_FUNC(csa, MAKE_MSG_INFO(ERR_DBNONUMSUBS), util_buff,
+ error_action);
GVKEY_FREE_IF_NEEDED(tmp_gvkey);
}
}
@@ -472,28 +473,15 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
}
if ((subscript == SUBSCRIPT_STDCOL_NULL) || (subscript == STR_SUB_PREFIX))
null_subscript_cnt++;
- if (csd->null_subs)
- {
- if ((0 == csd->std_null_coll) ? (SUBSCRIPT_STDCOL_NULL == subscript) :
- (STR_SUB_PREFIX == subscript))
- {
- if (csd->std_null_coll)
- rts_error_csa(CSA_ARG(csa) VARLSTCNT(8)
- MAKE_MSG_INFO(ERR_DBNULCOL), 6, rec_num, blk,
- LEN_AND_STR(GTM_NULL_TEXT),
- LEN_AND_STR(STD_NULL_TEXT));
- else
- rts_error_csa(CSA_ARG(csa) VARLSTCNT(8)
- MAKE_MSG_INFO(ERR_DBNULCOL), 6, rec_num, blk,
- LEN_AND_STR(STD_NULL_TEXT),
- LEN_AND_STR(GTM_NULL_TEXT));
- }
- }
+ if ((csd->null_subs) && ((0 == csd->std_null_coll)
+ ? (SUBSCRIPT_STDCOL_NULL == subscript)
+ :(STR_SUB_PREFIX == subscript)))
+ RTS_ERROR_FUNC(csa, MAKE_MSG_INFO(ERR_DBNULCOL), util_buff, error_action);
}
}
if (0 < null_subscript_cnt && !csd->null_subs)
{
- RTS_ERROR_FUNC(csa, ERR_NULSUBSC, util_buff);
+ RTS_ERROR_FUNC(csa, MAKE_MSG_INFO(ERR_NULSUBSC), util_buff, error_action);
}
}
}
@@ -509,24 +497,24 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{
if (child <= 0)
{
- RTS_ERROR_FUNC(csa, ERR_DBPTRNOTPOS, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBPTRNOTPOS, util_buff, error_action);
return FALSE;
}
if ((child > csa->ti->total_blks) && !mu_reorg_upgrd_dwngrd_in_prog && !mu_reorg_encrypt_in_prog)
{ /* REORG -UPGRADE/DOWNGRADE/ENCRYPT can update recycled blocks, which may contain children
* beyond total_blks if a truncate happened sometime after the block was killed.
*/
- RTS_ERROR_FUNC(csa, ERR_DBPTRMX, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBPTRMX, util_buff, error_action);
return FALSE;
}
if (!(child % bplmap))
{
- RTS_ERROR_FUNC(csa, ERR_DBPTRMAP, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBPTRMAP, util_buff, error_action);
return FALSE;
}
if (child == prev_child)
{
- RTS_ERROR_FUNC(csa, ERR_DBBDBALLOC, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBBDBALLOC, util_buff, error_action);
return FALSE;
}
prev_child = child;
@@ -534,7 +522,7 @@ int cert_blk (gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
{
if ((blk_id_ptr != next_tp_child_ptr) && (NULL != next_tp_child_ptr))
{
- RTS_ERROR_FUNC(csa, ERR_DBPTRNOTPOS, util_buff);
+ RTS_ERROR_FUNC(csa, ERR_DBPTRNOTPOS, util_buff, error_action);
return FALSE;
}
next_tp_child_ptr = blk_id_ptr + chain.next_off;
diff --git a/sr_port/cert_blk.h b/sr_port/cert_blk.h
index 2291293..fc1a97f 100755
--- a/sr_port/cert_blk.h
+++ b/sr_port/cert_blk.h
@@ -14,26 +14,31 @@
#define CERT_BLK_DEFINED
-int cert_blk(gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root,
- boolean_t gtmassert_on_error, gv_namehead *gv_target);
+enum
+{
+ RTS_ERROR_ON_CERT_FAIL, /* 0 */
+ ASSERTPRO_ON_CERT_FAIL, /* 1 */
+ SEND_MSG_ON_CERT_FAIL /* 2 */
+};
-#define CERT_BLK_IF_NEEDED(certify_all_blocks, gv_cur_region, cs, blk_ptr, gv_target) \
-{ \
- assert(gds_t_create != cs->mode); /* should have morphed into gds_t_acquired before getting here */ \
- if (certify_all_blocks) \
- { /* assertpro on integ error */ \
- /* If cs->mode is of type kill_t_create, then it would have been assigned an arbitrary block# \
- * inside of the transaction which could match a real block # in the database at this point. \
- * For example, it could be identical to the root block of the global in which case cert_blk \
- * will assume this is the root block when actually this is a block that is no longer part of \
- * the tree. So pass an invalid block# that indicates it is a created block. \
- */ \
- cert_blk(gv_cur_region, \
- ((kill_t_create != cs->mode) ? cs->blk : GDS_CREATE_BLK_MAX), (blk_hdr_ptr_t)blk_ptr, \
- dollar_tlevel ? ((NULL != cs->blk_target) ? cs->blk_target->root : 0) \
- : ((NULL != gv_target) ? gv_target->root : 0), TRUE, \
- gv_target); \
- } \
+int cert_blk(gd_region *reg, block_id blk, blk_hdr_ptr_t bp, block_id root, int4 error_action, gv_namehead *gv_target);
+
+#define CERT_BLK_IF_NEEDED(certify_all_blocks, gv_cur_region, cs, blk_ptr, gv_target) \
+{ \
+ assert(gds_t_create != cs->mode); /* should have morphed into gds_t_acquired before getting here */ \
+ if (certify_all_blocks) \
+ { /* assertpro on integ error */ \
+ /* If cs->mode is of type kill_t_create, then it would have been assigned an arbitrary block# \
+ * inside of the transaction which could match a real block # in the database at this point. \
+ * For example, it could be identical to the root block of the global in which case cert_blk \
+ * will assume this is the root block when actually this is a block that is no longer part of \
+ * the tree. So pass an invalid block# that indicates it is a created block. \
+ */ \
+ cert_blk(gv_cur_region, \
+ ((kill_t_create != cs->mode) ? cs->blk : GDS_CREATE_BLK_MAX), (blk_hdr_ptr_t)blk_ptr, dollar_tlevel \
+ ? ((NULL != cs->blk_target) ? cs->blk_target->root : 0) \
+ : ((NULL != gv_target) ? gv_target->root : 0), ASSERTPRO_ON_CERT_FAIL, gv_target); \
+ } \
}
#endif
diff --git a/sr_port/change_reg.c b/sr_port/change_reg.c
old mode 100755
new mode 100644
index f53320c..e2c0849
--- a/sr_port/change_reg.c
+++ b/sr_port/change_reg.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2010 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -18,11 +19,14 @@
#include "filestruct.h"
#include "change_reg.h"
#include "tp_set_sgm.h"
+#include "repl_msg.h" /* needed for gtmsource.h */
+#include "gtmsource.h" /* needed for jnlpool_addrs typedef */
-GBLREF gd_region *gv_cur_region;
-GBLREF sgmnt_data_ptr_t cs_data;
-GBLREF sgmnt_addrs *cs_addrs;
-GBLREF uint4 dollar_tlevel;
+GBLREF gd_region *gv_cur_region;
+GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF uint4 dollar_tlevel;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
void change_reg(void)
{
@@ -44,11 +48,13 @@ void change_reg(void)
case dba_bg:
cs_addrs = &FILE_INFO(gv_cur_region)->s_addrs;
cs_data = cs_addrs->hdr;
+ if (cs_addrs->jnlpool && (jnlpool != cs_addrs->jnlpool))
+ jnlpool = cs_addrs->jnlpool;
if (dollar_tlevel)
tp_set_sgm();
break;
default:
- GTMASSERT;
+ assertpro(gv_cur_region->dyn.addr->acc_meth != gv_cur_region->dyn.addr->acc_meth);
}
}
diff --git a/sr_port/cli_port.c b/sr_port/cli_port.c
index 4b9ebdd..c30bfa3 100755
--- a/sr_port/cli_port.c
+++ b/sr_port/cli_port.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2010 Fidelity Information Services, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -287,8 +288,9 @@ int cli_parse_two_numbers(char *qual_name, const char delimiter, uint4 *first_nu
char *first_num_str, *second_num_str, *two_num_str_top, *num_endptr;
char two_num_qual_str[128];
unsigned short two_num_qual_len;
- uint4 num;
+ uint4 num, prev_value;
int retval = 0;
+ char *num_ch;
two_num_qual_len = SIZEOF(two_num_qual_str);
if (!cli_get_str(qual_name, two_num_qual_str, &two_num_qual_len))
@@ -296,18 +298,7 @@ int cli_parse_two_numbers(char *qual_name, const char delimiter, uint4 *first_nu
util_out_print("Error parsing !AZ qualifier", TRUE, qual_name);
return 0;
}
-#ifdef VMS
- /* DCL does not strip quotes included in the command line. However, the DEFAULT value (see mupip_cmd.cld) is stripped
- * of quotes. */
- if ('"' == two_num_qual_str[0])
- {
- assert('"' == two_num_qual_str[two_num_qual_len - 1]); /* end quote should exist */
- first_num_str = &two_num_qual_str[1]; /* Skip begin quote */
- two_num_qual_str[two_num_qual_len - 1] = '\0'; /* Zap end quote */
- two_num_qual_len -= 2; /* Quotes gone */
- } else
-#endif
- first_num_str = two_num_qual_str;
+ first_num_str = two_num_qual_str;
for (second_num_str = first_num_str, two_num_str_top = first_num_str + two_num_qual_len;
second_num_str < two_num_str_top && delimiter != *second_num_str;
second_num_str++)
@@ -316,10 +307,16 @@ int cli_parse_two_numbers(char *qual_name, const char delimiter, uint4 *first_nu
*second_num_str++ = '\0';
if (*first_num_str != '\0') /* VMS issues EINVAL if strtoul is passed null string */
{
- errno = 0;
- num = (uint4)STRTOUL(first_num_str, &num_endptr, 10);
- if ((0 == num && (0 != errno || (num_endptr == first_num_str && *first_num_str != '\0'))) ||
- (0 != errno && GTM64_ONLY(UINT_MAX == num) NON_GTM64_ONLY(ULONG_MAX == num)))
+ num = 0;
+ prev_value = 0;
+ for (num_ch = first_num_str; ((*num_ch >= '0' && *num_ch <= '9') && (*num_ch != '\0')); num_ch++)
+ {
+ num = num * 10 + (*num_ch - '0');
+ if (num < prev_value)
+ break;
+ prev_value = num;
+ }
+ if((0 > num || num > INT_MAX) || *num_ch != '\0')
{
util_out_print("Error parsing or invalid parameter for !AZ", TRUE, qual_name);
return 0;
@@ -329,10 +326,16 @@ int cli_parse_two_numbers(char *qual_name, const char delimiter, uint4 *first_nu
} /* else, first number not specified */
if (second_num_str < two_num_str_top && *second_num_str != '\0')
{
- errno = 0;
- num = (uint4)STRTOUL(second_num_str, &num_endptr, 10);
- if ((0 == num && (0 != errno || (num_endptr == second_num_str && *second_num_str != '\0'))) ||
- (0 != errno && GTM64_ONLY(UINT_MAX == num) NON_GTM64_ONLY(ULONG_MAX == num)))
+ num = 0;
+ prev_value = 0;
+ for (num_ch = second_num_str; ((*num_ch >= '0' && *num_ch <= '9') && (*num_ch != '\0')); num_ch++)
+ {
+ num = num * 10 + (*num_ch - '0');
+ if (num < prev_value)
+ break;
+ prev_value = num;
+ }
+ if((0 > num || num > INT_MAX) || *num_ch != '\0')
{
util_out_print("Error parsing or invalid parameter for LOG_INTERVAL", TRUE);
return 0;
diff --git a/sr_port/cliif.h b/sr_port/cliif.h
index 305f885..21e0f14 100755
--- a/sr_port/cliif.h
+++ b/sr_port/cliif.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2005 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -45,6 +46,7 @@ int cli_present(char *entry); /***type int added***/
void cli_str_setup(int length, char *addr);
void cli_strupper(char *sp);
int cli_parse_two_numbers(char *qual_name, const char delimiter, uint4 *first_num, uint4 *second_num);
+boolean_t cli_get_defertime(char *entry, int4 *dst);
#ifdef __osf__
/* N.B. argv is passed in from main (in gtm.c) almost straight from the operating system. */
#pragma pointer_size (save)
diff --git a/sr_port/cmd.c b/sr_port/cmd.c
index dee3187..6d535d1 100644
--- a/sr_port/cmd.c
+++ b/sr_port/cmd.c
@@ -289,6 +289,8 @@ LITDEF struct
advancewindow();
else if ((TK_EOL != TREF(window_token)) || !cmd_data[x].eol_ok)
{
+ if (NULL != oldchain)
+ setcurtchain(oldchain);
stx_error(ERR_SPOREOL);
return FALSE;
}
@@ -301,6 +303,8 @@ LITDEF struct
{ advancewindow();
if ((TK_SPACE == TREF(window_token)) || (TK_EOL == TREF(window_token)))
{
+ if (NULL != oldchain)
+ setcurtchain(oldchain);
stx_error(ERR_EXPR);
return FALSE;
}
diff --git a/sr_port/create_dummy_gbldir.c b/sr_port/create_dummy_gbldir.c
old mode 100755
new mode 100644
index 254223d..1ba18c4
--- a/sr_port/create_dummy_gbldir.c
+++ b/sr_port/create_dummy_gbldir.c
@@ -67,8 +67,8 @@ gd_addr *create_dummy_gbldir(void)
# endif
/* The below code might need corresponding changes if ever the gld format changes hence the GDE_LABEL_LITERAL assert */
- GTM64_ONLY(assert(!MEMCMP_LIT(GDE_LABEL_LITERAL, "GTCGBDUNX111"));)
- NON_GTM64_ONLY(assert(!MEMCMP_LIT(GDE_LABEL_LITERAL, "GTCGBDUNX011"));)
+ GTM64_ONLY(assert(!MEMCMP_LIT(GDE_LABEL_LITERAL, "GTCGBDUNX112"));)
+ NON_GTM64_ONLY(assert(!MEMCMP_LIT(GDE_LABEL_LITERAL, "GTCGBDUNX012"));)
addr = (gd_addr *)malloc(DUMMY_GBLDIR_SIZE);
memset(addr, 0, DUMMY_GBLDIR_SIZE);
addr->max_rec_size = 256;
diff --git a/sr_port/db_auto_upgrade.c b/sr_port/db_auto_upgrade.c
index 715e5a7..4a5fa1d 100644
--- a/sr_port/db_auto_upgrade.c
+++ b/sr_port/db_auto_upgrade.c
@@ -187,8 +187,11 @@ void db_auto_upgrade(gd_region *reg)
db_write_eof_block(udi, udi->fd, csd->blk_size, new_eof, &TREF(dio_buff));
/* GT.M V63001 introduced reservedDBFlags */
csd->reservedDBFlags = 0; /* RDBF_AUTODB = FALSE, RDBF_NOSTATS = FALSE, RDBF_STATSDB = FALSE */
- break;
case GDSMV63001:
+ /* GT.M V63003 introduced read-only databases */
+ csd->read_only = 0;
+ break;
+ case GDSMV63003:
/* Nothing to do for this version since it is GDSMVCURR for now. */
assert(FALSE); /* When this assert fails, it means a new GDSMV* was created, */
break; /* so a new "case" needs to be added BEFORE the assert. */
diff --git a/sr_port/db_csh_getn.c b/sr_port/db_csh_getn.c
index d23eece..07755b9 100644
--- a/sr_port/db_csh_getn.c
+++ b/sr_port/db_csh_getn.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -48,16 +48,16 @@
#include "anticipatory_freeze.h"
#include "wcs_wt.h"
-GBLREF sgmnt_addrs *cs_addrs;
-GBLREF gd_region *gv_cur_region;
-GBLREF uint4 process_id;
-GBLREF unsigned int t_tries;
-GBLREF uint4 dollar_tlevel;
-GBLREF sgm_info *sgm_info_ptr;
-GBLREF boolean_t mu_reorg_process;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF gd_region *gv_cur_region;
+GBLREF uint4 process_id;
+GBLREF unsigned int t_tries;
+GBLREF uint4 dollar_tlevel;
+GBLREF sgm_info *sgm_info_ptr;
+GBLREF boolean_t mu_reorg_process;
#ifdef UNIX
-GBLREF uint4 update_trans;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF uint4 update_trans;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
#endif
#define TRACE_AND_SLEEP(ocnt) \
@@ -139,7 +139,8 @@ cache_rec_ptr_t db_csh_getn(block_id block)
}
}
assert((start_cr <= cr) && ((start_cr + max_ent) > cr));
- dont_flush_buff = reg->read_only || (!(dollar_tlevel ? sgm_info_ptr->update_trans : update_trans) && IS_REPL_INST_FROZEN);
+ dont_flush_buff = reg->read_only || (!(dollar_tlevel ? sgm_info_ptr->update_trans : update_trans)
+ && (DBG_ASSERT(!csa->jnlpool || (csa->jnlpool == jnlpool)) IS_REPL_INST_FROZEN));
INCR_DB_CSH_COUNTER(csa, n_db_csh_getns, 1);
asyncio = csd->asyncio;
DEFER_INTERRUPTS(INTRPT_IN_DB_CSH_GETN, prev_intrpt_state);
diff --git a/sr_port/do_patfixed.c b/sr_port/do_patfixed.c
index 31acc1f..da26ebc 100755
--- a/sr_port/do_patfixed.c
+++ b/sr_port/do_patfixed.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -21,9 +22,12 @@
GBLDEF char codelist[] = PATM_CODELIST;
+GBLREF boolean_t gtm_utf8_mode;
+GBLREF boolean_t run_time;
GBLREF uint4 pat_allmaskbits;
GBLREF uint4 *pattern_typemask;
-GBLREF boolean_t gtm_utf8_mode;
+
+error_def(ERR_PATNOTFOUND);
/* This procedure executes at "run-time". After a pattern in a MUMPS program has been compiled (by patstr and its
* helper-procedures), this procedure is called to evaluate "fixed-length" patterns.
@@ -36,22 +40,19 @@ int do_patfixed(mval *str, mval *pat)
int4 count, tempint;
int4 *min, *reptr, *rtop;
int4 repeat;
- int bit;
int letter;
int repcnt;
int bytelen, charlen, pbytelen, strbytelen;
unsigned char *strptr, *strtop, *strnext, *pstr, *ptop, *pnext;
uint4 code, tempuint, patstream_len;
uint4 *patptr;
- uint4 mbit;
- char buf[CHAR_CLASSES];
boolean_t flags, pvalid, strvalid;
UNICODE_ONLY(
wint_t utf8_codepoint;
)
+ DCL_THREADGBL_ACCESS;
- error_def(ERR_PATNOTFOUND);
-
+ SETUP_THREADGBL_ACCESS;
/* set up information */
MV_FORCE_STR(str);
patptr = (uint4 *)pat->str.addr;
@@ -96,17 +97,7 @@ int do_patfixed(mval *str, mval *pat)
patptr++;
if (!(code & PATM_STRLIT))
{ /* meta character pat atom */
- if (!(code & pat_allmaskbits))
- { /* current table has no characters with this pattern code */
- bytelen = 0;
- for (bit = 0; bit < PAT_MAX_BITS; bit++)
- {
- mbit = (1 << bit);
- if ((mbit & code & PATM_LONGFLAGS) && !(mbit & pat_allmaskbits))
- buf[bytelen++] = codelist[patmaskseq(mbit)];
- }
- rts_error(VARLSTCNT(4) ERR_PATNOTFOUND, 2, bytelen, buf);
- }
+ ENSURE_PAT_IN_TABLE(code);
if (!gtm_utf8_mode)
{
for (repcnt = 0; repcnt < repeat; repcnt++)
diff --git a/sr_port/do_pattern.c b/sr_port/do_pattern.c
index 4bb5e67..befcfed 100755
--- a/sr_port/do_pattern.c
+++ b/sr_port/do_pattern.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001, 2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -23,22 +23,23 @@
#include "gtm_utf8.h"
#endif
-GBLREF uint4 pat_allmaskbits;
-GBLREF uint4 *pattern_typemask;
+GBLREF boolean_t gtm_utf8_mode;
+GBLREF boolean_t run_time;
GBLREF char codelist[];
GBLREF int4 curalt_depth; /* depth of alternation nesting */
GBLREF int4 do_patalt_calls[PTE_MAX_CURALT_DEPTH]; /* number of calls to do_patalt() */
GBLREF int4 do_patalt_hits[PTE_MAX_CURALT_DEPTH]; /* number of pte_csh hits in do_patalt() */
-GBLREF pte_csh *pte_csh_array[PTE_MAX_CURALT_DEPTH]; /* pte_csh array (per curalt_depth) */
GBLREF int4 pte_csh_cur_size[PTE_MAX_CURALT_DEPTH]; /* current pte_csh size (per curalt_depth) */
GBLREF int4 pte_csh_alloc_size[PTE_MAX_CURALT_DEPTH]; /* current allocated pte_csh size (per curalt_depth) */
GBLREF int4 pte_csh_entries_per_len[PTE_MAX_CURALT_DEPTH]; /* current number of entries per len */
GBLREF int4 pte_csh_tail_count[PTE_MAX_CURALT_DEPTH]; /* count of non 1-1 corresponding pte_csh_array members */
-GBLREF pte_csh *cur_pte_csh_array; /* copy of pte_csh_array corresponding to curalt_depth */
-GBLREF int4 cur_pte_csh_size; /* copy of pte_csh_cur_size corresponding to curalt_depth */
+GBLREF int4 cur_pte_csh_size; /* copy of pte_csh_cur_size corresponding to curalt_depth */
GBLREF int4 cur_pte_csh_entries_per_len; /* copy of pte_csh_entries_per_len corresponding to curalt_depth */
GBLREF int4 cur_pte_csh_tail_count; /* copy of pte_csh_tail_count corresponding to curalt_depth */
-GBLREF boolean_t gtm_utf8_mode;
+GBLREF pte_csh *cur_pte_csh_array; /* copy of pte_csh_array corresponding to curalt_depth */
+GBLREF pte_csh *pte_csh_array[PTE_MAX_CURALT_DEPTH]; /* pte_csh array (per curalt_depth) */
+GBLREF uint4 pat_allmaskbits;
+GBLREF uint4 *pattern_typemask;
/* This procedure executes at "run-time". After a pattern in a MUMPS program has been compiled (by patstr and
* its helper-procedures), this procedure can be called to evaluate "variable-length" patterns.
@@ -71,17 +72,18 @@ int do_pattern(mval *str, mval *pat)
uint4 code, tempuint;
uint4 *dfa_ptr, dfa_val;
uint4 *patptr;
- uint4 mbit, flags;
+ uint4 flags;
int4 *min, *max, *size;
int4 mintmp, maxtmp, sizetmp;
- int alt, bit;
- char buf[CHAR_CLASSES];
+ int alt;
boolean_t pte_csh_init;
boolean_t match;
UNICODE_ONLY(
wint_t utf8_codepoint;
)
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
/* set up information */
MV_FORCE_STR(str);
patptr = (uint4 *) pat->str.addr;
@@ -209,17 +211,7 @@ int do_pattern(mval *str, mval *pat)
}
} else if (!(code & PATM_STRLIT))
{ /* meta character pat atom */
- if (!(code & pat_allmaskbits))
- { /* current table has no characters with this pattern code */
- bytelen = 0;
- for (bit = 0; bit < PAT_MAX_BITS; bit++)
- {
- mbit = (1 << bit);
- if ((mbit & code & PATM_LONGFLAGS) && !(mbit & pat_allmaskbits))
- buf[bytelen++] = codelist[patmaskseq(mbit)];
- }
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_PATNOTFOUND, 2, bytelen, buf);
- }
+ ENSURE_PAT_IN_TABLE(code);
if (!gtm_utf8_mode)
{
for (unit = 0; unit < rept; unit++)
diff --git a/sr_port/dpgbldir.c b/sr_port/dpgbldir.c
index b0ede9e..1d2f14f 100644
--- a/sr_port/dpgbldir.c
+++ b/sr_port/dpgbldir.c
@@ -177,7 +177,7 @@ gd_addr *gd_load(mstr *v)
trans_num *array;
# ifdef DEBUG
boolean_t prevMapIsSpanning, currMapIsSpanning, gdHasSpanGbls;
- boolean_t isSpannedReg[256]; /* currently we allow for a max of 256 regions in this dbg code */
+ boolean_t isSpannedReg[512]; /* allow up to 256 (* 2 for implicit statsdb) regions in dbg logic */
gd_region *base_reg, *stats_reg;
uint4 reg_index;
unsigned char regname[MAX_MIDENT_LEN + 1];
@@ -218,6 +218,9 @@ gd_addr *gd_load(mstr *v)
table->regions = (struct gd_region_struct *)((UINTPTR_T)table->regions + (UINTPTR_T)table);
table->segments = (struct gd_segment_struct *)((UINTPTR_T)table->segments + (UINTPTR_T)table);
table->gblnames = (struct gd_gblname_struct *)((UINTPTR_T)table->gblnames + (UINTPTR_T)table);
+ table->instinfo = (struct gd_inst_info_struct *)((UINTPTR_T)table->instinfo + (UINTPTR_T)table);
+ if (table == (gd_addr *)table->instinfo)
+ table->instinfo = NULL;
table->end = (table->end + (UINTPTR_T)table);
n_regions = table->n_regions;
for (reg = table->regions, reg_top = reg + n_regions; reg < reg_top; reg++)
@@ -225,7 +228,7 @@ gd_addr *gd_load(mstr *v)
t_offset = reg->dyn.offset;
reg->dyn.addr = (gd_segment *)((char *)table + t_offset);
# ifdef DEBUG
- assert((reg - table->regions) < ARRAYSIZE(isSpannedReg));
+ assert((reg - table->regions) <= ARRAYSIZE(isSpannedReg));
isSpannedReg[reg - table->regions] = FALSE;
# endif
reg->owning_gd = table; /* set backpointer from region to owning gbldir */
diff --git a/sr_port/dse.hlp b/sr_port/dse.hlp
index e51fd8c..53d8e29 100755
--- a/sr_port/dse.hlp
+++ b/sr_port/dse.hlp
@@ -558,8 +558,8 @@
-FR[EEZE]=value
-FU[LLY_UPGRADED]=boolean
-GV[STATSRESET]
- -HARD_SPIN_CPUNT=Mutex-hard-spin-sount
- -[HEXLOCATION]=value
+ -HA[RD_SPIN_COUNT]=Mutex-hard-spin-count
+ -HE[XLOCATION]=value
-INT[ERRUPTED_RECOV]=boolean
-JNL_YIELD_LIMIT=journal-yeild-limit
-KE[Y_MAX_SIZE]=key-max-size
@@ -710,9 +710,9 @@
-AB[ANDONED_KILLS]=value
Changes the value of the Abandoned Kills field. The value can be "NONE" or
- a positive integer.
+ a decimal positive integer.
- Use only with: -FILEHEADER; decimal
+ Use only with: -FILEHEADER
-BLK[_SIZE]=block_size
@@ -735,7 +735,7 @@
-BLO[CKS_FREE]=free blocks
- Changes the free blocks field of the current file.
+ Changes the hexidecimal free blocks field of the current file.
Use this to correct a value that MUPIP INTEG reports as needing a
correction, but note that the "correct" value reported by INTEG may go
@@ -755,15 +755,15 @@
-D[ATABASE]=transaction_number
- Changes the transaction number in the file header of the last
+ Changes the hexidecimal transaction number in the file header of the last
comprehensive backup to the value specified. Use this qualifier only in
conjunction with the -FILEHEADER qualifier. For compatibility issues with
prior versions, this can still be specified as -B_COMPREHENSIVE.
-B_R[ECORD]=transaction_number
- Changes the transaction number in the file header field that maintains
- this information about the last -RECORD backup.
+ Changes the hexidecimal transaction number in the file header field that
+ maintains this information about the last -RECORD backup.
-CO[RRUPT_FILE]=boolean
@@ -787,14 +787,14 @@
-COM[MITWAIT_SPIN_COUNT]=value
- Specifies the number of times a GT.M process waiting for control of a
- block to complete a block update should spin before yielding the CPU when
- GT.M runs on SMP machines. When run on a uniprocessor system, GT.M ignores
- this parameter. On SMP systems, when a process needs a critical section
- that another process has, if critical sections are short (as they are by
- design in GT.M), spinning a little with the expectation that the process
- with the critical section will release it shortly provides a way to
- enhance performance at the cost of increased CPU usage. Eventually, a
+ Specifies the decimal number of times a GT.M process waiting for control
+ of a block to complete a block update should spin before yielding the CPU
+ when GT.M runs on SMP machines. When run on a uniprocessor system, GT.M
+ ignores this parameter. On SMP systems, when a process needs a critical
+ section that another process has, if critical sections are short (as they
+ are by design in GT.M), spinning a little with the expectation that the
+ process with the critical section will release it shortly provides a way
+ to enhance performance at the cost of increased CPU usage. Eventually, a
process awaiting a critical section yields the CPU if spinning for a
little does not get it the needed critical section. Note that on heavily
loaded systems, increasing COMMITWAIT_SPIN_COUNT may not trade off CPU for
@@ -808,7 +808,7 @@
-CU[RRENT_TN]=transaction_number
- Changes the current transaction number for the current region.
+ Changes the hexidecimal current transaction number for the current region.
o Raising the -CURRENT_TN can correct "block transaction number too
large" errors
@@ -821,10 +821,10 @@
-DECLOCATION
- Specifies an offset with the file header. If -VALUE is specified, GT.M
- puts it at that location.
+ Specifies an offset with the file header. If -VALUE is specified (in
+ decimal), GT.M puts it at that location.
- Use only with: -FILEHEADER; decimal
+ Use only with: -FILEHEADER
-E[NCRYPTION_HASH]
@@ -886,10 +886,10 @@
-HEXLOCATION
- Specifies an offset with the file header. If -VALUE is specified, GT.M
- puts it at that location.
+ Specifies a hexadecimal offset with the file header. If -VALUE is
+ specified, GT.M puts it at that location.
- Use only with: -FILEHEADER; hexadecimal
+ Use only with: -FILEHEADER
-INT[ERRUPTED_RECOV]=boolean
@@ -910,14 +910,14 @@
region. This prepares for future MUPIP CREATEs and performs a consistency
check on the key and record size values.
- Use only with: -FILEHEADER; decimal
+ Use only with: -FILEHEADER
-KI[LL_IN_PROG]=value
Changes the value of the KILLs in progress field. The value can be "NONE"
- or a positive integer.
+ or a positive decimal integer.
- Use only with: -FILEHEADER; decimal
+ Use only with: -FILEHEADER
-N[ULL_SUBSCRIPTS]=value
@@ -976,52 +976,64 @@
-RESYNC_S[EQNO]=sequence-number
- In an LMS environment, this sets the "Resync Seqno" field.
+ In an LMS environment, this sets the hexidecimal value of the "Resync
+ Seqno" field.
-RESYNC_T[N]=sequence-number
- In an LMS environment, this sets the "Resync transaction" field.
+ In an LMS environment, this sets the hexidecimal value ofthe "Resync
+ transaction" field.
-SPIN_SLEEP_MASK]=hexadecimal-mask
- Changes the Spin sleep time mask that controls the maximum time in
- nanoseconds the process sleeps on a sleep spin; zero (0), the default
- causes the process to just yield to the OS scheduler.
+ Changes the hexadecimal Spin sleep time mask that controls the maximum
+ time in nanoseconds the process sleeps on a sleep spin; zero (0), the
+ default causes the process to just yield to the OS scheduler.
- Use only with: -FILEHEADER; hexa
+ Use only with: -FILEHEADER
-SLEE[P_SPIN_COUNT]=integer
- Changes the Mutex Sleep Spin Count that controls the number of times a
- process waiting on a shared resource (usually a database) suspends its
- activity after exhausting its Mutex Hard Spin Count and before enquing
+ Changes the hexadecimal Mutex Sleep Spin Count that controls the number of
+ times a process waiting on a shared resource (usually a database) suspends
+ its activity after exhausting its Mutex Hard Spin Count and before enquing
itself to be awakened by a process releasing the resource
- Use only with: -FILEHEADER; hexa
+ Use only with: -FILEHEADER
- -STRM_NUM=stream-number -STRM_R[EG_SEQNO]=str_num's_region_sequence_number
+ -[NO]STD[NULLCOL]
- Changes the Stream and its Reg Seqno. Use -STRM_NUM and -STRM_REG_SEQNO
- together as part of the same CHANGE -FILEHEADER command.
+ Changes the collation of empty string ("NULL") subscripts for the database
+ file. Although it is not the default, STDNULLCOLL is required with certain
+ other characteristics, and highly recommended in any case. If you change
+ this when there are existing "NULL" subscripts the results may be
+ problematic. FIS recommends you establish this characteristic with GDE and
+ load data with a consistent setting.
- Use only with: -FILEHEADER; hexa
+ Use only with: -FILEHEADER
- -TI[MERS_PENDING]=timers_pending
+ -STRM_NUM=stream-number -STRM_R[EG_SEQNO]=str_num's_region_sequence_number
+
+ Changes the hexadecimal values of Stream and its Reg Seqno. Use -STRM_NUM
+ and -STRM_REG_SEQNO together as part of the same CHANGE -FILEHEADER
+ command.
+
+ Use only with: -FILEHEADER
-TI[MERS_PENDING]=timers_pending
- Sets a field that tracks the number of processes considering a timed
- flush. Proper values are 0, 1, and 2.
+ Sets a field that tracks the decimal number of processes considering a
+ timed flush. Proper values are 0, 1, and 2.
Use the CHANGE -TIMERS_PENDING qualifier only upon receiving instructions
from FIS.
- Use only with: -FILEHEADER; decimal
+ Use only with: -FILEHEADER
-TO[TAL_BLKS]=total_blocks
- Changes the total blocks field of the current file. Use only with:
- -FILEHEADER; decimal
+ Changes the hexidecimal total blocks field of the current file. Use only
+ with: -FILEHEADER
**Caution**
@@ -2963,7 +2975,7 @@
**Note**
- This help file is a concise representation of revision V6.3-001 of the
+ This help file is a concise representation of revision V6.3-003 of the
UNIX Administration and Operations Guide. To obtain a copy of the current
revision, go to www.fis-gtm.com and then click on the User Documentation
tab.
diff --git a/sr_port/dse_dmp_fhead.c b/sr_port/dse_dmp_fhead.c
index 475b4f9..cd885f6 100755
--- a/sr_port/dse_dmp_fhead.c
+++ b/sr_port/dse_dmp_fhead.c
@@ -166,9 +166,9 @@ void dse_dmp_fhead (void)
util_out_print(" Freeze match 0x!XL", FALSE, csd->image_count ? csd->image_count : 0);
util_out_print(" Flush trigger !12UL", TRUE, csd->flush_trigger);
util_out_print(" Freeze online !AD", FALSE, 11,
- (csd->freeze_online) ? " TRUE" : " FALSE");
+ (cnl->freeze_online) ? " TRUE" : " FALSE");
util_out_print(" Freeze online autorelease !AD", TRUE, 5,
- (csd->freeze_online & CHILLED_AUTORELEASE_MASK) ? " TRUE" : "FALSE");
+ (cnl->freeze_online & CHILLED_AUTORELEASE_MASK) ? " TRUE" : "FALSE");
util_out_print(" Current transaction 0x!16 at XQ", FALSE, &csa->ti->curr_tn);
util_out_print(" No. of writes/flush !12UL", TRUE, csd->n_wrt_per_flu);
util_out_print(" Maximum TN 0x!16 at XQ", FALSE, &csd->max_tn);
@@ -243,7 +243,8 @@ void dse_dmp_fhead (void)
(RDBF_AUTODB & csd->reservedDBFlags) ? " TRUE" : "FALSE");
util_out_print(" DB shares gvstats !AD", TRUE, 5,
! (RDBF_NOSTATS & csd->reservedDBFlags) ? " TRUE" : "FALSE");
- util_out_print(" LOCK shares DB critical section !AD", TRUE, 5, csd->lock_crit_with_db ? " TRUE" : "FALSE");
+ util_out_print(" LOCK shares DB critical section !AD", FALSE, 5, csd->lock_crit_with_db ? " TRUE" : "FALSE");
+ util_out_print(" Read Only !AD", TRUE, 3, csd->read_only ? " ON" : "OFF");
}
if (CLI_PRESENT == cli_present("ALL"))
{ /* Only dump if -/ALL as if part of above display */
diff --git a/sr_port/dse_f_reg.c b/sr_port/dse_f_reg.c
old mode 100755
new mode 100644
index 2625353..f9b8776
--- a/sr_port/dse_f_reg.c
+++ b/sr_port/dse_f_reg.c
@@ -84,7 +84,7 @@ void dse_f_reg(void)
BASEDBREG_TO_STATSDBREG(regptr, statsDBreg);
assert(NULL != statsDBreg);
if (!statsDBreg->open)
- gv_init_reg(statsDBreg);
+ gv_init_reg(statsDBreg, NULL);
regptr = statsDBreg;
} else
{
@@ -123,6 +123,6 @@ void dse_f_reg(void)
util_out_print("!/File !_!AD", TRUE, DB_LEN_STR(gv_cur_region));
util_out_print("Region!_!AD!/", TRUE, REG_LEN_STR(gv_cur_region));
patch_curr_blk = get_dir_root();
- gv_init_reg(gv_cur_region);
+ gv_init_reg(gv_cur_region, NULL);
return;
}
diff --git a/sr_port/dse_integ.c b/sr_port/dse_integ.c
index f9f63fd..e57a734 100755
--- a/sr_port/dse_integ.c
+++ b/sr_port/dse_integ.c
@@ -70,7 +70,7 @@ void dse_integ(void)
key_buff[key_len++] = *r_ptr;;
gvt = dse_find_gvt(gv_cur_region, (char *)key_buff, (key_len));
}
- if (TRUE == cert_blk(gv_cur_region, blk, (blk_hdr_ptr_t)bp, 0, FALSE, gvt))
+ if (TRUE == cert_blk(gv_cur_region, blk, (blk_hdr_ptr_t)bp, 0, RTS_ERROR_ON_CERT_FAIL, gvt))
util_out_print("!/ No errors detected.!/", TRUE);
else
util_out_print(NULL, TRUE);
diff --git a/sr_port/dsewrap.mpt b/sr_port/dsewrap.mpt
index 42dc7fe..a3a40d2 100644
--- a/sr_port/dsewrap.mpt
+++ b/sr_port/dsewrap.mpt
@@ -1,6 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright 2012, 2013 Fidelity Information Services, Inc. ;
+; Copyright (c) 2012-2017 Fidelity National Information ;
+; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
; of its copyright holder(s), and is made available ;
@@ -146,7 +147,7 @@ parsefhead(output,active)
new error,debug,fcnt,field,file,i,line,parsed,region,value
set error=0
if $data(%DSEWRAP("debug")) set debug=$increment(%DSEWRAP("debug"))
- if $length($etrap)=0 set $etrap="use $p zshow ""*"" halt"
+ if $length($etrap)=0 set $etrap="use $principal zshow ""*"" set $etrap=""zgoto 0"" zhalt 1"
;
for i=1:1 read line(i):5 quit:error quit:$zeof quit:$select($data(active)=0:0,line(i)["DSE>":1,1:0) do
. if ($test=0)&($length(line(i))=0) write !
@@ -212,12 +213,12 @@ addfield(var,region,field,value)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
errtrap
use $p
- set $etrap="use $principal write $zstatus,! zhalt 1"
+ set $etrap="use $principal write $zstatus,! set $etrap=""zgoto 0"" zhalt 1"
set userecode=$piece($ecode,",",2)
set errtext=$select(userecode?1"U"3N:$text(@userecode),1:"")
if $length(errtext) write $text(+0),@$piece(errtext,";",2),!
else write $zstatus,!
- if $zlevel<5 zhalt +$extract(userecode,2,$length(userecode))
+ if $zlevel<5 set $etrap="zgoto 0" zhalt +$extract(userecode,2,$length(userecode))
quit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/sr_port/dumpfhead.mpt b/sr_port/dumpfhead.mpt
index 9375fce..ac2cd15 100644
--- a/sr_port/dumpfhead.mpt
+++ b/sr_port/dumpfhead.mpt
@@ -81,6 +81,7 @@ getfields(fldarray,dbname)
if $zlength(fhead)'=8192 do
. write "GETFIELDS: Error - unable to read fileheader from ",dbname,!
. write:0'=$data(fhead) "GETFIELDS: Read only ",$zlength(fhead)," bytes",!
+ . set $etrap="zgoto 0"
. zhalt 1
;
; Determine if this is a valid database header. Note that we don't
@@ -90,6 +91,7 @@ getfields(fldarray,dbname)
set label=$$formatfld($zextract(fhead,1,12),"char")
if (label'["GDSDYNUNX02")&(label'["GDSDYNUNX03") do
. write "GETFIELDS: Error - invalid fileheader format from ",dbname,!
+ . set $etrap="zgoto 0"
. zhalt 1
;
; Now parse out the fields
@@ -119,6 +121,7 @@ eof
close dbname
badopen
write "The file """,dbname,""" had error: "
+ set $etrap="zgoto 0"
zmessage +$zstatus
zhalt 1
diff --git a/sr_port/emit_code.c b/sr_port/emit_code.c
index 0167ed9..265fa68 100644
--- a/sr_port/emit_code.c
+++ b/sr_port/emit_code.c
@@ -300,7 +300,7 @@ void trip_gen(triple *ct)
}
} else
{
- assert((0 < tsp) && (511 >= *tsp));
+ assert((NULL != tsp) && (511 >= *tsp));
tsp = emit_vax_inst((short *)tsp, &saved_opr[0], sopr);
# ifdef DEBUG
if (CGP_ASSEMBLY == cg_phase)
diff --git a/sr_port/entryref.c b/sr_port/entryref.c
index a15971d..19a9542 100644
--- a/sr_port/entryref.c
+++ b/sr_port/entryref.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -124,8 +124,11 @@ triple *entryref(opctype op1, opctype op2, mint commargcode, boolean_t can_comma
labname.len = 0;
break;
case TK_PLUS:
- stx_error(ERR_LABELEXPECTED);
- return NULL;
+ if (labref)
+ { /* extrinsics require a label */
+ stx_error(ERR_LABELEXPECTED);
+ return NULL;
+ } /* WARNING fallthrough possible */
default:
labname.len = 0;
label.oprclass = NO_REF;
@@ -205,7 +208,7 @@ triple *entryref(opctype op1, opctype op2, mint commargcode, boolean_t can_comma
}
} else
{
- if ((NO_REF == label.oprclass) && (0 == labname.len))
+ if ((NO_REF == label.oprclass) && (0 == labname.len) && (NO_REF == offset.oprclass))
{
stx_error(ERR_LABELEXPECTED);
return NULL;
diff --git a/sr_port/error_trap.h b/sr_port/error_trap.h
index 3271c1d..b706f7b 100755
--- a/sr_port/error_trap.h
+++ b/sr_port/error_trap.h
@@ -1,5 +1,6 @@
/****************************************************************
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -11,9 +12,9 @@
#ifndef ERROR_TRAP_H
#define ERROR_TRAP_H
-#define IS_ETRAP (err_act == &dollar_etrap.str)
-#define ETRAP_IN_EFFECT (!ztrap_explicit_null && (0 == dollar_ztrap.str.len))
-#define NULLIFY_TRAP(TRAP) {TRAP.mvtype = MV_STR; TRAP.str.len = 0;}
+#define IS_ETRAP (&(TREF(dollar_etrap)).str == err_act)
+#define ETRAP_IN_EFFECT (!ztrap_explicit_null && (0 == (TREF(dollar_ztrap)).str.len))
+#define NULLIFY_TRAP(TRAP) {(TRAP).mvtype = MV_STR; (TRAP).str.len = 0;}
#define DOLLAR_ECODE_MAXINDEX 32 /* maximum of 32 ecodes in $ECODE */
#define DOLLAR_STACK_MAXINDEX 256 /* maximum of 256 levels will be stored for $STACK(level) */
diff --git a/sr_port/expritem.c b/sr_port/expritem.c
index eb05536..3cfd298 100755
--- a/sr_port/expritem.c
+++ b/sr_port/expritem.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -104,6 +104,7 @@ LITDEF nametabent svn_names[] =
,{ 3, "ZSO*" }
,{ 2, "ZS" }, { 4, "ZSTA*" }
,{ 5, "ZSTEP"}
+ ,{ 5, "ZSTRP*"}
,{ 3, "ZSY*"}
,{ 4, "ZTCO*"}
,{ 4, "ZTDA*"}
@@ -128,7 +129,7 @@ LITDEF nametabent svn_names[] =
LITDEF unsigned char svn_index[27] = {
0, 0, 0, 0, 2, 8, 8, 8, 10, /* a b c d e f g h i */
12, 14 ,16, 16, 16, 16, 16, 18, 20, /* j k l m n o p q r */
- 22, 28, 34 ,34, 34, 34, 35, 36, 98 /* s t u v w x y z ~ */
+ 22, 28, 34 ,34, 34, 34, 35, 36, 99 /* s t u v w x y z ~ */
};
/* These entries correspond to the entries in the svn_names array */
@@ -191,6 +192,7 @@ LITDEF svn_data_type svn_data[] =
,{ SV_ZSOURCE, TRUE, ALL_SYS }
,{ SV_ZSTATUS, TRUE, ALL_SYS }, { SV_ZSTATUS, TRUE, ALL_SYS }
,{ SV_ZSTEP, TRUE, ALL_SYS }
+ ,{ SV_ZSTRPLLIM, TRUE, ALL_SYS }
,{ SV_ZSYSTEM, FALSE, ALL_SYS }
,{ SV_ZTCODE, FALSE, TRIGGER_OS }
,{ SV_ZTDATA, FALSE, TRIGGER_OS }
@@ -547,7 +549,7 @@ int expritem(oprtype *a)
if (TK_LPAREN == TREF(director_token))
{
index = namelook(fun_index, fun_names, (TREF(window_ident)).addr, (TREF(window_ident)).len);
- if (!gtm_utf8_mode)
+ if ((-1 != index) && !gtm_utf8_mode)
{ /** When possible, update opcodes rather than mess with xfer table */
switch (fun_data[index].opcode)
{
diff --git a/sr_port/f_select.c b/sr_port/f_select.c
index 79b9085..60e54cb 100644
--- a/sr_port/f_select.c
+++ b/sr_port/f_select.c
@@ -97,6 +97,11 @@ int f_select(oprtype *a, opctype op)
SELECT_CLEANUP;
if (shifting)
setcurtchain(oldchain);
+ else if ((NULL != savechain)
+ /* the below guards against returning to a chain that should
+ * be abandoned because of an error */
+ && (((TREF(curtchain)) != &t_orig) || (!ALREADY_RTERROR)))
+ setcurtchain(savechain);
return FALSE;
}
if (TK_COLON != TREF(window_token))
@@ -104,6 +109,11 @@ int f_select(oprtype *a, opctype op)
SELECT_CLEANUP;
if (shifting)
setcurtchain(oldchain);
+ else if ((NULL != savechain)
+ /* the below guards against returning to a chain that should
+ * be abandoned because of an error */
+ && (((TREF(curtchain)) != &t_orig) || (!ALREADY_RTERROR)))
+ setcurtchain(savechain);
stx_error(ERR_COLON);
return FALSE;
}
@@ -131,8 +141,9 @@ int f_select(oprtype *a, opctype op)
if (shifting)
setcurtchain(oldchain);
else if ((NULL != savechain)
- /* the below guards against returning to a chain that should be abandoned because of an error */
- && (((TREF(curtchain)) != &t_orig) || (!ALREADY_RTERROR)))
+ /* the below guards against returning to a chain that should
+ * be abandoned because of an error */
+ && (((TREF(curtchain)) != &t_orig) || (!ALREADY_RTERROR)))
setcurtchain(savechain);
return FALSE;
}
diff --git a/sr_port/fullbool.h b/sr_port/fullbool.h
index 64c77ac..8dd708c 100644
--- a/sr_port/fullbool.h
+++ b/sr_port/fullbool.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2010, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2010-2018 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -25,4 +26,13 @@ enum gtm_se_type
SE_WARN /* like STD but give compiler warnings when it makes a difference */
};
+#define TRACK_JMP_TARGET(T, REF0) \
+MBSTART { /* T is triple to tag; REF0 is the new target triple with which it's tagged */ \
+ tripbp = &T->jmplist; /* borrow jmplist to track jmp targets */ \
+ assert(NULL == tripbp->bpt); \
+ assert((tripbp == tripbp->que.fl) && (tripbp == tripbp->que.bl)); \
+ tripbp->bpt = REF0; /* point to the new location */ \
+ dqins(TREF(bool_targ_ptr), que, tripbp); /* queue jmplist for clean-up */ \
+} MBEND
+
#endif /* FULLBOOL_H_INCLUDED */
diff --git a/sr_port/gbldefs.c b/sr_port/gbldefs.c
index b39ffb6..d079395 100644
--- a/sr_port/gbldefs.c
+++ b/sr_port/gbldefs.c
@@ -218,13 +218,10 @@ GBLDEF MSTR_CONST(default_sysid, "gtm_sysid");
GBLDEF mval dollar_zgbldir,
dollar_zsource = DEFINE_MVAL_STRING(MV_STR, 0, 0, 0, NULL, 0, 0),
dollar_zstatus,
- dollar_zstep = DEFINE_MVAL_STRING(MV_STR | MV_NM | MV_INT | MV_NUM_APPROX, 0, 0, 1, "B", 0, 0),
- dollar_ztrap,
ztrap_pop2level = DEFINE_MVAL_STRING(MV_NM | MV_INT, 0, 0, 0, 0, 0, 0),
zstep_action,
dollar_system,
dollar_estack_delta = DEFINE_MVAL_STRING(MV_STR, 0, 0, 0, NULL, 0, 0),
- dollar_etrap,
dollar_zerror = DEFINE_MVAL_STRING(MV_STR, 0, 0, DEFAULT_ZERROR_LEN, DEFAULT_ZERROR_STR, 0, 0),
dollar_zyerror,
dollar_ztexit = DEFINE_MVAL_STRING(MV_STR, 0, 0, 0, NULL, 0, 0);
@@ -365,15 +362,13 @@ GBLDEF int gv_fillfactor = 100,
GBLDEF uint4 update_array_size,
cumul_update_array_size; /* the current total size of the update array */
GBLDEF kill_set *kill_set_tail;
-GBLDEF boolean_t pool_init;
+GBLDEF int pool_init;
GBLDEF boolean_t is_src_server;
GBLDEF boolean_t is_rcvr_server;
GBLDEF jnl_format_buffer *non_tp_jfb_ptr;
GBLDEF boolean_t dse_running;
-GBLDEF jnlpool_addrs jnlpool;
-GBLDEF jnlpool_ctl_ptr_t jnlpool_ctl;
-GBLDEF sm_uc_ptr_t jnldata_base;
-GBLDEF int4 jnlpool_shmid = INVALID_SHMID;
+GBLDEF jnlpool_addrs_ptr_t jnlpool;
+GBLDEF jnlpool_addrs_ptr_t jnlpool_head;
GBLDEF recvpool_addrs recvpool;
GBLDEF int recvpool_shmid = INVALID_SHMID;
GBLDEF int gtmsource_srv_count;
@@ -419,7 +414,6 @@ GBLDEF sgmnt_addrs *kip_csa;
GBLDEF boolean_t need_kip_incr;
GBLDEF int merge_args;
GBLDEF merge_glvn_ptr mglvnp;
-GBLDEF int ztrap_form;
GBLDEF boolean_t ztrap_new;
GBLDEF int4 wtfini_in_prog;
#ifdef DEBUG
@@ -974,8 +968,7 @@ GBLDEF mval *dollar_ztdata,
*dollar_ztupdate,
*dollar_ztvalue,
dollar_ztwormhole = DEFINE_MVAL_STRING(MV_STR, 0, 0, 0, NULL, 0, 0),
- dollar_ztslate = DEFINE_MVAL_STRING(MV_STR, 0, 0, 0, NULL, 0, 0),
- gtm_trigger_etrap; /* Holds $ETRAP value for inside trigger */
+ dollar_ztslate = DEFINE_MVAL_STRING(MV_STR, 0, 0, 0, NULL, 0, 0);
GBLDEF int tprestart_state; /* When triggers restart, multiple states possible. See tp_restart.h */
GBLDEF boolean_t skip_INVOKE_RESTART; /* set to TRUE if caller of op_tcommit/t_retry does not want it to
* use the INVOKE_RESTART macro (which uses an rts_error to trigger
@@ -1064,6 +1057,9 @@ GBLDEF boolean_t jnlpool_init_needed; /* TRUE if jnlpool_init should be done at
* anticipatory freeze supported configurations). The variable is set
* explicitly by interested commands (eg., MUPIP REORG).
*/
+GBLDEF char repl_instfilename[MAX_FN_LEN + 1]; /* save first instance */
+GBLDEF char repl_inst_name[MAX_INSTNAME_LEN]; /* for syslog */
+GBLDEF gd_addr *repl_inst_from_gld; /* if above obtained from directory */
GBLDEF boolean_t span_nodes_disallowed; /* Indicates whether spanning nodes are not allowed. For example,
* they are not allowed for GT.CM OMI and GNP. */
GBLDEF boolean_t argumentless_rundown;
diff --git a/sr_port/gbldefs_usr_share.c b/sr_port/gbldefs_usr_share.c
index 7c3964f..af718da 100755
--- a/sr_port/gbldefs_usr_share.c
+++ b/sr_port/gbldefs_usr_share.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2002 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2002-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -25,7 +26,7 @@
GBLDEF gd_region *gv_cur_region;
GBLDEF gv_key *gv_altkey, *gv_currkey;
-GBLDEF bool caller_id_flag = TRUE;
+GBLDEF boolean_t caller_id_flag = TRUE;
#ifdef INT8_SUPPORTED
GBLDEF const seq_num seq_num_zero = 0;
diff --git a/sr_port/gde.hlp b/sr_port/gde.hlp
index b0d0e95..0e173fb 100755
--- a/sr_port/gde.hlp
+++ b/sr_port/gde.hlp
@@ -3,7 +3,9 @@
The GT.M Global Directory Editor (GDE) is a utility for creating,
examining, and modifying a global directory. GDE is a program written in M
- and you can invoke it from the shell with $gtm_dist/mumps -run ^GDE.
+ and you can invoke it from the shell with $gtm_dist/mumps -run ^GDE. If
+ you invoke it from the shell, GDE returns a status indicating success (0)
+ or an issue (non-zero).
Because GDE is an M program, you can also invoke GDE from a GT.M process
with DO ^GDE. If you invoke GDE with a DO and modify the map of global
@@ -553,10 +555,10 @@
The format of the ADD command is one of the following:
+ A[DD] -G[BLNAME] global-name [-GBLNAME-qualifier ...]
A[DD] -N[AME] namespace -R[EGION]=region-name
A[DD] -R[EGION] region-name -D[YNAMIC]=segment-name [-REGION-qualifier...]
A[DD] -S[EGMENT] segment-name [-SEGMENT-qualifier...] -F[ILE_NAME]=file-name
- A[DD] -G[BLNAME] global-name [-GBLNAME-qualifier ...]
The ADD command requires specification of an object-type and object-name.
GDE supplies default values from the templates for qualifiers not
@@ -732,24 +734,27 @@
Change
The CHANGE command alters the name-to-region or region-to-segment mapping
- and /or the environment for a region or segment.
+ and /or the environment for a region or segment. It may also alter the
+ association of a global directory with a replication instance file.
The format of the CHANGE command is:
- C[HANGE]-N[AME] namespace -R[EGION]=new-region
- C[HANGE]-R[EGION] region-name [-REGION-qualifier...]
- C[HANGE]-S[EGMENT] segment-name [-SEGMENT-qualifier...]
C[HANGE] -G[BLNAME] -C[OLLATION]=collation_number
+ C[HANGE] -I[INSTANCE] -F[ILE_NAME=[repl_inst_filename|""]
+ C[HANGE] -N[AME] namespace -R[EGION]=new-region
+ C[HANGE] -R[EGION] region-name [-REGION-qualifier...]
+ C[HANGE] -S[EGMENT] segment-name [-SEGMENT-qualifier...]
The CHANGE command requires specification of an object-type and
object-name.
- Once you exit GDE, mapping changes take effect for any subsequent image
- activation (for example, the next RUN or the mumps -direct command).
- Changes to database parameters only take effect for new database files
- created with subsequent MUPIP CREATE commands that use the modified Global
- Directory. Use the MUPIP SET command (or in some cases DSE) to change
- characteristics of existing database files.
+ Once you exit GDE, mapping changes, including Instance mapping, take
+ effect for any subsequent image activation (for example, the next RUN or
+ the mumps -direct command). Changes to database parameters only take
+ effect for new database files created with subsequent MUPIP CREATE
+ commands that use the modified Global Directory. Use the MUPIP SET command
+ (or in some cases DSE) to change characteristics of existing database
+ files.
Example:
@@ -775,10 +780,10 @@
The format of the DELETE command is:
+ D[ELETE] -G[BLNAME] global-name
D[ELETE] -N[AME] namespace
D[ELETE] -R[EGION] region-name
D[ELETE] -S[EGMENT] segment-name
- D[ELETE] -G[BLNAME] global-name
The DELETE command requires specification of an object-type and
object-name.
@@ -938,10 +943,10 @@
The format of the RENAME command is:
+ R[ENAME] -G[BLNAME] old-global-name new-global-name
R[ENAME] -N[AME] old-name new-name
R[ENAME] -R[EGION] old-region-name new-region-name
R[ENAME] -S[EGMENT] old-segment-name new-segment-name
- R[ENAME] -G[BLNAME] old-global-name new-global-name
The RENAME command requires specification of an object-type and two
object-names.
@@ -999,14 +1004,16 @@
The format of the SHOW command is:
+ SH[OW]
+ SH[OW] -A[LL]
SH[OW] -C[OMMAND] -F[ILE]=[gde-command-file]
+ SH[OW] -G[BLNAME]
+ SH[OW] -I[NSTANCE]
+ SH[OW] -M[AP] [-R[EGION]=region-name]
SH[OW] -N[AME] [namespace]
SH[OW] -R[EGION] [region-name]
SH[OW] -S[EGMENT] [segment-name]
- SH[OW] -M[AP] [-R[EGION]=region-name]
SH[OW] -T[EMPLATE]
- SH[OW] -G[BLNAME]
- SH[OW] -A[LL]
-COMMAND: Displays GDE commands that recreate the current Global Directory
state.
@@ -1022,6 +1029,16 @@
can input to GDE with the prior GT.M release to recreate the prior global
directory file.
+ SHOW -COMMAND displays the GDE commands for creating names, regions, and
+ segments of the current global directory state in a target environment.
+ However, it does not always include the same template settings (SHOW
+ -TEMPLATE) of the current global directory. SHOW -COMMAND creates an
+ appropriate set of templates that minimize other adjustments to recreate
+ the current global directory. If the current GDE template settings (SHOW
+ -TEMPLATE) are important for your application, you need set them again
+ after applying the commands from GDE SHOW -COMMAND in the target
+ environment.
+
**Note**
When GDE encounters an error while executing the @command-file command, it
@@ -1031,10 +1048,22 @@
same command-file, GDE resumes processing it at the line after the last
error.
- -NAME, -REGION, -SEGMENT, -GBLNAME, -MAP, -TEMPLATE, and -ALL are
+ -ALL: Displays the entire Global Directory. This qualifier corresponds to
+ displaying "all" sections of the SHOW report:
+
+ ***TEMPLATES***, ***NAMES***, ***REGIONS***, ***SEGMENTS***, ***MAP***, ***INSTANCE***.
+
+ By default, SHOW displays -ALL.
+
+ -GBLNAME, -INSTANCE, -MAP, -NAME, -REGION, -SEGMENT, and -TEMPLATE are
qualifiers that cause GDE to display selected portions of the Global
Directory as follows:
+ -INSTANCE: Displays the current Instance Mapping, if any. This qualifier
+ corresponds to the section of the SHOW report titled:
+
+ ***INSTANCE***
+
-MAP: Displays the current mapping of all names, regions, segments, and
files. This qualifier corresponds to the section of the SHOW report titled
***MAP***. The output of a SHOW -MAP may be restricted to a particular
@@ -1045,13 +1074,6 @@
***TEMPLATES***
- -ALL: Displays the entire Global Directory. This qualifier corresponds to
- displaying "all" sections of the SHOW report:
-
- ***TEMPLATES***, ***NAMES***, ***REGIONS***, ***SEGMENTS***, ***MAP***.
-
- By default, SHOW displays -ALL.
-
If you want to print the Global Directory, create a log file by executing
LOG -ON= before executing the SHOW command. The -LOG command captures all
the commands entered and output. You can print the log file if you want a
@@ -1102,17 +1124,21 @@
The format of the VERIFY command is:
V[ERIFY]
+ V[ERIFY] -A[LL]
+ V[ERIFY] -G[BLNAME]
+ V[ERIFY] -M[AP]
V[ERIFY] -N[AME] [namespace]
V[ERIFY] -R[EGION] [region-name]
V[ERIFY] -S[EGMENT] [segment-name]
- V[ERIFY] -M[AP]
- V[ERIFY] -G[BLNAME]
V[ERIFY] -T[EMPLATE]
- V[ERIFY] -A[LL]
The object-type is optional. -MAP, -TEMPLATE, and -ALL are special
qualifiers used as follows:
+ -ALL
+
+ Checks all map and template data.
+
-MAP
Checks that all names map to a region, all regions map to a
@@ -1122,10 +1148,6 @@
Checks that all templates currently are consistent and useable.
- -ALL
-
- Checks all map and template data.
-
VERIFY with no qualifier, VERIFY -MAP, and VERIFY -ALL each check all
current information.
@@ -1305,7 +1327,7 @@
Example:
- CHANGE -REGION DEFAULT -JOURNAL=(ALLOCATION=2048,AUTOSWITCHLIMIT=8386560,BEFORE_IMAGE,BUFFER_SIZE=2308,EXTENSION=2048)
+ CHANGE -REGION DEFAULT -JOURNAL=(ALLOCATION=2048,AUTOSWITCHLIMIT=8386560,BEFORE_IMAGE,BUFFER_SIZE=2312,EXTENSION=2048)
Summary
@@ -1623,12 +1645,6 @@
By default GDE uses NOASYNCIO. On segments with an access method of MM,
GT.M ignores this setting.
- -[NO]ENcryption
-
- Specifies whether or not the database file for a segment is flagged for
- encryption. Note that MUPIP CREATE acquires an encryption key for this
- file and puts a cryptographic hash of the key in the database file header.
-
-BL[OCK_SIZE]=size
Specifies the size, in bytes, of each database block in the file system.
@@ -1698,10 +1714,10 @@
should extend. The extend amount is interpreted as the number of usable
GDS blocks to create with the extension. To calculate the number of host
operating system blocks added with each extension, multiply the number of
- GDS blocks added by (GDS BLOCK_SIZE/host BLOCK_SIZE); add one local bitmap
- block for each 512 blocks added in each extension to the amount from step
- 1. If the extension is not a multiple of 512, remember to roundup when
- figuring the number of bitmap blocks.
+ GDS blocks by (GDS BLOCK_SIZE/host BLOCK_SIZE); add one local bitmap block
+ for each 512 blocks added in each extension to the amount from step 1. If
+ the extension is not a multiple of 512, remember to roundup when figuring
+ the number of bitmap blocks.
When a MUPIP EXTEND command does not include a -BLOCKS= qualifier, EXTEND
uses the extension size in the database header.
@@ -1804,7 +1820,7 @@
The minimum LOCK_SPACE is 10 pages.
- The maximum LOCK_SPACE is 65,536 pages.
+ The maximum LOCK_SPACE is 262144 pages.
By default, GDE uses a LOCK_SPACE of 40 pages.
@@ -1887,7 +1903,7 @@
| -G[LOBAL_BUFFER_COUNT]=size | 1024* | 64 | 2,147,483,647 |
| (blocks) | | | |
|-----------------------------+-----------+-------+----------------------|
- | -L[OCK_SPACE]=size (pages) | 40 | 10 | 65536 |
+ | -L[OCK_SPACE]=size (pages) | 40 | 10 | 262144 |
|-----------------------------+-----------+-------+----------------------|
| -M[UTEX_SLOTS]=integer | 1,024 | 1,024 | 32,768 |
|-----------------------------+-----------+-------+----------------------|
@@ -1930,6 +1946,22 @@
o else, if there is a default for that database file, use it
o else (that is, neither exists), use standard M collation
+2 Instance_Qualifier
+ Instance Qualifier
+
+ The following -INSTANCE qualifier is used with the CHANGE command.
+
+ -F[ILE_NAME=[repl_inst_filename|""]
+
+ o -FILE_NAME=repl_inst_filename maps a replication instance file with
+ the global directory. -FILE_NAME="" removes the mapping of a global
+ directory with a replication instance file.
+ o When a global directory is use, the mapping set with CHANGE -INSTANCE
+ FILE_NAME=repl_inst_filename overrides any setting of the
+ gtm_repl_instance environment variable. However, other utilities
+ (MUPIP, LKE, and DSE) use the setting of the gtm_repl_instance
+ environment variable.
+
1 Summary
Summary
@@ -1939,116 +1971,124 @@
+------------------------------------------------------------------------+
| GDE Command Summary |
|------------------------------------------------------------------------|
- | Command | Specified Object | Required Object Name/[Optional] |
- | | Type | Qualifier |
+ | Command | Specified | Required Object Name/[Optional] Qualifier |
+ | | Object Type | |
|------------------------------------------------------------------------|
| * -ALL is the default for the SHOW and VERIFY commands. |
|------------------------------------------------------------------------|
- | @ | N/A | file-name |
- |------------+------------------+----------------------------------------|
- | | | namespace |
- | A[DD] | -N[AME] | |
- | | | -R[EGION]=region-name |
- |------------+------------------+----------------------------------------|
- | | | region-name |
- | - | -R[EGION] | |
- | | | -D[YNAMIC]=segment-name |
- | | | [-REGION-qualifier...] |
- |------------+------------------+----------------------------------------|
- | | | segment-name |
- | - | -S[EGMENT] | |
- | | | -F[ILE_NAME]=file-name |
- | | | [-SEGMENT-qualifier...] |
- |------------+------------------+----------------------------------------|
- | | | global-name |
- | - | -G[BLNAME] | |
- | | | -C[OLLATION]=collation |
- |------------+------------------+----------------------------------------|
- | | | namespace |
- | C[HANGE] | -N[AME] | |
- | | | -R[EGION]=new-region |
- |------------+------------------+----------------------------------------|
- | | | region-name |
- | - | -R[EGION] | |
- | | | [-REGION-qualifier...] |
- |------------+------------------+----------------------------------------|
- | | | segment-name |
- | - | -S[EGMENT] | |
- | | | [-SEGMENT-qualifier] |
- |------------+------------------+----------------------------------------|
- | | | global-name |
- | - | -G[BLNAME] | |
- | | | -C[OLLATION]=collation |
- |------------+------------------+----------------------------------------|
- | D[ELETE] | -N[AME] | namespace |
- |------------+------------------+----------------------------------------|
- | - | -R[EGION] | region-name |
- |------------+------------------+----------------------------------------|
- | - | -S[EGMENT] | segment-name |
- |------------+------------------+----------------------------------------|
- | | | global-name |
- | - | -G[BLNAME] | |
- | | | -C[OLLATION]=collation |
- |------------+------------------+----------------------------------------|
- | E[XIT] | N/A | N/A |
- |------------+------------------+----------------------------------------|
- | HE[LP] | N/A | Keyword |
- |------------+------------------+----------------------------------------|
- | LOC[KS] | N/A | -R[EGION]=region-name |
- |------------+------------------+----------------------------------------|
- | | | [-ON][=file-name] |
- | LOG | N/A | |
- | | | [-OF[F]] |
- |------------+------------------+----------------------------------------|
- | Q[UIT] | N/A | N/A |
- |------------+------------------+----------------------------------------|
- | R[ENAME] | -N[AME] | old-name new-name |
- |------------+------------------+----------------------------------------|
- | - | -R[EGION] | old-reg-name new-reg-name |
- |------------+------------------+----------------------------------------|
- | - | -S[EGMENT] | old-seg-name new-seg-name |
- |------------+------------------+----------------------------------------|
- | | | global-name |
- | - | -G[BLNAME] | |
- | | | -C[OLLATION]=collation |
- |------------+------------------+----------------------------------------|
- | SE[TGD] | N/A | -F[ILE]=file-name [-Q[UIT]] |
- |------------+------------------+----------------------------------------|
- | SH[OW] | -N[AME] | [namespace] |
- |------------+------------------+----------------------------------------|
- | - | -R[EGION] | [region-name] |
- |------------+------------------+----------------------------------------|
- | - | -S[EGMENT] | [segment-name] |
- |------------+------------------+----------------------------------------|
- | | | global-name |
- | - | -G[BLNAME] | |
- | | | -C[OLLATION]=collation |
- |------------+------------------+----------------------------------------|
- | - | -M[AP] | [R[EGION]=region-name] |
- |------------+------------------+----------------------------------------|
- | - | T[EMPLATE] | N/A |
- |------------+------------------+----------------------------------------|
- | - | -A[LL]* | N/A |
- |------------+------------------+----------------------------------------|
- | T[EMPLATE] | -R[EGION] | [-REGION-qualifier...] |
- |------------+------------------+----------------------------------------|
- | - | -S[EGMENT] | [ -SEGMENT-qualifier...] |
- |------------+------------------+----------------------------------------|
- | V[ERIFY] | -N[AME] | [namespace] |
- |------------+------------------+----------------------------------------|
- | - | -R[EGION] | [region-name] |
- |------------+------------------+----------------------------------------|
- | - | -S[EGMENT] | [segment-name] |
- |------------+------------------+----------------------------------------|
- | | | global-name |
- | - | -G[BLNAME] | |
- | | | -C[OLLATION]=collation |
- |------------+------------------+----------------------------------------|
- | - | -M[AP] | N/A |
- |------------+------------------+----------------------------------------|
- | - | -T[EMPLATE] | N/A |
- |------------+------------------+----------------------------------------|
- | - | -A[LL]* | N/A |
+ | @ | N/A | file-name |
+ |------------+-------------+---------------------------------------------|
+ | | | global-name |
+ | A[DD] | -G[BLNAME] | |
+ | | | -C[OLLATION]=collation |
+ |------------+-------------+---------------------------------------------|
+ | | | namespace |
+ | - | -N[AME] | |
+ | | | -R[EGION]=region-name |
+ |------------+-------------+---------------------------------------------|
+ | | | region-name |
+ | - | -R[EGION] | |
+ | | | -D[YNAMIC]=segment-name |
+ | | | [-REGION-qualifier...] |
+ |------------+-------------+---------------------------------------------|
+ | | | segment-name |
+ | - | -S[EGMENT] | |
+ | | | -F[ILE_NAME]=file-name |
+ | | | [-SEGMENT-qualifier...] |
+ |------------+-------------+---------------------------------------------|
+ | | | global-name |
+ | C[HANGE] | -G[BLNAME] | |
+ | | | -C[OLLATION]=collation |
+ |------------+-------------+---------------------------------------------|
+ | | | replication-instance |
+ | - | -I[NSTANCE] | |
+ | | | -F[ILE_NAME]=replication_instance_file |
+ |------------+-------------+---------------------------------------------|
+ | | | namespace |
+ | - | -N[AME] | |
+ | | | -R[EGION]=new-region |
+ |------------+-------------+---------------------------------------------|
+ | | | region-name |
+ | - | -R[EGION] | |
+ | | | [-REGION-qualifier...] |
+ |------------+-------------+---------------------------------------------|
+ | | | segment-name |
+ | - | -S[EGMENT] | |
+ | | | [-SEGMENT-qualifier] |
+ |------------+-------------+---------------------------------------------|
+ | | | global-name |
+ | D[ELETE] | -G[BLNAME] | |
+ | | | -C[OLLATION]=collation |
+ |------------+-------------+---------------------------------------------|
+ | - | -N[AME] | namespace |
+ |------------+-------------+---------------------------------------------|
+ | - | -R[EGION] | region-name |
+ |------------+-------------+---------------------------------------------|
+ | - | -S[EGMENT] | segment-name |
+ |------------+-------------+---------------------------------------------|
+ | E[XIT] | N/A | N/A |
+ |------------+-------------+---------------------------------------------|
+ | HE[LP] | N/A | Keyword |
+ |------------+-------------+---------------------------------------------|
+ | LOC[KS] | N/A | -R[EGION]=region-name |
+ |------------+-------------+---------------------------------------------|
+ | | | [-ON][=file-name] |
+ | LOG | N/A | |
+ | | | [-OF[F]] |
+ |------------+-------------+---------------------------------------------|
+ | Q[UIT] | N/A | N/A |
+ |------------+-------------+---------------------------------------------|
+ | | | global-name |
+ | R[ENAME] | -G[BLNAME] | |
+ | | | -C[OLLATION]=collation |
+ |------------+-------------+---------------------------------------------|
+ | - | -N[AME] | old-name new-name |
+ |------------+-------------+---------------------------------------------|
+ | - | -R[EGION] | old-reg-name new-reg-name |
+ |------------+-------------+---------------------------------------------|
+ | - | -S[EGMENT] | old-seg-name new-seg-name |
+ |------------+-------------+---------------------------------------------|
+ | SE[TGD] | N/A | -F[ILE]=file-name [-Q[UIT]] |
+ |------------+-------------+---------------------------------------------|
+ | SH[OW] | -A[LL]* | N/A |
+ |------------+-------------+---------------------------------------------|
+ | | | global-name |
+ | - | -G[BLNAME] | |
+ | | | -C[OLLATION]=collation |
+ |------------+-------------+---------------------------------------------|
+ | | | replication-instance |
+ | - | -I[NSTANCE] | |
+ | | | -F[ILE_NAME]=replication_instance_file |
+ |------------+-------------+---------------------------------------------|
+ | - | -M[AP] | [R[EGION]=region-name] |
+ |------------+-------------+---------------------------------------------|
+ | - | -N[AME] | [namespace] |
+ |------------+-------------+---------------------------------------------|
+ | - | -R[EGION] | [region-name] |
+ |------------+-------------+---------------------------------------------|
+ | - | -S[EGMENT] | [segment-name] |
+ |------------+-------------+---------------------------------------------|
+ | - | T[EMPLATE] | N/A |
+ |------------+-------------+---------------------------------------------|
+ | T[EMPLATE] | -R[EGION] | [-REGION-qualifier...] |
+ |------------+-------------+---------------------------------------------|
+ | - | -S[EGMENT] | [ -SEGMENT-qualifier...] |
+ |------------+-------------+---------------------------------------------|
+ | V[ERIFY] | -A[LL]* | N/A |
+ |------------+-------------+---------------------------------------------|
+ | | | global-name |
+ | - | -G[BLNAME] | |
+ | | | -C[OLLATION]=collation |
+ |------------+-------------+---------------------------------------------|
+ | - | -N[AME] | [namespace] |
+ |------------+-------------+---------------------------------------------|
+ | - | -R[EGION] | [region-name] |
+ |------------+-------------+---------------------------------------------|
+ | - | -S[EGMENT] | [segment-name] |
+ |------------+-------------+---------------------------------------------|
+ | - | -M[AP] | N/A |
+ |------------+-------------+---------------------------------------------|
+ | - | -T[EMPLATE] | N/A |
+------------------------------------------------------------------------+
2 Qualifier_Summary
@@ -2148,7 +2188,7 @@
**Note**
- This help file is a concise representation of revision V6.3-001 of the
+ This help file is a concise representation of revision V6.3-003 of the
UNIX Administration and Operations Guide. To obtain a copy of the current
revision, go to www.fis-gtm.com and then click on the User Documentation
tab.
diff --git a/sr_port/gdechang.m b/sr_port/gdechang.m
old mode 100755
new mode 100644
index 32d56b0..be024b2
--- a/sr_port/gdechang.m
+++ b/sr_port/gdechang.m
@@ -1,6 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright 2001, 2013 Fidelity Information Services, Inc ;
+; Copyright (c) 2001-2017 Fidelity National Information ;
+; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
; of its copyright holder(s), and is made available ;
@@ -50,3 +51,13 @@ GBLNAME
s update=1
s gnams(GBLNAME,"COLLATION")=lquals("COLLATION")
q
+INSTANCE
+ i '$d(lquals("FILE_NAME")) zm gdeerr("QUALREQD"):"File Name"
+ i $zl(lquals("FILE_NAME"))=0 d:$d(inst("FILE_NAME")) q
+ . kill inst
+ . s update=1,inst=0
+ i $d(inst("FILE_NAME")),inst("FILE_NAME")=lquals("FILE_NAME") d
+ . i inst("FILE_NAME")'=$g(inst("envvar")) zm gdeerr("OBJNOTCHG"):"instance":""
+ s update=1
+ s inst=1,inst("FILE_NAME")=lquals("FILE_NAME")
+ q
diff --git a/sr_port/gdeerrors.msg b/sr_port/gdeerrors.msg
index 462ddb7..82fe730 100755
--- a/sr_port/gdeerrors.msg
+++ b/sr_port/gdeerrors.msg
@@ -73,7 +73,7 @@ JNLALLOCGROW <Increased Journal ALLOCATION from [!AD blocks] to [!AD blocks] to
KEYFORBLK <But block size !AD and reserved bytes !AD limit key size to !AD>/info/fao=6
STRMISSQUOTE <Missing double-quote at end of string specification !AD>/error/fao=2
GBLNAMEIS <in gblname !AD>/info/fao=2
-NAMSUBSEMPTY <Subscript #!UL is empty in name specification>/error/fao=3
+NAMSUBSEMPTY <Subscript #!UL is empty in name specification>/error/fao=1
NAMSUBSBAD <Subscript #!UL with value !AD in name specification is an invalid number or string>/error/fao=3
NAMNUMSUBSOFLOW <Subscript #!UL with value !AD in name specification has a numeric overflow>/error/fao=3
NAMNUMSUBNOTEXACT <Subscript #!UL with value !AD in name specification is not an exact GT.M number>/error/fao=3
@@ -94,7 +94,7 @@ GBLNAMCOLLUNDEF <Error opening shared library of collation sequence #!UL for GBL
NAMRANGEORDER <Range in name specification !AD specifies out-of-order subscripts using collation sequence #!UL>/error/fao=3
NAMRANGEOVERLAP <Range in name specifications !AD and !AD overlap using collation sequence #!UL>/error/fao=5
NAMGVSUBOFLOW <Subscripted name !AD...!AD is too long to represent in the database using collation value #!UL>/error/fao=5
-GBLNAMCOLLRANGE <Collation sequence #!UL is out of range (0 thru 255)>/error/fao=3
+GBLNAMCOLLRANGE <Collation sequence #!UL is out of range (0 thru 255)>/error/fao=1
STDNULLCOLLREQ <Region !AD needs Standard Null Collation enabled because global !AD spans through it>/info/fao=4
GBLNAMCOLLVER <Global directory indicates GBLNAME !AD has collation sequence #!UL with a version #!UL but shared library reports different version #!UL>/error/fao=5
GDEASYNCIONOMM <!AD segment has ASYNCIO turned on. Cannot support MM access method.>/error/fao=2
diff --git a/sr_port/gdeexit.m b/sr_port/gdeexit.m
index a3b081c..42558a1 100755
--- a/sr_port/gdeexit.m
+++ b/sr_port/gdeexit.m
@@ -16,7 +16,7 @@ EXIT
i '$$ALL^GDEVERIF s $zstatus=gdeerr("NOEXIT") zm gdeerr("NOEXIT") d:3>$zlevel GETOUT^GDEEXIT q
i '$$GDEPUT^GDEPUT q ; zm is issued in GDEPUT.m
d GETOUT^GDEEXIT
- h
+ zg 0
GETOUT ; Routine executed just before exiting from GDE. This tries to restore the mumps process context
; to what it was at entry into GDE and then does a quit to the parent mumps program.
; This context would have been saved in the "gdeEntryState" variable. It is possible this variable
@@ -24,7 +24,7 @@ GETOUT ; Routine executed just before exiting from GDE. This tries to restore th
; In that case, there is nothing available to do the restore so skip the restore and "halt" out of
; the process to be safe (or else the parent mumps program could get confused).
;
- i '$data(gdeEntryState) h
+ i '$data(gdeEntryState) zg 0
n nullsubs
s nullsubs=+gdeEntryState("nullsubs")
u gdeEntryState("io"):(exception="") ; restore $io with no exception (as otherwise it would be CTRL^GDE)
@@ -37,6 +37,6 @@ GETOUT ; Routine executed just before exiting from GDE. This tries to restore th
k (gdeEntryStateZlvl,gdeEntryStateAct,gdeEntryStateNcol,gdeEntryStateNct)
i $$set^%LCLCOL(gdeEntryStateAct,gdeEntryStateNcol,gdeEntryStateNct) ; restores local variable collation characteristics
; If GDE was invoked from the shell, exit to shell with proper exit status else use ZGOTO to go to parent mumps invocation
- if gdeEntryStateZlvl=0 zhalt +$zstatus
+ if gdeEntryStateZlvl=0 set $etrap="zgoto 0" zhalt +$zstatus
zg gdeEntryStateZlvl ; this should exit GDE and return control to parent mumps process invocation
- h ; to be safe in case control ever reaches here
+ zg 0 ; to be safe in case control ever reaches here
diff --git a/sr_port/gdeinit.m b/sr_port/gdeinit.m
old mode 100755
new mode 100644
index 8abe255..7b02e6f
--- a/sr_port/gdeinit.m
+++ b/sr_port/gdeinit.m
@@ -92,7 +92,7 @@ GDEINIT
. s SIZEOF("am_offset")=332 ; --> offset of "acc_meth" field in the "gd_segment" structure
. s SIZEOF("file_spec")=256 ; --> maximum size (in bytes) of a file name specified in gde command line
. s SIZEOF("gd_header")=16 ; --> 16-byte header structure at offset 0 of .gld (12 byte label, 4-byte filesize)
- . s SIZEOF("gd_contents")=76 ; --> size of the "gd_addr" structure (defined in gdsfhead.h)
+ . s SIZEOF("gd_contents")=80 ; --> size of the "gd_addr" structure (defined in gdsfhead.h)
. s SIZEOF("gd_map")=16 ; --> size of the "gd_binding" structure (defined in gdsfhead.h)
. s SIZEOF("gd_region")=412 ; --> size of the "gd_region" structure (defined in gdsfhead.h)
. s SIZEOF("gd_region_padding")=0 ; --> padding at end of "gd_region" structure (4-bytes for 64-bit platforms)
@@ -101,13 +101,14 @@ GDEINIT
. s SIZEOF("am_offset")=340 ; --> offset of "acc_meth" field in the "gd_segment" structure
. s SIZEOF("file_spec")=256 ; --> maximum size (in bytes) of a file name specified in gde command line
. s SIZEOF("gd_header")=16 ; --> 16-byte header structure at offset 0 of .gld (12 byte label, 4-byte filesize)
- . s SIZEOF("gd_contents")=112 ; --> size of the "gd_addr" structure (defined in gdsfhead.h)
+ . s SIZEOF("gd_contents")=120 ; --> size of the "gd_addr" structure (defined in gdsfhead.h)
. s SIZEOF("gd_map")=24 ; --> size of the "gd_binding" structure (defined in gdsfhead.h)
. s SIZEOF("gd_region")=424 ; --> size of the "gd_region" structure (defined in gdsfhead.h)
. s SIZEOF("gd_region_padding")=4 ; --> padding at end of "gd_region" structure (4-bytes for 64-bit platforms)
. s SIZEOF("gd_segment")=384 ; --> size of the "gd_segment" structure (defined in gdsfhead.h)
d Init^GDEINITSZ ; --> current gvstats size comes from routine generated by scantypedefs
s SIZEOF("gd_gblname")=40
+ s SIZEOF("gd_inst_info")=SIZEOF("file_spec") ; --> size of the "gd_inst_info" structure (defined in gdsfhead.h)
s SIZEOF("mident")=32
s SIZEOF("blk_hdr")=16
s SIZEOF("rec_hdr")=4 ;GTM-6941
@@ -143,6 +144,8 @@ GDEINIT
; gblname
s mingnam("COLLATION")=0
s maxgnam("COLLATION")=255
+; instance
+ s maxinst("FILE")=SIZEOF("file_spec")
; region
s minreg("ALLOCATION")=200
s minreg("BEFORE_IMAGE")=0,minreg("COLLATION_DEFAULT")=0,minreg("STDNULLCOLL")=0
@@ -195,7 +198,7 @@ GDEINIT
s minsegcommon("EXTENSION_COUNT")=0
s maxsegcommon("EXTENSION_COUNT")=HEX(4)-1
s minsegcommon("LOCK_SPACE")=10
- s maxsegcommon("LOCK_SPACE")=65536
+ s maxsegcommon("LOCK_SPACE")=262144
s minsegcommon("MUTEX_SLOTS")=64 ; keep this in sync with MIN_CRIT_ENTRY in gdsbt.h
s maxsegcommon("MUTEX_SLOTS")=32768 ; keep this in sync with MAX_CRIT_ENTRY in gdsbt.h
s minsegcommon("RESERVED_BYTES")=0
@@ -300,6 +303,9 @@ syntabi:
s syntab("CHANGE","GBLNAME")=""
s syntab("CHANGE","GBLNAME","COLLATION")="REQUIRED"
s syntab("CHANGE","GBLNAME","COLLATION","TYPE")="TNUMBER"
+ s syntab("CHANGE","INSTANCE")=""
+ s syntab("CHANGE","INSTANCE","FILE_NAME")="REQUIRED"
+ s syntab("CHANGE","INSTANCE","FILE_NAME","TYPE")="TFSPEC"
s syntab("CHANGE","NAME")=""
s syntab("CHANGE","NAME","REGION")="REQUIRED"
s syntab("CHANGE","NAME","REGION","TYPE")="TREGION"
@@ -442,6 +448,7 @@ syntabi:
s syntab("SHOW","COMMANDS","FILE")="OPTIONAL"
s syntab("SHOW","COMMANDS","FILE","TYPE")="TFSPEC"
s syntab("SHOW","GBLNAME")=""
+ s syntab("SHOW","INSTANCE")=""
s syntab("SHOW","MAP")=""
s syntab("SHOW","MAP","REGION")="REQUIRED"
s syntab("SHOW","MAP","REGION","TYPE")="TREGION"
@@ -459,8 +466,8 @@ syntabi:
s syntab("VERIFY","TEMPLATE")=""
q
UNIX:
- s hdrlab="GTCGBDUNX011" ; must be concurrently maintained in gbldirnam.h!!!
- i (gtm64=TRUE) s hdrlab="GTCGBDUNX111" ; the high order digit is a 64-bit flag
+ s hdrlab="GTCGBDUNX012" ; must be concurrently maintained in gbldirnam.h!!!
+ i (gtm64=TRUE) s hdrlab="GTCGBDUNX112" ; the high order digit is a 64-bit flag
s tfile="$gtmgbldir"
s accmeth="\BG\MM"
s helpfile="$gtm_dist/gdehelp.gld"
diff --git a/sr_port/gdeinitsz.m b/sr_port/gdeinitsz.m
index bbe6cb2..c56ad6a 100644
--- a/sr_port/gdeinitsz.m
+++ b/sr_port/gdeinitsz.m
@@ -2,14 +2,14 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
-; Generated by scantypedefs.m at 16:03:28 on 2017-08-16
-; Build done with GT.M version: GT.M V6.3-001A Linux x86
+; Generated by scantypedefs.m at 10:26:02 on 2018-01-13
+; Build done with GT.M version: GT.M V6.3-002 Linux x86
;
; Environment variables during run:
-; $gtm_dist: /usr/library/V63001A/dbg
-; $gtm_exe: /usr/library/V63002/dbg
-; $gtm_src: /usr/library/V63002/src
-; $gtm_inc: /usr/library/V63002/inc
+; $gtm_dist: /usr/library/V63002/dbg
+; $gtm_exe: /usr/library/V63003A/dbg
+; $gtm_src: /usr/library/V63003A/src
+; $gtm_inc: /usr/library/V63003A/inc
;
; Note this file should not be manually invoked
;
diff --git a/sr_port/gdeparse.m b/sr_port/gdeparse.m
old mode 100755
new mode 100644
index 36d17b5..7ecf458
--- a/sr_port/gdeparse.m
+++ b/sr_port/gdeparse.m
@@ -96,6 +96,9 @@ GBLNAME
i $l(GBLNAME)'=$zl(GBLNAME) zm gdeerr("NONASCII"):GBLNAME:"gblname" ; error if the name is non-ascii
i $zl(GBLNAME)>PARNAMLN zm gdeerr("VALTOOLONG"):GBLNAME:PARNAMLN:"gblname"
q
+INSTANCE
+ i ntoktype="TKEOL" zm gdeerr("OBJREQD"):"instance"
+ q
NAME
k NAME
n c,len,j,k,tokname,starti,endi,subcnt,nsubs,gblname,type,rangeprefix,nullsub,lsub
@@ -495,6 +498,7 @@ SHOW
n mapreg
i gqual="MAP",ntoktype'="TKEOL" d getqual s mapreg=$g(lquals("REGION"))
i 't,"COMMANDS"=gqual,ntoktype'="TKEOL" d getqual s cfile=$g(lquals("FILE"))
+ i 't,"INSTANCE"=gqual,ntoktype="TKEOL" d INSTANCE^GDESHOW q
d @gqual:t,matchtok("TKEOL","End of line"), at gqual^GDESHOW
q
VERIFY
@@ -504,7 +508,7 @@ VERIFY
n verified s verified=1
i ntoktype="TKEOL" d
. d @("ALL"_$ze(gqual,1,3))^GDEVERIF
- e i "NAMEGBLNAMEREGIONSEGMENT"[gqual d
+ e i "NAMEGBLNAMEREGIONSEGMENTINSTANCE"[gqual d
. d @gqual, at gqual^GDEVERIF
e zm gdeerr("NOVALUE"):gqual
i $d(verified) zm gdeerr("VERIFY"):$s(verified:"OK",1:"FAILED") w !
diff --git a/sr_port/gdeshow.m b/sr_port/gdeshow.m
old mode 100755
new mode 100644
index 86a0e84..f1f690e
--- a/sr_port/gdeshow.m
+++ b/sr_port/gdeshow.m
@@ -11,7 +11,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
show: ;implement the verb: SHOW
ALL
- d TEMPLATE,ALLNAME,ALLGBLNAME,ALLREGIO,ALLSEGME,MAP
+ d TEMPLATE,ALLNAME,ALLGBLNAME,ALLREGIO,ALLSEGME,MAP,INSTANCE
q
COMMANDS
n tmpreg2,tmpseg2
@@ -25,9 +25,9 @@ COMMANDS
set delim="-"
; show NAMES after GBLNAME to avoid potential NAMRANGEORDER errors in case of non-zero collation
i '$l($get(cfile)) d
- . f i="@useio",$s(log:"@uself",1:"") q:'$l(i) u @i d templatec,regionc,segmentc,gblnamec,namec
+ . f i="@useio",$s(log:"@uself",1:"") q:'$l(i) u @i d templatec,regionc,segmentc,gblnamec,namec,instc
e o cfile:(newversion:exc="w !,$ztatus c cfile zgoto $zl:cfilefail") u cfile d
- . d templatec,regionc,segmentc,gblnamec,namec
+ . d templatec,regionc,segmentc,gblnamec,namec,instc
. c cfile
cfilefail:
s BOL=""
@@ -100,6 +100,23 @@ gblnamec:
f s s=$o(gnams(s)) q:s="" w !,"ADD "_delim_"GBLNAME ",s," "_delim_"COLLATION=",gnams(s,"COLLATION")
w !,BOL
q
+ALLINSTA
+INSTANCE
+ i ($d(inst)<10)!(inst=0) q
+ d in2
+ i log s BOL="!" u @uself w BOL d in2 w ! u @useio s BOL=""
+ q
+in2: d insthd,insteach
+ q
+insteach;
+ w !,BOL,?x(1),$$namedisp(inst("FILE_NAME"),0)
+ q
+instc:
+ i ($d(inst)<10)!(inst=0) q
+ s s=""
+ w !,"CHANGE "_delim_"INSTANCE "_delim_"FILE_NAME=",$$namedisp(inst("FILE_NAME"),1)
+ w !,BOL
+ q
REGION
i '$d(regs(REGION)) zm gdeerr("OBJNOTFND"):"Region":REGION q
d r2
@@ -436,6 +453,12 @@ gblnamehd:
w !,BOL,!,BOL,?x(0),"*** GBLNAMES ***",!,BOL,?x(1),"Global",?x(2),"Coll",?x(3),"Ver"
w !,BOL,?x(1),$tr($j("",78)," ","-")
q
+insthd:
+ s x(0)=43,x(1)=1
+ w !,BOL,!,BOL,?x(0),"*** INSTANCE ***"
+ w !,BOL," Instance File (def ext: .repl)"
+ w !,BOL,?x(1),$tr($j("",57)," ","-")
+ q
regionhd:
s x(0)=32,x(1)=1,x(2)=33,x(3)=65,x(4)=71
s x(5)=79,x(6)=85,x(7)=95,x(8)=100,x(9)=104,x(10)=111,x(11)=117,x(12)=123,x(13)=130,x(14)=136,x(15)=141
@@ -555,7 +578,7 @@ namscollatecalc:
. . ; Some processing needed so X(2,4:5) (a range) comes AFTER X(2,4,5:"") (a point within X(2,4)).
. . ; Add a 01 at the end of the left subscript of a range.
. . s key=key_ONE
- . ; ASSERT : i $d(namscollate(key)) zsh "*" h ; assert that checks for duplicate keys
+ . ; ASSERT : i $d(namscollate(key)) s $etrap="zg 0" zsh "*" zhalt 1 ; assert that checks for duplicate keys
. s namscollate(key)=s
q
namedisp(name,addquote)
@@ -593,7 +616,7 @@ namedisp(name,addquote)
. . . s namedisp=namedisp_$ze(namezwr,starti,i-1),namedisplen=namedisplen+(i-starti),starti=i+4,quotestate=1,i=i+3 q
i addquote&$d(seenquotestate3) s namedisp=doublequote_namedisp_doublequote
; 2 and 3 are the only terminating states; check that. that too 3 only if addquote is 1.
- ; ASSERT : i '((quotestate=2)!(addquote&(quotestate=3))) zsh "*" h
+ ; ASSERT : i '((quotestate=2)!(addquote&(quotestate=3))) s $etrap="zg 0" zsh "*" zhalt 1
q namedisp
namedisplaycalc:(name)
; if name is subscripted, make sure control characters are displayed in $c() notation
diff --git a/sr_port/gds_rundown.h b/sr_port/gds_rundown.h
index b4165dc..b5c6379 100644
--- a/sr_port/gds_rundown.h
+++ b/sr_port/gds_rundown.h
@@ -18,9 +18,9 @@
int4 gds_rundown(boolean_t cleanup_udi);
-#define CAN_BYPASS(SEMVAL, CSD, INST_IS_FROZEN) \
- (INST_IS_FROZEN || FROZEN_CHILLED(CSD) \
- || (IS_GTM_IMAGE && CSD->mumps_can_bypass && (PROC_FACTOR * (num_additional_processors + 1) < SEMVAL)) \
+#define CAN_BYPASS(SEMVAL, CSA, INST_IS_FROZEN) \
+ (INST_IS_FROZEN || FROZEN_CHILLED(CSA) \
+ || (IS_GTM_IMAGE && (CSA)->hdr->mumps_can_bypass && (PROC_FACTOR * (num_additional_processors + 1) < SEMVAL)) \
|| (((2 * DB_COUNTER_SEM_INCR) < SEMVAL) && (IS_LKE_IMAGE || IS_DSE_IMAGE)))
#define CANCEL_DB_TIMERS(region, csa, cancelled_dbsync_timer) \
diff --git a/sr_port/gdsbt.h b/sr_port/gdsbt.h
index 1e0f2f3..890195a 100644
--- a/sr_port/gdsbt.h
+++ b/sr_port/gdsbt.h
@@ -38,7 +38,7 @@
#define WC_DEF_BUFFS 128
#define WC_MIN_BUFFS 64
-#define MAX_LOCK_SPACE 65536 /* need to change these whenever global directory defaults change */
+#define MAX_LOCK_SPACE 262144 /* need to change these whenever global directory defaults change */
#define MIN_LOCK_SPACE 10
#define MAX_REL_NAME 36
@@ -184,7 +184,7 @@ typedef struct
CACHELINE_PAD(SIZEOF(mutex_que_head), 9)
} mutex_struct;
-typedef struct { /* keep this structure and member offsets defined in sr_avms/mutex.mar in sync */
+typedef struct {
int4 mutex_hard_spin_count;
int4 mutex_sleep_spin_count;
int4 mutex_spin_sleep_mask; /* mask for maximum spin sleep time */
@@ -282,7 +282,6 @@ typedef struct
#define WCS_OPS_ARRAY_SIZE 1024
#define CRIT_OPS_ARRAY_SIZE 512
#define LOCKHIST_ARRAY_SIZE 512
-#define SECSHR_OPS_ARRAY_SIZE 1023 /* 1 less than 1K to accommodate the variable secshr_ops_index */
#define FTOK_OPS_ARRAY_SIZE 512
/*
@@ -592,7 +591,6 @@ typedef struct node_local_struct
int4 dskread_ops_index; /* "circular" index into dskread_ops_array */
int4 ftok_ops_index; /* "circular" index into ftok_ops_array */
int4 wcs_ops_index; /* "circular" index into wcs_ops_array */
- NON_GTM64_ONLY(int4 filler_8byte_align2;) /* To align the following member at an 8-byte boundary on 32-bit platforms */
lockhist lockhists[LOCKHIST_ARRAY_SIZE]; /* Keep lock histories here */
crit_trace crit_ops_array[CRIT_OPS_ARRAY_SIZE]; /* space for CRIT_TRACE macro to record info */
dskread_trace dskread_ops_array[DSKREAD_OPS_ARRAY_SIZE]; /* space for DSKREAD_TRACE macro to record info */
@@ -619,8 +617,6 @@ typedef struct node_local_struct
char statsdb_fname[MAX_FN_LEN + 1]; /* Is empty-string if IS_RDBF_STATSDB(csd) is FALSE.
* Is name of the statsdb corresponding to this basedb otherwise.
*/
- int4 secshr_ops_index;
- gtm_uint64_t secshr_ops_array[SECSHR_OPS_ARRAY_SIZE]; /* taking up 8K */
gvstats_rec_t gvstats_rec;
trans_num last_wcsflu_tn; /* curr_tn when last wcs_flu was done on this database */
trans_num last_wcs_recover_tn; /* csa->ti->curr_tn of most recent "wcs_recover" */
@@ -635,12 +631,12 @@ typedef struct node_local_struct
boolean_t snapshot_in_prog; /* Tells GT.M if any snapshots are in progress */
uint4 num_snapshots_in_effect; /* how many snapshots are currently in place for this region */
uint4 wbox_test_seq_num; /* used to coordinate with sequential testing steps */
- NON_GTM64_ONLY(int4 filler_8byte_align3;) /* To align the following member at an 8-byte boundary on 32-bit platforms */
+ uint4 freeze_online; /* for online db freezing, a.k.a. chill. */
uint4 kip_pid_array[MAX_KIP_PID_SLOTS]; /* Processes actively doing kill (0 denotes empty slots) */
gtm_uint64_t sec_size; /* Upon going to larger shared memory sizes, we realized that this does not */
/* need to be in the file header but the node local since it can be calculated */
/* from info in the file header. */
- int4 jnlpool_shmid; /* copy of jnlpool.repl_inst_filehdr->jnlpool_shmid to prevent mixing of multiple
+ int4 jnlpool_shmid; /* copy of jnlpool->repl_inst_filehdr->jnlpool_shmid to prevent mixing of multiple
* journal pools within the same database.
*/
boolean_t lockspacefull_logged; /* Avoids flooding syslog with LOCKSPACEFULL messages.
@@ -698,14 +694,14 @@ typedef struct node_local_struct
# ifdef GTM_CRYPT_UPDATES_REPORT
blk_info blk_infos[BLK_INFO_ARRAY_SIZE];
uint4 blk_info_cnt;
- int4 filler_8byte_align5;
+ int4 filler_8byte_align2;
# endif
global_latch_t freeze_latch; /* Protect freeze/freeze_online field updates */
gtm_uint64_t wcs_buffs_freed; /* this is a count of the number of buffers transitioned to the free "queue" */
volatile gtm_uint64_t dskspace_next_fire;
global_latch_t lock_crit; /* mutex for LOCK processing */
volatile block_id tp_hint;
- int4 filler_8byte_align6;
+ int4 filler_8byte_align3;
} node_local;
#define COPY_STATSDB_FNAME_INTO_STATSREG(statsDBreg, statsDBfname, statsDBfname_len) \
@@ -779,23 +775,23 @@ MBSTART { \
* in order to to maximize the chances of gathering meaningful data, it seems better placed after grab_crit
* and before rel_crit. Also we will increment the index first and cache it so we can shorten our exposure window.
*/
-#define CRIT_TRACE(X) \
+#define CRIT_TRACE(CSA, X) \
MBSTART { \
int4 coidx; \
node_local_ptr_t cnl; \
boolean_t in_ast; \
unsigned int ast_status; \
\
- assert((NULL != csa) && (NULL !=(csa->nl))); \
- cnl = csa->nl; \
+ assert((NULL != CSA) && (NULL !=(CSA->nl))); \
+ cnl = CSA->nl; \
coidx = ++cnl->crit_ops_index; \
if (CRIT_OPS_ARRAY_SIZE <= coidx) \
cnl->crit_ops_index = coidx = 0; \
cnl->crit_ops_array[coidx].call_from = (caddr_t)caller_id(); \
cnl->crit_ops_array[coidx].epid = process_id; \
cnl->crit_ops_array[coidx].crit_act = (X); \
- cnl->crit_ops_array[coidx].curr_tn = (NULL != csa->hdr) ? \
- csa->hdr->trans_hist.curr_tn : 0; \
+ cnl->crit_ops_array[coidx].curr_tn = (NULL != CSA->hdr) ? \
+ CSA->hdr->trans_hist.curr_tn : 0; \
} MBEND
/* The following macro checks that curr_tn and early_tn are equal right before beginning a transaction commit.
@@ -914,7 +910,7 @@ MBSTART { \
#define DUMP_LOCKHIST() dump_lockhist()
#else
-#define CRIT_TRACE(X)
+#define CRIT_TRACE(CSA, X)
#define ASSERT_CURR_TN_EQUALS_EARLY_TN(csa, currtn)
#define LOCK_HIST(OP, LOC, ID, CNT)
#define WCS_OPS_TRACE(CSA, PID, TYPE, BLK, CR_OFF, CR_TN, DETAIL1, DETAIL2)
@@ -944,10 +940,9 @@ MBSTART { \
#define MAX_SLEEP_CNT E_6 /* keep this in sync with any maxseg("SLEEP_CNT") in gdeinit.m */
#define DEFAULT_SLEEP_CNT 0 /* keep this in sync with any tmpseg("SLEEP_CNT") in gdeget.m */
#define SLEEP_SPIN_CNT(CSD) (CSD)->mutex_spin_parms.mutex_sleep_spin_count
-#define MIN_SPIN_SLEEP 0 /* keep this in sync with gdeinit.m minseg("SPIN_SLEEP_LIMIT") */
-#define MAX_SPIN_SLEEP E_9 /* keep this in sync with gdeinit.m maxseg("SPIN_SLEEP_LIMIT") */
-#define DEFAULT_SPIN_SLEEP 0 /* keep this in sync with gdeget.m tmpseg("SPIN_SLEEP_LIMIT") */
+#define MAX_SPIN_SLEEP_MASK 0x3FFFFFFF
#define SPIN_SLEEP_MASK(CSD) (CSD)->mutex_spin_parms.mutex_spin_sleep_mask
+#define HARD_SPIN_COUNT(CSD) (CSD)->mutex_spin_parms.mutex_hard_spin_count
#define MIN_CRIT_ENTRY 64 /* keep this in sync with gdeinit.m minseg("MUTEX_SLOTS") */
#define MAX_CRIT_ENTRY 32768 /* keep this in sync with gdeinit.m maxseg("MUTEX_SLOTS") */
#define DEFAULT_NUM_CRIT_ENTRY 1024 /* keep this in sync with gdeget.m tmpseg("MUTEX_SLOTS") */
diff --git a/sr_port/gdsdbver_sp.h b/sr_port/gdsdbver_sp.h
index 8d3348d..07d4534 100644
--- a/sr_port/gdsdbver_sp.h
+++ b/sr_port/gdsdbver_sp.h
@@ -33,4 +33,5 @@ ENUM_ENTRY(GDSMV62002), /* New field defer_allocate needed for database file pr
ENUM_ENTRY(GDSMV63000), /* New field non_null_iv to indicate IV mode for encrypted blocks */
ENUM_ENTRY(GDSMV63000A), /* Move fields ftok_counter_halted and access_counter_halted from fileheader to nodelocal */
ENUM_ENTRY(GDSMV63001), /* New "asyncio" option; New reservedDBFlags field */
+ENUM_ENTRY(GDSMV63003), /* New field read_only to indicate a read-only database */
ENUM_ENTRY(GDSMVLAST)
diff --git a/sr_port/gdsfhead.h b/sr_port/gdsfhead.h
index a928ce7..85cbc16 100644
--- a/sr_port/gdsfhead.h
+++ b/sr_port/gdsfhead.h
@@ -44,6 +44,7 @@ error_def(ERR_NCTCOLLSPGBL);
error_def(ERR_OFRZAUTOREL);
error_def(ERR_OFRZCRITREL);
error_def(ERR_OFRZCRITSTUCK);
+error_def(ERR_REPLINSTACC);
error_def(ERR_REPLINSTMISMTCH);
error_def(ERR_REPLINSTNOSHM);
error_def(ERR_REPLREQROLLBACK);
@@ -105,7 +106,7 @@ typedef struct cache_rec_struct
* before-image for wcs_recover to backup.
*/
off_jnl_t jnl_addr; /* offset from bg_update to prevent wcs_wtstart from writing a block ahead of the journal */
- uint4 stopped; /* non-zero indicates to wcs_recover the pid that built the block using secshr_db_clnup */
+ boolean_t stopped; /* TRUE indicates to wcs_recover that secshr_db_clnup built the block */
global_latch_t rip_latch; /* for read_in_progress - note contains extra 16 bytes for HPPA. Usage note: this
latch is used on those platforms where read_in_progress is not directly updated
by atomic routines/instructions. As such there needs be no cache line padding between
@@ -327,7 +328,7 @@ MBSTART { \
new_KEY = (gv_key *)malloc(SIZEOF(gv_key) - 1 + keySZ); \
assert((DBKEYSIZE(MAX_KEY_SZ) == KEYSIZE) \
|| ((GVKEY != gv_currkey) && (GVKEY != gv_altkey))); \
- if (NULL != old_KEY) \
+ if ((NULL != old_KEY) && (PREV_KEY_NOT_COMPUTED != old_KEY->end)) \
{ \
/* Don't call GVKEY_INIT twice for same key. The only exception \
* is if we are called from COPY_PREV_KEY_TO_GVT_CLUE in a \
@@ -337,7 +338,7 @@ MBSTART { \
assert(TREF(donot_commit) | DONOTCOMMIT_COPY_PREV_KEY_TO_GVT_CLUE); \
assert(KEYSIZE >= old_KEY->top); \
assert(old_KEY->top > old_KEY->end); \
- memcpy(new_KEY, old_KEY, SIZEOF(gv_key) + old_KEY->end); \
+ memcpy(new_KEY, old_KEY, SIZEOF(gv_key) - 1 + old_KEY->end); \
free(old_KEY); \
} else \
{ \
@@ -561,7 +562,7 @@ MBSTART { \
{ \
STATSDBREG_TO_BASEDBREG(statsDBreg, baseDBreg); \
if (!baseDBreg->open) \
- gv_init_reg(baseDBreg); \
+ gv_init_reg(baseDBreg, NULL); \
if (!statsDBreg->open) \
{ /* statsDB did not get opened as part of baseDB open above. Possible if gtm_statshare \
* is not set to 1. But user could still do a ZWR ^%YGS which would try to open \
@@ -948,6 +949,7 @@ MBSTART { \
*/
#define TP_CHANGE_REG(reg) \
MBSTART { \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
gv_cur_region = reg; \
if (NULL == gv_cur_region || FALSE == gv_cur_region->open) \
{ \
@@ -961,6 +963,8 @@ MBSTART { \
case dba_bg: \
cs_addrs = &FILE_INFO(gv_cur_region)->s_addrs; \
cs_data = cs_addrs->hdr; \
+ if (cs_addrs->jnlpool && (jnlpool != cs_addrs->jnlpool)) \
+ jnlpool = cs_addrs->jnlpool; \
break; \
case dba_usr: \
case dba_cm: \
@@ -976,6 +980,7 @@ MBSTART { \
#define TP_CHANGE_REG_IF_NEEDED(reg) \
MBSTART { \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
assert(reg); \
if (reg != gv_cur_region) \
{ \
@@ -989,6 +994,8 @@ MBSTART { \
cs_data = cs_addrs->hdr; \
assert((&FILE_INFO(gv_cur_region)->s_addrs == cs_addrs) \
&& cs_addrs->hdr == cs_data); \
+ if (cs_addrs->jnlpool && (jnlpool != cs_addrs->jnlpool)) \
+ jnlpool = cs_addrs->jnlpool; \
break; \
case dba_usr: \
case dba_cm: \
@@ -1002,19 +1009,21 @@ MBSTART { \
} \
} MBEND
-#define PUSH_GV_CUR_REGION(reg, sav_reg, sav_cs_addrs, sav_cs_data) \
+#define PUSH_GV_CUR_REGION(REG, SAV_REG, SAV_CS_ADDRS, SAV_CS_DATA, SAV_JNLPOOL) \
MBSTART { \
- sav_reg = gv_cur_region; \
- sav_cs_addrs = cs_addrs; \
- sav_cs_data = cs_data; \
- TP_CHANGE_REG(reg); \
+ SAV_REG = gv_cur_region; \
+ SAV_CS_ADDRS = cs_addrs; \
+ SAV_CS_DATA = cs_data; \
+ SAV_JNLPOOL = jnlpool; \
+ TP_CHANGE_REG(REG); \
} MBEND
-#define POP_GV_CUR_REGION(sav_reg, sav_cs_addrs, sav_cs_data) \
+#define POP_GV_CUR_REGION(SAV_REG, SAV_CS_ADDRS, SAV_CS_DATA, SAV_JNLPOOL) \
MBSTART { \
- gv_cur_region = sav_reg; \
- cs_addrs = sav_cs_addrs; \
- cs_data = sav_cs_data; \
+ gv_cur_region = SAV_REG; \
+ cs_addrs = SAV_CS_ADDRS; \
+ cs_data = SAV_CS_DATA; \
+ jnlpool = SAV_JNLPOOL; \
} MBEND
/* The TP_TEND_CHANGE_REG macro is a special macro used in tp_tend.c to optimize out the unnecessary checks in
@@ -1171,7 +1180,7 @@ MBSTART { \
} \
} MBEND
-#define RESET_CR_IN_TEND_AFTER_PHASE2_COMMIT(CR) \
+#define RESET_CR_IN_TEND_AFTER_PHASE2_COMMIT(CR, CSA, CSD) \
{ \
cache_rec_ptr_t cr_old; \
\
@@ -1184,8 +1193,8 @@ MBSTART { \
* ready for replacement but "wcs_get_space/wcs_wtstart_fini/wcs_wtstart/wcs_wtfini" would not be able to flush \
* the new twin until the old twin has its "in_cw_set" cleared resulting in a livelock. \
*/ \
- assert(TWINNING_ON(csd)); \
- cr_old = (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, CR->twin); /* get old twin */ \
+ assert(TWINNING_ON(CSD)); \
+ cr_old = (cache_rec_ptr_t)GDS_ANY_REL2ABS(CSA, CR->twin); /* get old twin */ \
assert(!cr_old->bt_index); \
assert(!cr_old->in_cw_set || cr_old->dirty); \
assert(CR->bt_index); \
@@ -1213,6 +1222,8 @@ MBSTART { \
#ifdef DEBUG
#define ASSERT_CR_ARRAY_IS_UNPINNED(CSD, CRARRAY, CRARRAYINDEX) \
MBSTART { \
+ GBLREF uint4 process_id; \
+ \
int4 lcl_crarrayindex; \
cache_rec_ptr_ptr_t cr_ptr, cr_start; \
cache_rec_ptr_t cr; \
@@ -1253,9 +1264,8 @@ MBSTART { \
#define VALIDATE_INITIALIZED_JNLPOOL(CSA, CNL, REG, JNLPOOL_USER, SCNDDBNOUPD_CHECK_NEEDED) \
MBSTART { \
- GBLREF jnlpool_ctl_ptr_t jnlpool_ctl; \
GBLREF boolean_t is_updproc; \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
\
unsigned char instfilename_copy[MAX_FN_LEN + 1]; \
sm_uc_ptr_t jnlpool_instfilename; \
@@ -1271,7 +1281,7 @@ MBSTART { \
&& ((GTMRELAXED != JNLPOOL_USER) || !IS_GTM_IMAGE)); \
if (!(SCNDDBNOUPD_CHECK_DONE & jnlpool_validate_check) && SCNDDBNOUPD_CHECK_NEEDED) \
{ \
- if (jnlpool_ctl->upd_disabled && !is_updproc) \
+ if (jnlpool->jnlpool_ctl->upd_disabled && !is_updproc) \
{ /* Updates are disabled in this journal pool. Issue error. Do NOT detach from journal pool \
* as that would cause us not to honor instance freeze (in case gtm_custom_errors env var is \
* non-null) for database reads that this process later does (for example reading a block \
@@ -1284,9 +1294,9 @@ MBSTART { \
} \
if (do_REPLINSTMISMTCH_check) \
{ \
- jnlpool_instfilename = (sm_uc_ptr_t)jnlpool_ctl->jnlpool_id.instfilename; \
+ jnlpool_instfilename = (sm_uc_ptr_t)jnlpool->jnlpool_ctl->jnlpool_id.instfilename; \
if (STRCMP(CNL->replinstfilename, jnlpool_instfilename) \
- || (CNL->jnlpool_shmid != jnlpool.repl_inst_filehdr->jnlpool_shmid)) \
+ || (CNL->jnlpool_shmid != jnlpool->repl_inst_filehdr->jnlpool_shmid)) \
{ \
/* Replication instance filename or jnlpool shmid mismatch. Two possibilities. \
* (a) Database has already been bound with a replication instance file name that is different \
@@ -1298,15 +1308,12 @@ MBSTART { \
* Actually case (b) subsumes (a) so we assert that below. But in pro we handle both cases \
* just in case. \
*/ \
- assert(CNL->jnlpool_shmid != jnlpool.repl_inst_filehdr->jnlpool_shmid); \
- assert(SIZEOF(instfilename_copy) == SIZEOF(jnlpool_ctl->jnlpool_id.instfilename)); \
+ assert(CNL->jnlpool_shmid != jnlpool->repl_inst_filehdr->jnlpool_shmid); \
+ assert(SIZEOF(instfilename_copy) == SIZEOF(jnlpool->jnlpool_ctl->jnlpool_id.instfilename)); \
memcpy(&instfilename_copy[0], jnlpool_instfilename, SIZEOF(instfilename_copy)); \
assert(SIZEOF(jnlpool_shmid) == SIZEOF(CNL->jnlpool_shmid)); \
- jnlpool_shmid = jnlpool.repl_inst_filehdr->jnlpool_shmid; \
- assert(NULL != jnlpool.jnlpool_ctl); \
- jnlpool_detach(); \
- assert(NULL == jnlpool.jnlpool_ctl); \
- assert(FALSE == pool_init); \
+ jnlpool_shmid = jnlpool->repl_inst_filehdr->jnlpool_shmid; \
+ assert(NULL != jnlpool->jnlpool_ctl); \
if (INVALID_SHMID == CNL->jnlpool_shmid) \
rts_error_csa(CSA_ARG(CSA) VARLSTCNT(4) ERR_REPLINSTNOSHM, 2, DB_LEN_STR(REG)); \
else \
@@ -1315,44 +1322,85 @@ MBSTART { \
LEN_AND_STR(CNL->replinstfilename), CNL->jnlpool_shmid); \
} \
CSA->jnlpool_validate_check |= REPLINSTMISMTCH_CHECK_DONE; \
+ CSA->jnlpool = jnlpool; \
} \
} \
} MBEND
-#define JNLPOOL_INIT_IF_NEEDED(CSA, CSD, CNL) \
+#define JNLPOOL_INIT_IF_NEEDED(CSA, CSD, CNL, SCNDDBNOUPD_CHECK_NEEDED) \
MBSTART { \
GBLREF boolean_t is_replicator; \
- GBLREF boolean_t pool_init; \
GBLREF gd_region *gv_cur_region; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool_head; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
+ jnlpool_addrs_ptr_t lcl_jnlpool = NULL, jnlpool_save; \
+ gd_id replfile_gdid, *tmp_gdid; \
+ replpool_identifier replpool_id; \
+ unsigned int full_len; \
+ int4 status = -1; \
+ boolean_t jnlpool_found = FALSE; \
\
if (REPL_ALLOWED(CSD) && is_replicator) \
{ \
- if (!pool_init) \
- jnlpool_init((jnlpool_user)GTMPROC, (boolean_t)FALSE, (boolean_t *)NULL); \
- assert(pool_init); \
- VALIDATE_INITIALIZED_JNLPOOL(CSA, CNL, gv_cur_region, GTMPROC, SCNDDBNOUPD_CHECK_TRUE); \
+ jnlpool_save = jnlpool; \
+ if (CSA->jnlpool && ((jnlpool_addrs_ptr_t)(CSA->jnlpool))->pool_init) \
+ { \
+ lcl_jnlpool = jnlpool = (jnlpool_addrs_ptr_t)CSA->jnlpool; \
+ jnlpool_found = TRUE; \
+ } else if (IS_GTM_IMAGE && REPL_INST_AVAILABLE(CSA->gd_ptr)) \
+ { \
+ status = filename_to_id(&replfile_gdid, replpool_id.instfilename); \
+ if (SS_NORMAL != status) \
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLINSTACC, 2, full_len, replpool_id.instfilename,\
+ ERR_TEXT, 2, RTS_ERROR_LITERAL("could not get file id"), status); \
+ for (lcl_jnlpool = jnlpool_head; NULL != lcl_jnlpool; lcl_jnlpool = lcl_jnlpool->next) \
+ { \
+ if (lcl_jnlpool->pool_init) \
+ { \
+ tmp_gdid = &FILE_ID(lcl_jnlpool->jnlpool_dummy_reg); \
+ if (!gdid_cmp(tmp_gdid, &replfile_gdid)) \
+ { \
+ jnlpool = CSA->jnlpool = lcl_jnlpool; \
+ jnlpool_found = TRUE; \
+ break; \
+ } \
+ } \
+ } \
+ } else \
+ { \
+ lcl_jnlpool = jnlpool; \
+ if (lcl_jnlpool && lcl_jnlpool->pool_init) \
+ jnlpool_found = TRUE; \
+ } \
+ if (!jnlpool_found || (NULL == lcl_jnlpool) || !lcl_jnlpool->pool_init) \
+ { \
+ jnlpool_init((jnlpool_user)GTMPROC, (boolean_t)FALSE, (boolean_t *)NULL, CSA->gd_ptr); \
+ if (jnlpool && jnlpool->pool_init) \
+ CSA->jnlpool = jnlpool; \
+ } \
+ assert(jnlpool && jnlpool->pool_init); \
+ VALIDATE_INITIALIZED_JNLPOOL(CSA, CNL, gv_cur_region, GTMPROC, SCNDDBNOUPD_CHECK_NEEDED); \
} \
} MBEND
#define ASSERT_VALID_JNLPOOL(CSA) \
MBSTART { \
- GBLREF jnlpool_ctl_ptr_t jnlpool_ctl; \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
\
assert(CSA && CSA->critical && CSA->nl); /* should have been setup in mu_rndwn_replpool */ \
- assert(jnlpool_ctl && (jnlpool_ctl == jnlpool.jnlpool_ctl)); \
- assert(CSA->critical == (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl + JNLPOOL_CTL_SIZE)); \
+ assert(jnlpool && jnlpool->jnlpool_ctl); \
+ assert(CSA->critical == (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl + JNLPOOL_CTL_SIZE)); \
assert(CSA->nl == (node_local_ptr_t) ((sm_uc_ptr_t)CSA->critical + JNLPOOL_CRIT_SPACE \
+ SIZEOF(mutex_spin_parms_struct))); \
- assert(jnlpool_ctl->filehdr_off); \
- assert(jnlpool_ctl->srclcl_array_off > jnlpool.jnlpool_ctl->filehdr_off); \
- assert(jnlpool_ctl->sourcelocal_array_off > jnlpool.jnlpool_ctl->srclcl_array_off); \
- assert(jnlpool.repl_inst_filehdr == (repl_inst_hdr_ptr_t) ((sm_uc_ptr_t)jnlpool_ctl \
- + jnlpool_ctl->filehdr_off)); \
- assert(jnlpool.gtmsrc_lcl_array == (gtmsrc_lcl_ptr_t)((sm_uc_ptr_t)jnlpool_ctl \
- + jnlpool_ctl->srclcl_array_off)); \
- assert(jnlpool.gtmsource_local_array == (gtmsource_local_ptr_t)((sm_uc_ptr_t)jnlpool_ctl \
- + jnlpool_ctl->sourcelocal_array_off)); \
+ assert(jnlpool->jnlpool_ctl->filehdr_off); \
+ assert(jnlpool->jnlpool_ctl->srclcl_array_off > jnlpool->jnlpool_ctl->filehdr_off); \
+ assert(jnlpool->jnlpool_ctl->sourcelocal_array_off > jnlpool->jnlpool_ctl->srclcl_array_off); \
+ assert(jnlpool->repl_inst_filehdr == (repl_inst_hdr_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl \
+ + jnlpool->jnlpool_ctl->filehdr_off)); \
+ assert(jnlpool->gtmsrc_lcl_array == (gtmsrc_lcl_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl \
+ + jnlpool->jnlpool_ctl->srclcl_array_off)); \
+ assert(jnlpool->gtmsource_local_array == (gtmsource_local_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl \
+ + jnlpool->jnlpool_ctl->sourcelocal_array_off)); \
} MBEND
/* Explanation for why we need the following macro.
@@ -1783,19 +1831,19 @@ MBSTART { \
} MBEND
#define FROZEN(CSD) ((CSD)->freeze || FALSE)
-#define FROZEN_HARD(CSD) ((CSD)->freeze && !(CSD)->freeze_online)
-#define FROZEN_CHILLED(CSD) ((CSD)->freeze && (CSD)->freeze_online)
+#define FROZEN_HARD(CSA) ((CSA)->hdr->freeze && !(CSA)->nl->freeze_online)
+#define FROZEN_CHILLED(CSA) ((CSA)->hdr->freeze && (CSA)->nl->freeze_online)
#define FREEZE_LATCH_HELD(CSA) (process_id == (CSA)->nl->freeze_latch.u.parts.latch_pid)
#define CHILLED_AUTORELEASE_MASK 0x02
#define CHILLED_AUTORELEASE_REPORT_MASK 0x04
-#define CHILLED_AUTORELEASE(CSD) (((CSD)->freeze_online & CHILLED_AUTORELEASE_MASK) || FALSE)
-#define CHILLED_AUTORELEASE_REPORTED(CSD) (((CSD)->freeze_online & CHILLED_AUTORELEASE_REPORT_MASK) || FALSE)
+#define CHILLED_AUTORELEASE(CSA) (((CSA)->nl->freeze_online & CHILLED_AUTORELEASE_MASK) || FALSE)
+#define CHILLED_AUTORELEASE_REPORTED(CSA) (((CSA)->nl->freeze_online & CHILLED_AUTORELEASE_REPORT_MASK) || FALSE)
#define DO_CHILLED_AUTORELEASE(CSA, CSD) \
MBSTART { \
GBLREF uint4 process_id; \
boolean_t was_latch; \
\
- if (CHILLED_AUTORELEASE(CSD) && !CHILLED_AUTORELEASE_REPORTED(CSD)) \
+ if (CHILLED_AUTORELEASE(CSA) && !CHILLED_AUTORELEASE_REPORTED(CSA)) \
{ \
was_latch = FREEZE_LATCH_HELD(CSA); \
if (!was_latch) \
@@ -1804,11 +1852,11 @@ MBSTART { \
*/ \
grab_latch(&(CSA)->nl->freeze_latch, GRAB_LATCH_INDEFINITE_WAIT); \
} \
- if (CHILLED_AUTORELEASE(CSD) && !CHILLED_AUTORELEASE_REPORTED(CSD)) \
+ if (CHILLED_AUTORELEASE(CSA) && !CHILLED_AUTORELEASE_REPORTED(CSA)) \
{ \
(CSD)->freeze = FALSE; \
(CSD)->image_count = 0; \
- (CSD)->freeze_online = CHILLED_AUTORELEASE_MASK | CHILLED_AUTORELEASE_REPORT_MASK; \
+ (CSA)->nl->freeze_online = CHILLED_AUTORELEASE_MASK | CHILLED_AUTORELEASE_REPORT_MASK; \
send_msg_csa(CSA_ARG(CSA) VARLSTCNT(9) ERR_OFRZAUTOREL, 2, REG_LEN_STR((CSA)->region), \
ERR_ERRCALL, 3, CALLFROM); \
} \
@@ -1889,7 +1937,7 @@ typedef struct sgmnt_data_struct
uint4 freeze; /* for db freezing. Set to "getuid" on Unix and "process_id" on VMS */
int4 kill_in_prog; /* counter for multi-crit kills that are not done yet */
int4 abandoned_kills;
- uint4 freeze_online; /* for online db freezing, a.k.a. chill. */
+ uint4 unused_freeze_online_filler; /* see field in node_local */
char filler_320[4];
/************* FIELDS USED IN V4 <==> V5 COMPATIBILITY MODE ****************/
trans_num tn_upgrd_blks_0; /* TN when blks_to_upgrd becomes 0.
@@ -1946,7 +1994,6 @@ typedef struct sgmnt_data_struct
uint4 epoch_taper_time_pct; /* in the last pct we start tapering for time */
uint4 epoch_taper_jnl_pct; /* in the last pct we start tapering for jnl */
boolean_t asyncio; /* If TRUE, GT.M uses async I/O */
- /* char filler_512[0]; */
/************* FIELDS Used for update process performance improvement. Some may go away in later releases ********/
uint4 reserved_for_upd; /* Percentage (%) of blocks reserved for update process disk read */
uint4 avg_blks_per_100gbl; /* Number of blocks read on average for 100 global key read */
@@ -2115,7 +2162,8 @@ typedef struct sgmnt_data_struct
boolean_t lock_crit_with_db; /* flag controlling LOCK crit mechanism; see interlock.h */
uint4 basedb_fname_len; /* byte length of filename stored in "basedb_fname[]" */
unsigned char basedb_fname[256]; /* full path filaneme of corresponding baseDB if this is a statsDB */
- char filler_7k[444];
+ boolean_t read_only; /* If TRUE, GT.M uses a process-private mmap instead of IPC */
+ char filler_7k[440];
char filler_8k[1024];
/********************************************************/
/* Master bitmap immediately follows. Tells whether the local bitmaps have any free blocks or not. */
@@ -2367,6 +2415,11 @@ typedef struct gdr_name_struct
struct gd_addr_struct *gd_ptr;
} gdr_name;
+typedef struct gd_inst_info_struct
+{
+ char instfilename[MAX_FN_LEN + 1]; /* + 1 for null */
+} gd_inst_info;
+
typedef struct gd_addr_struct
{
struct gd_region_struct *local_locks;
@@ -2380,6 +2433,7 @@ typedef struct gd_addr_struct
struct gd_region_struct *regions;
struct gd_segment_struct *segments;
struct gd_gblname_struct *gblnames;
+ struct gd_inst_info_struct *instinfo;
struct gd_addr_struct *link;
struct hash_table_mname_struct *tab_ptr;
gd_id *id;
@@ -2423,7 +2477,8 @@ typedef struct gd_segment_struct
struct gd_region_struct *repl_list;
uint4 is_encrypted;
boolean_t asyncio; /* copied over to csd->asyncio at db creation time */
- char filler[16]; /* filler to store runtime structures without changing gdeget/gdeput.m */
+ boolean_t read_only;
+ char filler[12]; /* filler to store runtime structures without changing gdeget/gdeput.m */
} gd_segment;
typedef union
@@ -2641,6 +2696,9 @@ typedef struct sgmnt_addrs_struct
* Is a copy of reg->statsDB_setup_completed but is present in "csa"
* too to handle was_open regions.
*/
+ gd_inst_info *gd_instinfo; /* global directory not gtm_repl_instance */
+ gd_addr *gd_ptr; /* global directory for region */
+ struct jnlpool_addrs_struct *jnlpool; /* NULL until put, kill, or other function requiring jnlpool */
} sgmnt_addrs;
typedef struct gd_binding_struct
@@ -3847,15 +3905,14 @@ MBSTART { \
*/
#define MAXHARDCRITS 31
-#define WAIT_FOR_REGION_TO_UNFREEZE(CSA, CSD) \
+#define WAIT_FOR_REGION_TO_UNFREEZE(CSA) \
MBSTART { \
int lcnt1; \
\
- assert(CSA->hdr == CSD); \
assert(!CSA->now_crit); \
for (lcnt1 = 1; ; lcnt1++) \
{ \
- if (!FROZEN_HARD(CSD)) \
+ if (!FROZEN_HARD(CSA)) \
break; \
if (MAXHARDCRITS < lcnt1) \
wcs_backoff(lcnt1); \
@@ -3870,9 +3927,9 @@ MBSTART { \
assert((CSA)->hdr == (CSD)); \
for (lcnt1 = 1; ; lcnt1++) \
{ \
- if (!FROZEN_CHILLED(CSD)) \
+ if (!FROZEN_CHILLED(CSA)) \
break; \
- if (CHILLED_AUTORELEASE(CSD)) \
+ if (CHILLED_AUTORELEASE(CSA)) \
{ \
DO_CHILLED_AUTORELEASE(CSA, CSD); \
break; \
@@ -3894,21 +3951,21 @@ MBSTART { \
* don't need that functionality but it does not hurt them so we leave it at that instead of forking this
* macro into two versions (one using "grab_crit" and another using "grab_crit_encr_cycle_sync").
*/
-#define GRAB_UNFROZEN_CRIT(reg, csa, csd) \
+#define GRAB_UNFROZEN_CRIT(reg, csa) \
MBSTART { \
int lcnt; \
\
- assert(&FILE_INFO(reg)->s_addrs == csa && csa->hdr == csd); \
+ assert(&FILE_INFO(reg)->s_addrs == csa); \
assert(csa->now_crit); \
for (lcnt = 0; ; lcnt++) \
{ \
- if (!FROZEN_HARD(csd)) \
+ if (!FROZEN_HARD(csa)) \
break; \
rel_crit(reg); \
- WAIT_FOR_REGION_TO_UNFREEZE(csa, csd); \
+ WAIT_FOR_REGION_TO_UNFREEZE(csa); \
grab_crit_encr_cycle_sync(reg); \
} \
- assert(!FROZEN_HARD(csd) && csa->now_crit); \
+ assert(!FROZEN_HARD(csa) && csa->now_crit); \
} MBEND
/* remove "csa" from list of open regions (cs_addrs_list) */
@@ -4635,7 +4692,7 @@ MBSTART { \
GBLREF gv_namehead *gv_target; \
\
if (!REG->open) \
- gv_init_reg(REG); \
+ gv_init_reg(REG, ADDR); \
gvspan = GVNH_REG->gvspan; \
assert(NULL != gvspan); \
min_reg_index = gvspan->min_reg_index; \
@@ -4681,10 +4738,11 @@ MBSTART { \
# define SYNC_ONLN_RLBK_CYCLES \
MBSTART { \
GBLREF sgmnt_addrs *cs_addrs_list; \
- GBLREF jnlpool_addrs jnlpool; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool_head; \
GBLREF boolean_t mu_reorg_process; \
\
sgmnt_addrs *lcl_csa; \
+ jnlpool_addrs_ptr_t lcl_jnlpool; \
DCL_THREADGBL_ACCESS; \
\
SETUP_THREADGBL_ACCESS; \
@@ -4697,10 +4755,13 @@ MBSTART { \
/* Online rollback increments csa->hdr->db_trigger_cycle forcing a mismatch to reload triggers */ \
lcl_csa->db_trigger_cycle = lcl_csa->hdr->db_trigger_cycle; \
} \
- if (NULL != jnlpool.jnlpool_ctl) \
+ for (lcl_jnlpool = jnlpool_head; NULL != lcl_jnlpool; lcl_jnlpool = lcl_jnlpool->next) \
{ \
- lcl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs; \
- lcl_csa->onln_rlbk_cycle = jnlpool.jnlpool_ctl->onln_rlbk_cycle; \
+ if (NULL != lcl_jnlpool->jnlpool_ctl) \
+ { \
+ lcl_csa = &FILE_INFO(lcl_jnlpool->jnlpool_dummy_reg)->s_addrs; \
+ lcl_csa->onln_rlbk_cycle = lcl_jnlpool->jnlpool_ctl->onln_rlbk_cycle; \
+ } \
} \
} \
} MBEND
@@ -5138,8 +5199,8 @@ void grab_crit(gd_region *reg);
boolean_t grab_crit_encr_cycle_sync(gd_region *reg);
boolean_t grab_crit_immediate(gd_region *reg, boolean_t ok_for_wcs_recover);
boolean_t grab_lock(gd_region *reg, boolean_t is_blocking_wait, uint4 onln_rlbk_action);
-void gv_init_reg(gd_region *reg);
-void gvcst_init(gd_region *greg);
+void gv_init_reg(gd_region *reg, gd_addr *addr);
+void gvcst_init(gd_region *greg, gd_addr *addr);
enum cdb_sc gvincr_compute_post_incr(srch_blk_status *bh);
enum cdb_sc gvincr_recompute_upd_array(srch_blk_status *bh, struct cw_set_element_struct *cse, cache_rec_ptr_t cr);
boolean_t mupfndfil(gd_region *reg, mstr *mstr_addr, boolean_t log_error);
diff --git a/sr_port/get_dlr_device.c b/sr_port/get_dlr_device.c
index 1c103d7..38b4b2c 100755
--- a/sr_port/get_dlr_device.c
+++ b/sr_port/get_dlr_device.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -18,11 +19,12 @@ GBLREF io_pair io_curr_device;
void get_dlr_device(mval *v)
{
mstr x;
- char buff[128], *cp, *cend;
+ char *cp, *cend;
- x.len = SIZEOF(buff);
- x.addr = buff;
+ x.len = DD_BUFLEN; /* Default length, if dollar.device[] array is used. */
+ x.addr = NULL;
(io_curr_device.in->disp_ptr->dlr_device)(&x);
+ assert((0 >= x.len) || (NULL != x.addr));
v->mvtype = MV_STR;
v->str.addr = cp = x.addr;
cend = cp + x.len;
diff --git a/sr_port/gtm_connect.c b/sr_port/gtm_connect.c
index 983d9eb..1f64b86 100755
--- a/sr_port/gtm_connect.c
+++ b/sr_port/gtm_connect.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -18,6 +19,7 @@
#include "gtm_socket.h"
#include "gtm_inet.h"
#include "gtm_string.h"
+#include "gtm_select.h"
int gtm_connect(int socket, struct sockaddr *address, size_t address_len)
{
diff --git a/sr_port/gtm_env_init.c b/sr_port/gtm_env_init.c
index e04b0d3..df42306 100755
--- a/sr_port/gtm_env_init.c
+++ b/sr_port/gtm_env_init.c
@@ -94,6 +94,7 @@ void gtm_env_init(void)
mstr val, trans;
uint4 tdbglvl, tmsock, reservesize, memsize, cachent, trctblsize, trctblbytes;
uint4 max_threads, max_procs;
+ int4 temp_gtm_strpllim;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -400,6 +401,12 @@ void gtm_env_init(void)
gtm_mupjnl_parallel = trans_numeric(&val, &is_defined, TRUE);
if (!is_defined)
gtm_mupjnl_parallel = 1;
+ /* See if $gtm_string_pool_limit is set */
+ val.addr = GTM_STRPLLIM;
+ val.len = SIZEOF(GTM_STRPLLIM) - 1;
+ temp_gtm_strpllim = trans_numeric(&val, &is_defined, TRUE);
+ if (0 < temp_gtm_strpllim)
+ TREF(gtm_strpllim) = temp_gtm_strpllim;
/* Platform specific initializations */
gtm_env_init_sp();
}
diff --git a/sr_port/gtm_libaio.h b/sr_port/gtm_libaio.h
index a346ef1..042f305 100644
--- a/sr_port/gtm_libaio.h
+++ b/sr_port/gtm_libaio.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2016-2017 Fidelity National Information *
+ * Copyright (c) 2016-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -65,11 +65,21 @@ struct aiocb {
/* This struct mimics the structure of struct iocb, but adds a few fields
* to the end for our own use. See <linux/aio_abi.h>::struct iocb.
+ * Note: that Linux v4.14 typedef'ed aio_rw_flags like so.
+ * typedef int __bitwise __kernel_rwf_t;
*/
struct aiocb {
/* kernel-internel structure, mirrors struct iocb */
__u64 aio_data;
- __u32 PADDED(aio_key, aio_reserved1);
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+ __u32 aio_key; /* the kernel sets aio_key to the req # */
+ int __bitwise aio_rw_flags; /* RWF_* flags */
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+ int __bitwise aio_rw_flags; /* RWF_* flags */
+ __u32 aio_key; /* the kernel sets aio_key to the req # */
+#else
+#error edit for your odd byteorder.
+#endif
__u16 aio_lio_opcode;
__s16 aio_reqprio;
__u32 aio_fildes;
@@ -92,10 +102,12 @@ struct aiocb {
#define IF_LIBAIO(x) x
#define IF_LIBAIO_ELSE(x,y) x
-/* linux/aio_abi.h provides PADDED to define the above struct, but this collides with
- * our personal #define which means something completely different.
+#ifdef PADDED
+/* linux/aio_abi.h provides PADDED until Linux v4.14 to define the above struct, but
+ * this collides with our personal #define which means something completely different.
*/
#undef PADDED
+#endif
#endif /* USE_LIBAIO */
#endif /* GTM_LIBAIO_H_INCLUDED */
diff --git a/sr_port/gtm_newintrinsic.c b/sr_port/gtm_newintrinsic.c
index 9c92aae..1c150a7 100644
--- a/sr_port/gtm_newintrinsic.c
+++ b/sr_port/gtm_newintrinsic.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -25,7 +26,6 @@ GBLREF stack_frame *frame_pointer;
GBLREF tp_frame *tp_pointer;
GBLREF symval *curr_symval;
GBLREF uint4 dollar_tlevel;
-GBLREF mval dollar_etrap;
#ifdef GTM_TRIGGER
GBLREF mval dollar_ztwormhole;
#endif
@@ -43,7 +43,9 @@ void gtm_newintrinsic(mval *intrinsic)
unsigned char *old_sp, *top;
int indx;
int4 shift_size;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
assert(intrinsic);
if (frame_pointer->type & SFT_COUNT)
{ /* Current (youngest) frame is NOT an indirect frame.
@@ -147,7 +149,7 @@ void gtm_newintrinsic(mval *intrinsic)
mv_st_ent->mv_st_cont.mvs_msav.addr = intrinsic;
}
/* Clear the intrinsic var's current value if not $ZTWORMHOLE or $ETRAP */
- if ((&dollar_etrap != intrinsic) GTMTRIG_ONLY(&& (&dollar_ztwormhole != intrinsic)))
+ if ((&(TREF(dollar_etrap)) != intrinsic) GTMTRIG_ONLY(&& (&dollar_ztwormhole != intrinsic)))
{
intrinsic->mvtype = MV_STR;
intrinsic->str.len = 0;
diff --git a/sr_port/gtm_savetraps.c b/sr_port/gtm_savetraps.c
index 44da53e..6ca3e4b 100755
--- a/sr_port/gtm_savetraps.c
+++ b/sr_port/gtm_savetraps.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -13,8 +14,6 @@
#include "gtm_savetraps.h"
#include "gtm_newintrinsic.h"
-GBLREF mval dollar_ztrap;
-GBLREF mval dollar_etrap;
GBLREF boolean_t ztrap_explicit_null;
/* Routine called when we need to save the current Xtrap (etrap or ztrap) but
@@ -23,11 +22,13 @@ GBLREF boolean_t ztrap_explicit_null;
void gtm_savetraps(void)
{
mval *intrinsic;
+ DCL_THREADGBL_ACCESS;
- if (dollar_ztrap.str.len || ztrap_explicit_null)
- intrinsic = &dollar_ztrap;
+ SETUP_THREADGBL_ACCESS;
+ if ((TREF(dollar_ztrap)).str.len || ztrap_explicit_null)
+ intrinsic = &(TREF(dollar_ztrap));
else
- intrinsic = &dollar_etrap;
+ intrinsic = &(TREF(dollar_etrap));
gtm_newintrinsic(intrinsic);
return;
}
diff --git a/sr_port/gtm_string.h b/sr_port/gtm_string.h
index a50847d..8fd93a9 100755
--- a/sr_port/gtm_string.h
+++ b/sr_port/gtm_string.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -27,6 +27,8 @@
#define STRNCMP_LIT(SOURCE, LITERAL) strncmp(SOURCE, LITERAL, SIZEOF(LITERAL) - 1) /* BYPASSOK */
/* Make sure that SIZEOF(SOURCE) > 0 or SOURCE != NULL before running. */
#define STRNCMP_LIT_FULL(SOURCE, LITERAL) strncmp(SOURCE, LITERAL, SIZEOF(LITERAL)) /* BYPASSOK */
+#define STRNCMP_LIT_LEN(SOURCE, LITERAL, LENGTH) \
+ strncmp((const char *)(SOURCE), (const char *)(LITERAL), MIN(SIZEOF(LITERAL), LENGTH)) /* BYPASSOK */
#define STRNCMP_STR(SOURCE, STRING, LEN) strncmp(SOURCE, STRING, LEN)
/* Ensure that our uses of STRTOK and STRTOK_R are not called inside a timer handler */
#define STRTOK_R(STR, DELIM, SAVE) (DBG_ASSERT(FALSE == timer_in_handler) strtok_r(STR, DELIM, SAVE))
diff --git a/sr_port/gtm_threadgbl_defs.h b/sr_port/gtm_threadgbl_defs.h
index 692e0a9..00b38b8 100644
--- a/sr_port/gtm_threadgbl_defs.h
+++ b/sr_port/gtm_threadgbl_defs.h
@@ -217,10 +217,13 @@ THREADGBLFPTR(create_fatal_error_zshow_dmp_fptr, void, (void)) /* Fptr for gt
THREADGBLDEF(disable_sigcont, boolean_t) /* indicates whether the SIGCONT signal
* is allowed internally */
THREADGBLDEF(dollar_zcompile, mstr) /* compiler qualifiers */
+THREADGBLDEF(dollar_etrap, mval) /* $etrap - standard error action */
THREADGBLDEF(dollar_zmode, mval) /* run mode indicator */
THREADGBLDEF(dollar_zonlnrlbk, int) /* ISV (incremented for every online rollback) */
THREADGBLDEF(dollar_zclose, int) /* ISV (set to close status for PIPE device) */
THREADGBLDEF(dollar_zroutines, mstr) /* routine search list */
+THREADGBLDEF(dollar_zstep, mval) /* $zstep - zstep action */
+THREADGBLDEF(dollar_ztrap, mval) /* $ztrap - recursive try error action */
THREADGBLDEF(error_on_jnl_file_lost, unsigned int) /* controls error handling done by jnl_file_lost.
* 0 (default) : Turn off journaling and continue.
* 1 : Keep journaling on, throw rts_error */
@@ -240,6 +243,9 @@ THREADGBLDEF(gtm_environment_init, boolean_t) /* indicates GT.M development e
* than a production environment */
THREADGBLFPTR(gtm_sigusr1_handler, void, (void)) /* SIGUSR1 signal handler function ptr */
THREADGBLDEF(gtm_linktmpdir, mstr) /* Directory to use for relinkctl files */
+THREADGBLDEF(gtm_strpllim, int4) /* if non-zero, sets limit on stringpool */
+THREADGBLDEF(gtm_strpllimwarned, boolean_t) /* already hit limit on stringpool */
+THREADGBLDEF(gtm_trigger_etrap, mval) /* $etrap - for use in triggers */
THREADGBLDEF(gtm_trctbl_cur, trctbl_entry *) /* Current gtm trace table entry */
THREADGBLDEF(gtm_trctbl_end, trctbl_entry *) /* End of gtm trace table (last entry + 1) */
THREADGBLDEF(gtm_trctbl_groups, unsigned int) /* Trace group mask (max 31 groups) */
@@ -315,6 +321,7 @@ THREADGBLDEF(zdate_form, int4) /* Control for default $zdate() format */
THREADGBLAR1DEF(zintcmd_active, zintcmd_active_info, ZINTCMD_LAST) /* Interrupted timed commands */
THREADGBLDEF(zro_root, zro_ent *) /* Anchor for zroutines structure entry array */
THREADGBLDEF(zsearch_var, lv_val *) /* UNIX $zsearch() lookup variable */
+THREADGBLDEF(ztrap_form, int4) /* ztrap type indicator */
THREADGBLDEF(poll_fds_buffer, char *) /* Buffer for poll() argument */
THREADGBLDEF(poll_fds_buffer_size, size_t) /* Current allocated size of poll_fds_buffer */
THREADGBLDEF(socket_handle_counter, int) /* Counter for generated socket handles */
diff --git a/sr_port/gtmmsg.h b/sr_port/gtmmsg.h
old mode 100755
new mode 100644
index cafcf24..28e1efe
--- a/sr_port/gtmmsg.h
+++ b/sr_port/gtmmsg.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -13,11 +13,6 @@
#ifndef GTMMSG_H_INCLUDED
#define GTMMSG_H_INCLUDED
-#ifdef VMS
-void gtm_getmsg(uint4 msgnum, mstr *msgbuf);
-void gtm_putmsg(int4 msgid, ...);
-#define gtm_putmsg_csa gtm_putmsg
-#elif defined(UNIX)
void gtm_getmsg(int4 msgnum, mstr *msgbuf);
void gtm_putmsg(int argcnt, ...);
void gtm_putmsg_csa(void *, int argcnt, ...); /* Use CSA_ARG(CSA) for portability */
@@ -29,7 +24,16 @@ GBLREF boolean_t multi_thread_in_use; /* TRUE => threads are in use. FALSE => n
/* If threads are in use, then do not use "gv_cur_region" as the thread could be operating on a region completely different
* from the process-wide "gv_cur_region" variable. Assume a safe value of NULL as the csa.
*/
-#define PTHREAD_CSA_FROM_GV_CUR_REGION ((CUSTOM_ERRORS_LOADED && !multi_thread_in_use) ? REG2CSA(gv_cur_region) : NULL)
+#define PTHREAD_CSA_FROM_GV_CUR_REGION(CSA, LCL_JNLPOOL) \
+{ \
+ if (!multi_thread_in_use) \
+ { \
+ CSA = REG2CSA(gv_cur_region); \
+ if (CSA && !CUSTOM_ERRORS_LOADED_CSA(CSA, LCL_JNLPOOL)) \
+ CSA = NULL; \
+ } else \
+ CSA = NULL; \
+}
# define GET_MSG_IDX(MSG_ID, CTL, IDX) \
{ \
@@ -47,8 +51,4 @@ GBLREF boolean_t multi_thread_in_use; /* TRUE => threads are in use. FALSE => n
MSG_INFO = CTL->fst_msg + idx; \
}
-#else
-# error Unsupported platform
-#endif
-
#endif /* GTMMSG_H_INCLUDED */
diff --git a/sr_port/gtmrecv_get_opt.c b/sr_port/gtmrecv_get_opt.c
index a1c775c..59288d1 100755
--- a/sr_port/gtmrecv_get_opt.c
+++ b/sr_port/gtmrecv_get_opt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -224,12 +224,13 @@ int gtmrecv_get_opt(void)
}
if (gtmrecv_options.statslog)
{
- statslog_val_len = 4; /* max(strlen("ON"), strlen("OFF")) + 1 */
+ statslog_val_len = 3; /* max(strlen("ON"), strlen("OFF")) */
if (!cli_get_str("STATSLOG", statslog_val, &statslog_val_len))
{
util_out_print("Error parsing STATSLOG qualifier", TRUE);
return (-1);
}
+ statslog_val[statslog_val_len] = '\0';
cli_strupper(statslog_val);
if (0 == STRCMP(statslog_val, "ON"))
gtmrecv_options.statslog = TRUE;
diff --git a/sr_port/gtmsource_ch.c b/sr_port/gtmsource_ch.c
index ff98906..f13122d 100755
--- a/sr_port/gtmsource_ch.c
+++ b/sr_port/gtmsource_ch.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -44,7 +44,7 @@
#include "ftok_sems.h"
#endif
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_src_server;
GBLREF gtmsource_options_t gtmsource_options;
@@ -82,11 +82,11 @@ CONDITION_HANDLER(gtmsource_ch)
}
}
}
- if (jnlpool.jnlpool_ctl)
+ if ((NULL != jnlpool) && (jnlpool->jnlpool_ctl))
{
- csa = (sgmnt_addrs *)&FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = (sgmnt_addrs *)&FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
if (csa && csa->now_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
if (is_src_server)
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_REPLSRCEXITERR, 2, gtmsource_options.secondary_instname,
diff --git a/sr_port/gtmsource_comm_init.c b/sr_port/gtmsource_comm_init.c
index 0ffb772..24af818 100755
--- a/sr_port/gtmsource_comm_init.c
+++ b/sr_port/gtmsource_comm_init.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -44,7 +45,7 @@
#include "repl_log.h"
GBLDEF int gtmsource_sock_fd = FD_INVALID;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF FILE *gtmsource_log_fp;
error_def(ERR_REPLCOMM);
@@ -67,7 +68,7 @@ int gtmsource_comm_init(void)
if (FD_INVALID != gtmsource_sock_fd) /* Initialization done already */
return(0);
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
port_len = 0;
I2A(port_buffer, port_len, gtmsource_local->secondary_port);
port_buffer[port_len] = '\0';
diff --git a/sr_port/gtmsource_ctl_init.c b/sr_port/gtmsource_ctl_init.c
index e82e89f..0460252 100644
--- a/sr_port/gtmsource_ctl_init.c
+++ b/sr_port/gtmsource_ctl_init.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -63,7 +63,7 @@
GBLDEF repl_ctl_element *repl_ctl_list = NULL;
GBLDEF repl_rctl_elem_t *repl_rctl_list = NULL;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF seq_num seq_num_zero;
GBLREF gd_addr *gd_header;
@@ -223,7 +223,7 @@ int repl_ctl_create(repl_ctl_element **ctl, gd_region *reg, int jnl_fn_len, char
{ /* Concurrent online rollback. Possible only if we are called from gtmsource_update_zqgblmod_seqno_and_tn
* in which case we don't hold the gtmsource_srv_latch. Assert that.
*/
- assert(process_id != jnlpool.gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
+ assert(process_id != jnlpool->gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
SYNC_ONLN_RLBK_CYCLES;
gtmsource_onln_rlbk_clnup();
if (!was_crit)
@@ -507,7 +507,7 @@ int gtmsource_set_lookback(void)
for (ctl = repl_ctl_list->next; NULL != ctl; ctl = ctl->next)
{
if (((JNL_FILE_OPEN == ctl->file_state) || (JNL_FILE_CLOSED == ctl->file_state))
- && QWLE(jnlpool.gtmsource_local->read_jnl_seqno, ctl->seqno))
+ && QWLE(jnlpool->gtmsource_local->read_jnl_seqno, ctl->seqno))
ctl->lookback = TRUE;
else
ctl->lookback = FALSE;
diff --git a/sr_port/gtmsource_heartbeat.h b/sr_port/gtmsource_heartbeat.h
index b6de3e8..c5589c3 100755
--- a/sr_port/gtmsource_heartbeat.h
+++ b/sr_port/gtmsource_heartbeat.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -17,7 +18,7 @@
#ifndef REPL_DISABLE_HEARTBEAT
#define GTMSOURCE_IS_HEARTBEAT_DUE(NOW) \
(0 != last_sent_time \
- && difftime(*(NOW), last_sent_time) >= (double)jnlpool.gtmsource_local->connect_parms[GTMSOURCE_CONN_HEARTBEAT_PERIOD])
+ && difftime(*(NOW), last_sent_time) >= (double)jnlpool->gtmsource_local->connect_parms[GTMSOURCE_CONN_HEARTBEAT_PERIOD])
#else
#define GTMSOURCE_IS_HEARTBEAT_DUE(NOW) FALSE
#endif
diff --git a/sr_port/gtmsource_poll_actions.c b/sr_port/gtmsource_poll_actions.c
index 955f008..fc2905f 100755
--- a/sr_port/gtmsource_poll_actions.c
+++ b/sr_port/gtmsource_poll_actions.c
@@ -46,7 +46,7 @@
#include "sgtm_putmsg.h"
#include "copy.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF int gtmsource_sock_fd;
GBLREF gtmsource_state_t gtmsource_state;
GBLREF boolean_t gtmsource_logstats;
@@ -82,27 +82,27 @@ int gtmsource_poll_actions(boolean_t poll_secondary)
time_t temp_time;
gtm_time4_t time4;
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
if (SHUTDOWN == gtmsource_local->shutdown)
{
repl_log(gtmsource_log_fp, TRUE, TRUE, "Shutdown signalled\n");
gtmsource_end(); /* Won't return */
}
- if (jnlpool.jnlpool_ctl->freeze != last_seen_freeze_flag)
+ if (jnlpool->jnlpool_ctl->freeze != last_seen_freeze_flag)
{
- last_seen_freeze_flag = jnlpool.jnlpool_ctl->freeze;
+ last_seen_freeze_flag = jnlpool->jnlpool_ctl->freeze;
if (last_seen_freeze_flag)
{
sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFROZEN, 1,
- jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ jnlpool->repl_inst_filehdr->inst_info.this_instname);
repl_log(gtmsource_log_fp, TRUE, FALSE, print_msg);
- sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool.jnlpool_ctl->freeze_comment);
+ sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool->jnlpool_ctl->freeze_comment);
repl_log(gtmsource_log_fp, TRUE, TRUE, print_msg);
}
else
{
sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTUNFROZEN, 1,
- jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ jnlpool->repl_inst_filehdr->inst_info.this_instname);
repl_log(gtmsource_log_fp, TRUE, TRUE, print_msg);
}
}
@@ -177,7 +177,7 @@ int gtmsource_poll_actions(boolean_t poll_secondary)
#else
#error unsupported platform
#endif
- STRCPY(gtmsource_options.log_file, jnlpool.gtmsource_local->log_file);
+ STRCPY(gtmsource_options.log_file, jnlpool->gtmsource_local->log_file);
}
if ( log_switched == TRUE )
repl_log(gtmsource_log_fp, TRUE, TRUE, "Change log to %s successful\n", gtmsource_local->log_file);
diff --git a/sr_port/gtmsource_reinit_logseqno.c b/sr_port/gtmsource_reinit_logseqno.c
index d373db8..b0d2030 100755
--- a/sr_port/gtmsource_reinit_logseqno.c
+++ b/sr_port/gtmsource_reinit_logseqno.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2005 Fidelity Information Services, Inc. *
+ * Copyright (c) 2005-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -26,14 +27,14 @@
#include "repl_msg.h"
#include "gtmsource.h"
-GBLREF jnlpool_addrs jnlpool;
-GBLREF seq_num lastlog_seqno;
-GBLREF uint4 log_interval;
-GBLREF qw_num trans_sent_cnt, last_log_tr_sent_cnt;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF seq_num lastlog_seqno;
+GBLREF uint4 log_interval;
+GBLREF qw_num trans_sent_cnt, last_log_tr_sent_cnt;
void gtmsource_reinit_logseqno(void)
{
- lastlog_seqno = jnlpool.gtmsource_local->read_jnl_seqno - log_interval;
+ lastlog_seqno = jnlpool->gtmsource_local->read_jnl_seqno - log_interval;
trans_sent_cnt = -(qw_num)(log_interval - 1);
last_log_tr_sent_cnt = 0;
}
diff --git a/sr_port/gv_bind_name.c b/sr_port/gv_bind_name.c
index 59a3c86..01c5471 100755
--- a/sr_port/gv_bind_name.c
+++ b/sr_port/gv_bind_name.c
@@ -69,7 +69,7 @@ gvnh_reg_t *gv_bind_name(gd_addr *addr, mname_entry *gvname)
map = gv_srch_map(addr, gvname->var_name.addr, gvname->var_name.len, SKIP_BASEDB_OPEN_FALSE);
reg = map->reg.addr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, addr);
if (IS_STATSDB_REG(reg))
{ /* In case of a statsDB, it is possible that "gv_srch_map" or "gv_init_reg" calls above end up doing
* a "op_gvname/gv_bind_name" if they in turn invoke "gvcst_init_statsDB". In that case, the hash table
@@ -107,7 +107,7 @@ gvnh_reg_t *gv_bind_name(gd_addr *addr, mname_entry *gvname)
reg = gvnh_reg->gd_reg;
if (!reg->open)
{
- gv_init_reg(reg); /* could modify gvnh_reg->gvt if multiple regions map to same db file */
+ gv_init_reg(reg, addr); /* could modify gvnh_reg->gvt if multiple regions map to same db file */
assert((0 == gvnh_reg->gvt->clue.end) || IS_STATSDB_REG(reg)); /* A statsDB open writes to itself */
}
tmp_gvt = gvnh_reg->gvt;
diff --git a/sr_port/gv_init_reg.c b/sr_port/gv_init_reg.c
index feaff1b..e39bab8 100755
--- a/sr_port/gv_init_reg.c
+++ b/sr_port/gv_init_reg.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -31,7 +32,7 @@ GBLREF gv_key *gv_currkey;
GBLREF gv_key *gv_altkey;
GBLREF gd_region *gv_cur_region;
-void gv_init_reg (gd_region *reg)
+void gv_init_reg (gd_region *reg, gd_addr *addr)
{
# ifdef NOLICENSE
licensed = TRUE;
@@ -49,10 +50,10 @@ void gv_init_reg (gd_region *reg)
case dba_mm:
case dba_bg:
if (!reg->open)
- gvcst_init(reg);
+ gvcst_init(reg, addr);
break;
default:
- GTMASSERT;
+ assertpro(reg->dyn.addr->acc_meth != reg->dyn.addr->acc_meth);
}
assert(reg->open);
return;
diff --git a/sr_port/gv_rundown.c b/sr_port/gv_rundown.c
index 3f34a6e..086cea6 100644
--- a/sr_port/gv_rundown.c
+++ b/sr_port/gv_rundown.c
@@ -53,10 +53,10 @@
GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_addrs *cs_addrs;
-GBLREF boolean_t pool_init;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF int pool_init;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF recvpool_addrs recvpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
GBLREF gd_region *ftok_sem_reg;
#ifdef DEBUG
GBLREF boolean_t is_jnlpool_creator;
@@ -66,22 +66,26 @@ error_def(ERR_NOTALLDBRNDWN);
void gv_rundown(void)
{
- gd_region *r_top, *r_save, *r_local;
- gd_addr *addr_ptr;
- sgm_info *si;
- int4 rundown_status = EXIT_NRM; /* if gds_rundown went smoothly */
- unix_db_info *udi;
-# ifdef DEBUG
- sgmnt_addrs *csa;
-# endif
+ gd_region *r_top, *r_save, *r_local;
+ gd_addr *addr_ptr;
+ jnlpool_addrs_ptr_t local_jnlpool, save_jnlpool;
+ sgm_info *si;
+ int4 rundown_status = EXIT_NRM; /* if gds_rundown went smoothly */
+ unix_db_info *udi;
+ sgmnt_addrs *csa;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
r_save = gv_cur_region; /* Save for possible core dump */
+ save_jnlpool = jnlpool;
gvcmy_rundown();
ENABLE_AST
if (pool_init)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ {
+ for (local_jnlpool = jnlpool_head; local_jnlpool; local_jnlpool = local_jnlpool->next)
+ if (local_jnlpool->pool_init)
+ rel_lock(local_jnlpool->jnlpool_dummy_reg);
+ }
for (addr_ptr = get_next_gdr(NULL); addr_ptr; addr_ptr = get_next_gdr(addr_ptr))
{
for (r_local = addr_ptr->regions, r_top = r_local + addr_ptr->n_regions; r_local < r_top; r_local++)
@@ -94,9 +98,11 @@ void gv_rundown(void)
*/
# ifdef DEBUG
if (is_jnlpool_creator
- && INST_FREEZE_ON_NOSPC_ENABLED(REG2CSA(r_local)) && TREF(gtm_test_fake_enospc))
+ && INST_FREEZE_ON_NOSPC_ENABLED(REG2CSA(r_local), local_jnlpool)
+ && TREF(gtm_test_fake_enospc))
{ /* Clear ENOSPC faking now that we are running down */
csa = REG2CSA(r_local);
+ assert((NULL == csa->jnlpool) || (jnlpool == csa->jnlpool));
if (csa->nl->fake_db_enospc || csa->nl->fake_jnl_enospc)
{
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_TEXT, 2, DB_LEN_STR(r_local), ERR_TEXT,
@@ -107,6 +113,9 @@ void gv_rundown(void)
}
# endif
gv_cur_region = r_local;
+ csa = REG2CSA(r_local);
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ jnlpool = csa->jnlpool;
tp_change_reg();
rundown_status |= gds_rundown(CLEANUP_UDI_TRUE);
}
@@ -115,19 +124,21 @@ void gv_rundown(void)
}
rc_close_section();
gv_cur_region = r_save; /* Restore value for dumps but this region is now closed and is otherwise defunct */
+ jnlpool = save_jnlpool;
cs_addrs = NULL;
gtmsecshr_sock_cleanup(CLIENT);
# ifndef MUTEX_MSEM_WAKE
mutex_sock_cleanup();
# endif
- jnlpool_detach();
+ for (jnlpool = jnlpool_head; jnlpool; jnlpool = jnlpool->next)
+ jnlpool_detach();
/* Clean up any left-over ftok semaphores. This part of the code can be reached by almost all of the exit handling routines.
* If the ftok semaphore is grabbed, but not released, ftok_sem_reg will have a non-null value and grabbed_ftok_sem will be
* TRUE. We cannot rely on gv_cur_region always as it is used in so many places in so many ways.
* Note: Typically, it should suffice to check for ftok_sem_reg being non-null and pass that to ftok_sem_release. But, there
- * are some cases where ftok_sem_reg can be NULL and yet jnlpool.jnlpool_dummy_reg is non-null and the process holds an ftok
- * semaphore. For instance, if GT.M opened a particular region and then did a jnlpool_init which ended up with an rts_error
- * (after obtaining the ftok semaphore on jnlpool_dummy_reg), gds_rundown done above (to rundown the database) sets
+ * are some cases where ftok_sem_reg can be NULL and yet jnlpool->jnlpool_dummy_reg is non-null and the process holds an
+ * ftok semaphore. For instance, if GT.M opened a particular region and then did a jnlpool_init which ended up with an
+ * rts_erro (after obtaining the ftok semaphore on jnlpool_dummy_reg), gds_rundown done above (to rundown the database) sets
* ftok_sem_reg to NULL (as part of ftok_sem_release). But, jnlpool_dummy_reg is still non-null and the lingering ftok
* should be released. So, even though a subset of the below conditions should be enough, we check for all there cases just
* to be safe.
@@ -144,12 +155,13 @@ void gv_rundown(void)
assert(udi->grabbed_ftok_sem);
ftok_sem_release(ftok_sem_reg, FALSE, TRUE);
}
- if (NULL != jnlpool.jnlpool_dummy_reg)
- {
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
- if (udi->grabbed_ftok_sem)
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, FALSE, TRUE);
- }
+ for (jnlpool = jnlpool_head; jnlpool; jnlpool = jnlpool->next)
+ if (jnlpool->jnlpool_dummy_reg && jnlpool->pool_init)
+ {
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
+ if (udi->grabbed_ftok_sem)
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, FALSE, TRUE);
+ }
if (NULL != recvpool.recvpool_dummy_reg)
{
udi = FILE_INFO(recvpool.recvpool_dummy_reg);
diff --git a/sr_port/gvcst_blk_search.c b/sr_port/gvcst_blk_search.c
index deb04d5..cd6da60 100755
--- a/sr_port/gvcst_blk_search.c
+++ b/sr_port/gvcst_blk_search.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -27,6 +27,7 @@
#include "min_max.h"
#include "gvcst_expand_key.h"
#include "send_msg.h"
+#include "cert_blk.h"
/*
* -------------------------------------------------------------------
@@ -131,24 +132,33 @@ error_def(ERR_TEXT);
static void gvcst_search_fail(srch_blk_status *pStat)
{
- char buff[1024], crbuff[256], regbuff[512];
+ char buff[1024], crbuff[256], regbuff[512];
+ uint4 len;
assert(CDB_STAGNATE <= t_tries);
assert((NULL != pStat) && ((NULL != pStat->cr) || (dba_mm == gv_cur_region->dyn.addr->acc_meth)) && (NULL != cs_addrs));
if (NULL != pStat)
{
if (NULL != pStat->cr)
+ {
SPRINTF(crbuff, ": crbuff = 0x%lX", pStat->cr->buffaddr);
- else
+ cert_blk(gv_cur_region, pStat->cr->blk, (blk_hdr_ptr_t)GDS_ANY_REL2ABS(cs_addrs, pStat->cr->buffaddr),
+ 0, SEND_MSG_ON_CERT_FAIL, NULL);
+ } else
crbuff[0] = '\0';
+ len = (6 * SIZEOF(long unsigned int)) + gv_cur_region->rname_len + 1
+ + STRLEN("Possible data corruption in region ")
+ + STRLEN(" : blk = 0x : buff = 0x : cr = 0x% : csa = 0x% : csalock = 0x%");
memcpy(regbuff, gv_cur_region->rname, gv_cur_region->rname_len);
regbuff[gv_cur_region->rname_len] = '\0';
- SPRINTF(buff, "Possible data corruption in region %s : blk = 0x%X : buff = 0x%lX : cr = 0x%lX %s : "
- "csa = 0x%lX : csalock = 0x%lX", regbuff, pStat->blk_num, (long unsigned int) pStat->buffaddr,
- (long unsigned int) pStat->cr, crbuff, (long unsigned int) cs_addrs,
- (long unsigned int) cs_addrs->lock_addrs[0]);
+ SNPRINTF(buff, len, "Possible data corruption in region %s : blk = 0x%lX : buff = 0x%lX : cr = 0x%lX %s : "
+ "csa = 0x%lX : csalock = 0x%lX",
+ regbuff, (long unsigned int)pStat->blk_num, (long unsigned int)pStat->buffaddr,
+ (long unsigned int)pStat->cr, crbuff, (long unsigned int)cs_addrs,
+ (long unsigned int)cs_addrs->lock_addrs[0]);
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_TEXT, 2, LEN_AND_STR(buff));
}
+ assert(t_tries); /* assert here so we don't have to do it when this returns */
}
#define GVCST_SEARCH_EXPAND_PREVKEY
diff --git a/sr_port/gvcst_blk_search.h b/sr_port/gvcst_blk_search.h
index fe900bc..1cf10b5 100644
--- a/sr_port/gvcst_blk_search.h
+++ b/sr_port/gvcst_blk_search.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2015 Fidelity National Information *
+ * Copyright (c) 2015-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -160,7 +160,6 @@ GBLREF uint4 dollar_tlevel;
if (pRec > pTop)
{
INVOKE_GVCST_SEARCH_FAIL_IF_NEEDED(pStat);
- assert(CDB_STAGNATE > t_tries);
return cdb_sc_blklenerr;
}
if (0 != (nTargLen = nMatchCnt))
@@ -258,7 +257,6 @@ GBLREF uint4 dollar_tlevel;
if (pRec > pTop) /* If record goes off the end, then block must be bad */
{
INVOKE_GVCST_SEARCH_FAIL_IF_NEEDED(pStat);
- assert(CDB_STAGNATE > t_tries);
return cdb_sc_blklenerr;
}
nTargLen = 0;
@@ -277,7 +275,6 @@ GBLREF uint4 dollar_tlevel;
if (0 == nRecLen) /* If record length is 0, then block must be bad */
{
INVOKE_GVCST_SEARCH_FAIL_IF_NEEDED(pStat);
- assert(CDB_STAGNATE > t_tries);
return cdb_sc_badoffset;
}
pPrevRec = pRecBase;
diff --git a/sr_port/gvcst_bmp_mark_free.c b/sr_port/gvcst_bmp_mark_free.c
index 5939436..545f950 100755
--- a/sr_port/gvcst_bmp_mark_free.c
+++ b/sr_port/gvcst_bmp_mark_free.c
@@ -138,7 +138,7 @@ trans_num gvcst_bmp_mark_free(kill_set *ks)
/* Scan for the next local bitmap */
updptr = (block_id *)update_array_ptr;
for (nextblk = blk;
- (0 == nextblk->flag) && (nextblk < blk_top) && ((block_id)nextblk->block < next_bm);
+ (nextblk < blk_top) && (0 == nextblk->flag) && ((block_id)nextblk->block < next_bm);
++nextblk)
{
assert((block_id)nextblk->block - bit_map);
diff --git a/sr_port/gvcst_delete_blk.c b/sr_port/gvcst_delete_blk.c
index d11ae36..539d503 100755
--- a/sr_port/gvcst_delete_blk.c
+++ b/sr_port/gvcst_delete_blk.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -157,6 +158,7 @@ void gvcst_delete_blk(block_id blk, int level, boolean_t committed)
if (NULL == ks) /* Allocate first kill set to sgm_info_ptr block */
{
ks = sgm_info_ptr->kill_set_tail = sgm_info_ptr->kill_set_head = (kill_set *)malloc(SIZEOF(kill_set));
+ assert(NULL == sgm_info_ptr->kip_csa);
ks->used = 0;
ks->next_kill_set = NULL;
}
diff --git a/sr_port/gvcst_init.c b/sr_port/gvcst_init.c
index e870f41..29eef40 100644
--- a/sr_port/gvcst_init.c
+++ b/sr_port/gvcst_init.c
@@ -37,11 +37,11 @@
#include "buddy_list.h" /* needed for tp.h */
#include "tp.h"
#include "gtm_stdlib.h" /* for ATOI */
+#include "gtmimagename.h"
#include "cryptdef.h"
#include "mlkdef.h"
#include "error.h"
#include "gt_timer.h"
-#include "gtmimagename.h"
#include "trans_log_name.h"
#include "gtm_logicals.h"
#include "dbfilop.h"
@@ -69,6 +69,11 @@
#include "getzposition.h"
#include "gtmio.h"
#include "io.h"
+#include "ipcrmid.h"
+#include "gtm_ipc.h"
+#include "gtm_semutils.h"
+#include "gtm_sem.h"
+#include "is_file_identical.h"
#ifdef GTM_FD_TRACE
#include "gtm_dbjnl_dupfd_check.h"
@@ -115,6 +120,7 @@ GBLREF gv_namehead *gv_target;
GBLREF sgmnt_addrs *cs_addrs_list;
GBLREF boolean_t gtmcrypt_initialized;
GBLREF boolean_t gtcm_connection;
+GBLREF gd_addr *gd_header;
GBLREF bool licensed;
GBLREF int4 lkid;
GBLREF char *update_array, *update_array_ptr;
@@ -139,9 +145,11 @@ GBLREF volatile int reformat_buffer_in_use; /* used only in DEBUG mode */
GBLREF volatile int4 fast_lock_count;
GBLREF boolean_t dse_running;
GBLREF jnl_gbls_t jgbl;
-GBLREF boolean_t pool_init;
+GBLREF enum gtmImageTypes image_type;
+GBLREF int pool_init;
GBLREF boolean_t jnlpool_init_needed;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF uint4 process_id;
LITREF char gtm_release_name[];
LITREF int4 gtm_release_name_len;
@@ -163,7 +171,10 @@ typedef enum {
STATSDB_NOTOURS,
STATSDB_UNLINKERR,
STATSDB_RECREATEERR,
- STATSDB_CLOSEERR
+ STATSDB_CLOSEERR,
+ STATSDB_SHMRMIDERR,
+ STATSDB_SEMRMIDERR,
+ STATSDB_FTOKSEMRMIDERR
} statsdb_recreate_errors;
error_def(ERR_BADDBVER);
@@ -285,12 +296,13 @@ CONDITION_HANDLER(gvcst_init_autoDB_ch)
NEXTCH;
}
-void gvcst_init(gd_region *reg)
+void gvcst_init(gd_region *reg, gd_addr *addr)
{
gd_segment *seg;
sgmnt_addrs *baseDBcsa, *csa, *prevcsa, *regcsa;
sgmnt_data_ptr_t csd;
sgmnt_data statsDBcsd;
+ jnlpool_addrs_ptr_t save_jnlpool;
uint4 segment_update_array_size;
int4 bsize, padsize;
boolean_t is_statsDB, realloc_alt_buff, retry_dbinit;
@@ -301,10 +313,11 @@ void gvcst_init(gd_region *reg)
bt_rec_ptr_t bt;
blk_ident tmp_blk;
# endif
- int db_init_ret, loopcnt, max_fid_index, fd, rc, save_errno, errrsn_text_len;
+ int db_init_ret, loopcnt, max_fid_index, fd, rc, save_errno, errrsn_text_len, status;
mstr log_nam, trans_log_nam;
char trans_buff[MAX_FN_LEN + 1], statsdb_path[MAX_FN_LEN + 1], *errrsn_text;
unique_file_id *reg_fid, *tmp_reg_fid;
+ gd_id replfile_gdid, *tmp_gdid;
tp_region *tr;
ua_list *tmp_ua;
time_t curr_time;
@@ -312,6 +325,7 @@ void gvcst_init(gd_region *reg)
unsigned int minus1 = (unsigned)-1;
enum db_acc_method reg_acc_meth;
boolean_t onln_rlbk_cycle_mismatch = FALSE;
+ boolean_t replpool_valid = FALSE, replfilegdid_valid = FALSE, jnlpool_found = FALSE;
intrpt_state_t save_intrpt_ok_state;
replpool_identifier replpool_id;
unsigned int full_len;
@@ -323,6 +337,8 @@ void gvcst_init(gd_region *reg)
statsdb_recreate_errors statsdb_rcerr;
jbuf_rsrv_struct_t *nontp_jbuf_rsrv_lcl;
intrpt_state_t prev_intrpt_state;
+ key_t ftok_key;
+ int ftok_semid;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -338,7 +354,7 @@ void gvcst_init(gd_region *reg)
if (!baseDBreg->open)
{
DBGRDB((stderr, "gvcst_init: !baseDBreg->open (NOT open)\n"));
- gvcst_init(baseDBreg);
+ gvcst_init(baseDBreg, addr);
assert(baseDBreg->open);
if (reg->open) /* statsDB was opened as part of opening baseDB. No need to do anything more here */
{
@@ -471,166 +487,224 @@ void gvcst_init(gd_region *reg)
assert(FALSE);
rts_error_csa(CSA_ARG(baseDBcsa) VARLSTCNT(4) ERR_DBFILERR, 2, DB_LEN_STR(baseDBreg));
}
- /* Now that we have the lock, check if the db is still not created. */
- if (!baseDBnl->statsdb_created)
- { /* File still not created. Do it now under the ftok lock. */
+ for ( ; ; ) /* for loop only to let us break from error cases without having a deep if-then-else */
+ {
+ /* Now that we have the lock, check if the db is already created */
+ if (baseDBnl->statsdb_created)
+ break;
+ /* File still not created. Do it now under the ftok lock. */
DBGRDB((stderr, "gvcst_init: !baseDBnl->statsdb_created (under lock)\n"));
cstatus = gvcst_cre_autoDB(reg);
- if (EXIT_NRM != cstatus)
- { /* File failed to create - if this is a case where the file exists (but was not supposed
- * to exist), we should remove/recreate the file. Otherwise, we have a real error -
- * probably a missing directory or permissions or some such. In that case, turn off stats
- * and unwind the failed open.
- */
- statsdb_rcerr = STATSDB_NOERR; /* Assume no error to occur */
- save_errno = TREF(mu_cre_file_openrc); /* Save the errno that stopped our recreate */
- DBGRDB((stderr, "gvcst_init: Create of statsDB failed - rc = %d\n", save_errno));
+ if (EXIT_NRM == cstatus)
+ {
+ baseDBnl->statsdb_created = TRUE;
+ break;
+ }
+ /* File failed to create - if this is a case where the file exists (but was not supposed
+ * to exist), we should remove/recreate the file. Otherwise, we have a real error -
+ * probably a missing directory or permissions or some such. In that case, turn off stats
+ * and unwind the failed open.
+ */
+ statsdb_rcerr = STATSDB_NOERR; /* Assume no error to occur */
+ save_errno = TREF(mu_cre_file_openrc); /* Save the errno that stopped our recreate */
+ DBGRDB((stderr, "gvcst_init: Create of statsDB failed - rc = %d\n", save_errno));
+ for ( ; ; ) /* for loop only to handle error cases without having a deep if-then-else */
+ {
if (EEXIST != TREF(mu_cre_file_openrc))
+ {
statsdb_rcerr = STATSDB_NOTEEXIST;
- else
- { /* See if this statsdb file is really supposed to be linked to the baseDB we
- * also just opened. To do this, we need to open the statsdb temporarily, read
- * its fileheader and then close it to get the file-header field we want. Note
- * this is a very quick operation so we don't use the normal DB utilities on it.
- * We just want to read the file header and get out. Since we have the lock, no
- * other processes will have this database open unless we are illegitimately
- * opening it. This is an infrequent issue so the overhead is not relevant.
- */
- DBGRDB((stderr, "gvcst_init: Test to see if file is 'ours'\n"));
- memcpy(statsdb_path, reg->dyn.addr->fname, reg->dyn.addr->fname_len);
- statsdb_path[reg->dyn.addr->fname_len] = '\0'; /* Rebuffer fn to include null */
- fd = OPEN(statsdb_path, O_RDONLY);
- if (0 > fd)
- { /* Some sort of open error occurred */
- statsdb_rcerr = STATSDB_OPNERR;
- save_errno = errno;
- } else
- { /* Open worked - read file header from it*/
- LSEEKREAD(fd, 0, (char *)&statsDBcsd, SIZEOF(sgmnt_data), rc);
- if (0 > rc)
- /* Wasn't enough data to be a file header - not a statsDB */
- statsdb_rcerr = STATSDB_NOTSTATSDB;
- else if (0 < rc)
- { /* Unknown error while doing read */
- statsdb_rcerr = STATSDB_READERR;
- save_errno = rc;
- } else /* if (0 == rc) */
- { /* Read worked - check if these two files are a proper pair */
- if ((baseDBreg->dyn.addr->fname_len != statsDBcsd.basedb_fname_len)
- || (0 != memcmp(baseDBreg->dyn.addr->fname,
- statsDBcsd.basedb_fname,
- statsDBcsd.basedb_fname_len)))
- { /* This file is in use by another database */
- statsdb_rcerr = STATSDB_NOTOURS;
- } else
- { /* This file was for us - unlink and recreate */
- DBGRDB((stderr, "gvcst_init: File is ours - unlink and "
- "recreate it\n"));
-# ifdef BYPASS_UNLINK_RECREATE_STATSDB
- baseDBnl->statsdb_created = TRUE;
-# else
- rc = UNLINK(statsdb_path);
- if (0 > rc)
- { /* Unlink failed - may not have permissions */
- statsdb_rcerr = STATSDB_UNLINKERR;
- save_errno = errno;
- } else
- { /* Unlink succeeded - recreate now */
- cstatus = gvcst_cre_autoDB(reg);
- if (EXIT_NRM != cstatus)
- { /* Recreate failed */
- statsdb_rcerr = STATSDB_RECREATEERR;
- save_errno = TREF(mu_cre_file_openrc);
- } else
- baseDBnl->statsdb_created = TRUE;
- }
-# endif
- }
- }
- CLOSEFILE(fd, rc);
- if (0 < rc)
- { /* Close failed */
- statsdb_rcerr = STATSDB_CLOSEERR;
- save_errno = rc;
- }
- }
+ break;
}
- if (STATSDB_NOERR != statsdb_rcerr)
- { /* If we could not create or recreate the file, finish our error processing here */
- assert(TREF(gvcst_statsDB_open_ch_active)); /* so the below rts_error_csa calls
- * go to syslog and not to user.
- */
- baseDBreg->reservedDBFlags |= RDBF_NOSTATS; /* Disable STATS in base DB */
- baseDBcsa->reservedDBFlags |= RDBF_NOSTATS;
- if (!ftok_sem_release(baseDBreg, FALSE, FALSE))
- { /* Release the lock before unwinding back */
- assert(FALSE);
- rts_error_csa(CSA_ARG(baseDBcsa) VARLSTCNT(4) ERR_DBFILERR, 2,
- DB_LEN_STR(baseDBreg));
- }
- /* For those errors that need a special error message, take care of that here
- * now that we've released the lock.
- */
- switch(statsdb_rcerr)
- {
- case STATSDB_NOTEEXIST: /* Some error occurred handled elsewhere */
- break;
- case STATSDB_NOTOURS: /* This statsdb already in use elsewhere */
- /* We are trying to attach a statsDB to our baseDB should not be
- * associated with that baseDB. First check if this IS a statsdb.
- */
- if (IS_RDBF_STATSDB(&statsDBcsd))
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_STATSDBINUSE,
- 6, DB_LEN_STR(reg),
- statsDBcsd.basedb_fname_len,
- statsDBcsd.basedb_fname,
- DB_LEN_STR(baseDBreg));
- else
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_INVSTATSDB,
- 4, DB_LEN_STR(reg), REG_LEN_STR(reg));
- break; /* For the compiler */
- case STATSDB_OPNERR:
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_DBOPNERR, 2,
- DB_LEN_STR(reg), save_errno);
- break; /* For the compiler */
- case STATSDB_READERR:
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_DBFILERR, 2,
- DB_LEN_STR(reg), save_errno);
- break; /* For the compiler */
- case STATSDB_NOTSTATSDB:
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_INVSTATSDB, 4,
- DB_LEN_STR(reg), REG_LEN_STR(reg));
- break; /* For the compiler */
- case STATSDB_UNLINKERR:
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
- LEN_AND_LIT("unlink()"), CALLFROM, save_errno);
- break; /* For the compiler */
- case STATSDB_RECREATEERR:
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_DBOPNERR, 2,
- DB_LEN_STR(reg), save_errno);
- break; /* For the compiler */
- case STATSDB_CLOSEERR:
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
- LEN_AND_LIT("close()"), CALLFROM, save_errno);
- break; /* For the compiler */
- default:
- assertpro(FALSE);
- }
- if (TREF(gvcst_statsDB_open_ch_active))
- { /* Unwind back to ESTABLISH_NORET where did gvcst_init() call to open this
- * statsDB which now won't open.
- */
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_DRVLONGJMP);
- } else
- { /* We are not nested so can give the appropriate error ourselves */
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_DBFILERR, 2,
- DB_LEN_STR(reg), ERR_TEXT, 2,
- RTS_ERROR_TEXT("See preceding errors written to syserr"
- " and/or syslog for details"));
- }
+ /* See if this statsdb file is really supposed to be linked to the baseDB we
+ * also just opened. To do this, we need to open the statsdb temporarily, read
+ * its fileheader and then close it to get the file-header field we want. Note
+ * this is a very quick operation so we don't use the normal DB utilities on it.
+ * We just want to read the file header and get out. Since we have the lock, no
+ * other processes will have this database open unless we are illegitimately
+ * opening it. This is an infrequent issue so the overhead is not relevant.
+ */
+ DBGRDB((stderr, "gvcst_init: Test to see if file is 'ours'\n"));
+ memcpy(statsdb_path, reg->dyn.addr->fname, reg->dyn.addr->fname_len);
+ statsdb_path[reg->dyn.addr->fname_len] = '\0'; /* Rebuffer fn to include null */
+ fd = OPEN(statsdb_path, O_RDONLY);
+ if (0 > fd)
+ { /* Some sort of open error occurred */
+ statsdb_rcerr = STATSDB_OPNERR;
+ save_errno = errno;
+ break;
}
- } else
+ /* Open worked - read file header from it*/
+ LSEEKREAD(fd, 0, (char *)&statsDBcsd, SIZEOF(sgmnt_data), rc);
+ if (0 > rc)
+ { /* Wasn't enough data to be a file header - not a statsDB */
+ statsdb_rcerr = STATSDB_NOTSTATSDB;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ if (0 < rc)
+ { /* Unknown error while doing read */
+ statsdb_rcerr = STATSDB_READERR;
+ save_errno = rc;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ /* This is the case (0 == rc) */
+ /* Read worked - check if these two files are a proper pair */
+ if ((baseDBreg->dyn.addr->fname_len != statsDBcsd.basedb_fname_len)
+ || (0 != memcmp(baseDBreg->dyn.addr->fname,
+ statsDBcsd.basedb_fname, statsDBcsd.basedb_fname_len)))
+ { /* This file is in use by another database */
+ statsdb_rcerr = STATSDB_NOTOURS;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ /* This file was for us - unlink and recreate */
+ DBGRDB((stderr, "gvcst_init: File is ours - unlink and recreate it\n"));
+# ifdef BYPASS_UNLINK_RECREATE_STATSDB
baseDBnl->statsdb_created = TRUE;
+# else
+ /* Before removing a leftover statsdb file, check if it has corresponding private
+ * semid/shmid or ftok_semid. If so, remove them too.
+ */
+ if ((INVALID_SHMID != statsDBcsd.shmid) && (0 != shm_rmid(statsDBcsd.shmid)))
+ {
+ statsdb_rcerr = STATSDB_SHMRMIDERR;
+ save_errno = errno;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ if ((INVALID_SEMID != statsDBcsd.semid) && (0 != sem_rmid(statsDBcsd.semid)))
+ {
+ statsdb_rcerr = STATSDB_SEMRMIDERR;
+ save_errno = errno;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ if ((-1 != (ftok_key = FTOK(statsdb_path, GTM_ID)))
+ && (INVALID_SEMID
+ != (ftok_semid = semget(ftok_key, FTOK_SEM_PER_ID, RWDALL | IPC_CREAT)))
+ && (0 == semctl(ftok_semid, DB_COUNTER_SEM, GETVAL))
+ && (0 != sem_rmid(ftok_semid)))
+ {
+ statsdb_rcerr = STATSDB_FTOKSEMRMIDERR;
+ save_errno = errno;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ rc = UNLINK(statsdb_path);
+ if (0 > rc)
+ { /* Unlink failed - may not have permissions */
+ statsdb_rcerr = STATSDB_UNLINKERR;
+ save_errno = errno;
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ /* Unlink succeeded - recreate now */
+ cstatus = gvcst_cre_autoDB(reg);
+ if (EXIT_NRM != cstatus)
+ { /* Recreate failed */
+ statsdb_rcerr = STATSDB_RECREATEERR;
+ save_errno = TREF(mu_cre_file_openrc);
+ CLOSEFILE(fd, rc);
+ break;
+ }
+ baseDBnl->statsdb_created = TRUE;
+# endif
+ CLOSEFILE(fd, rc);
+ if (0 < rc)
+ { /* Close failed */
+ statsdb_rcerr = STATSDB_CLOSEERR;
+ save_errno = rc;
+ }
+ break;
+ }
+ if (STATSDB_NOERR != statsdb_rcerr)
+ { /* If we could not create or recreate the file, finish our error processing here */
+ assert(TREF(gvcst_statsDB_open_ch_active)); /* so the below rts_error_csa calls
+ * go to syslog and not to user.
+ */
+ baseDBreg->reservedDBFlags |= RDBF_NOSTATS; /* Disable STATS in base DB */
+ baseDBcsa->reservedDBFlags |= RDBF_NOSTATS;
+ if (!ftok_sem_release(baseDBreg, FALSE, FALSE))
+ { /* Release the lock before unwinding back */
+ assert(FALSE);
+ rts_error_csa(CSA_ARG(baseDBcsa) VARLSTCNT(4) ERR_DBFILERR, 2,
+ DB_LEN_STR(baseDBreg));
+ }
+ /* For those errors that need a special error message, take care of that here
+ * now that we've released the lock.
+ */
+ switch(statsdb_rcerr)
+ {
+ case STATSDB_NOTEEXIST: /* Some error occurred handled elsewhere */
+ break;
+ case STATSDB_NOTOURS: /* This statsdb already in use elsewhere */
+ /* We are trying to attach a statsDB to our baseDB should not be
+ * associated with that baseDB. First check if this IS a statsdb.
+ */
+ if (IS_RDBF_STATSDB(&statsDBcsd))
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_STATSDBINUSE,
+ 6, DB_LEN_STR(reg),
+ statsDBcsd.basedb_fname_len,
+ statsDBcsd.basedb_fname,
+ DB_LEN_STR(baseDBreg));
+ else
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_INVSTATSDB,
+ 4, DB_LEN_STR(reg), REG_LEN_STR(reg));
+ break; /* For the compiler */
+ case STATSDB_OPNERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_DBOPNERR, 2,
+ DB_LEN_STR(reg), save_errno);
+ break; /* For the compiler */
+ case STATSDB_READERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_DBFILERR, 2,
+ DB_LEN_STR(reg), save_errno);
+ break; /* For the compiler */
+ case STATSDB_NOTSTATSDB:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_INVSTATSDB, 4,
+ DB_LEN_STR(reg), REG_LEN_STR(reg));
+ break; /* For the compiler */
+ case STATSDB_UNLINKERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
+ LEN_AND_LIT("unlink()"), CALLFROM, save_errno);
+ break; /* For the compiler */
+ case STATSDB_RECREATEERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_DBOPNERR, 2,
+ DB_LEN_STR(reg), save_errno);
+ break; /* For the compiler */
+ case STATSDB_CLOSEERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
+ LEN_AND_LIT("close()"), CALLFROM, save_errno);
+ break; /* For the compiler */
+ case STATSDB_SHMRMIDERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
+ LEN_AND_LIT("shm_rmid()"), CALLFROM, save_errno);
+ break; /* For the compiler */
+ case STATSDB_SEMRMIDERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
+ LEN_AND_LIT("sem_rmid()"), CALLFROM, save_errno);
+ break; /* For the compiler */
+ case STATSDB_FTOKSEMRMIDERR:
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
+ LEN_AND_LIT("ftok sem_rmid()"), CALLFROM, save_errno);
+ break; /* For the compiler */
+ default:
+ assertpro(FALSE);
+ }
+ if (TREF(gvcst_statsDB_open_ch_active))
+ { /* Unwind back to ESTABLISH_NORET where did gvcst_init() call to open this
+ * statsDB which now won't open.
+ */
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_DRVLONGJMP);
+ } else
+ { /* We are not nested so can give the appropriate error ourselves */
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_DBFILERR, 2,
+ DB_LEN_STR(reg), ERR_TEXT, 2,
+ RTS_ERROR_TEXT("See preceding errors written to syserr"
+ " and/or syslog for details"));
+ }
+ }
+ break;
}
if (!ftok_sem_release(baseDBreg, FALSE, FALSE))
{
@@ -763,6 +837,7 @@ void gvcst_init(gd_region *reg)
reg->jnl_buffer_size = csd->jnl_buffer_size;
reg->jnl_before_image = csd->jnl_before_image;
reg->dyn.addr->asyncio = csd->asyncio;
+ reg->dyn.addr->read_only = csd->read_only;
assert(csa->reservedDBFlags == csd->reservedDBFlags); /* Should be same already */
SYNC_RESERVEDDBFLAGS_REG_CSA_CSD(reg, csa, csd, ((node_local_ptr_t)NULL));
SET_REGION_OPEN_TRUE(reg, WAS_OPEN_TRUE);
@@ -804,8 +879,18 @@ void gvcst_init(gd_region *reg)
csa->regcnt = 1; /* At this point, only one region points to this csa */
csa->db_addrs[0] = csa->db_addrs[1] = NULL;
csa->lock_addrs[0] = csa->lock_addrs[1] = NULL;
- if (!pool_init && jnlpool_init_needed && CUSTOM_ERRORS_AVAILABLE && REPL_INST_AVAILABLE)
- jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL);
+ csa->gd_ptr = addr ? addr : gd_header;
+ if (csa->gd_ptr)
+ csa->gd_instinfo = csa->gd_ptr->instinfo;
+ if ((IS_GTM_IMAGE || !pool_init) && jnlpool_init_needed && CUSTOM_ERRORS_AVAILABLE && REPL_ALLOWED(csa)
+ && REPL_INST_AVAILABLE(addr))
+ {
+ replpool_valid = TRUE;
+ jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL, addr);
+ status = filename_to_id(&replfile_gdid, replpool_id.instfilename); /* set by REPL_INST_AVAILABLE */
+ replfilegdid_valid = (SS_NORMAL == status);
+ } else
+ replpool_valid = replfilegdid_valid = FALSE;
/* Any LSEEKWRITEs hence forth will wait if the instance is frozen. To aid in printing the region information before
* and after the wait, csa->region is referenced. Since it is NULL at this point, set it to reg. This is a safe
* thing to do since csa->region is anyways set in db_common_init (few lines below).
@@ -1156,7 +1241,51 @@ void gvcst_init(gd_region *reg)
* SCNDDBNOUPD error message here. But, eventually when this process goes to gvcst_{put,kill} or op_ztrigger,
* SCNDDBNOUPD is issued.
*/
- VALIDATE_INITIALIZED_JNLPOOL(csa, csa->nl, reg, GTMRELAXED, SCNDDBNOUPD_CHECK_FALSE);
+ save_jnlpool = jnlpool;
+ if (IS_GTM_IMAGE)
+ { /* csa->jnlpool not set until validate jnlpool so need to compare gd_id of instance file */
+ if (!replfilegdid_valid)
+ {
+ assertpro(replpool_valid || REPL_INST_AVAILABLE(addr)); /* if any pool inited this should succeed */
+ status = filename_to_id(&replfile_gdid, replpool_id.instfilename);
+ replfilegdid_valid = (SS_NORMAL == status);
+ }
+ if (replfilegdid_valid)
+ {
+ if (jnlpool && jnlpool->pool_init)
+ {
+ tmp_gdid = &FILE_ID(jnlpool->jnlpool_dummy_reg);
+ if (!gdid_cmp(tmp_gdid, &replfile_gdid))
+ jnlpool_found = TRUE;
+ }
+ if (!jnlpool_found)
+ for (jnlpool = jnlpool_head; jnlpool; jnlpool = jnlpool->next)
+ if (jnlpool->pool_init)
+ {
+ tmp_gdid = &FILE_ID(jnlpool->jnlpool_dummy_reg);
+ if (!gdid_cmp(tmp_gdid, &replfile_gdid))
+ {
+ jnlpool_found = TRUE;
+ break;
+ }
+ }
+ if (!jnlpool_found)
+ {
+ jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL, addr);
+ tmp_gdid = &FILE_ID(jnlpool->jnlpool_dummy_reg);
+ if (!gdid_cmp(tmp_gdid, &replfile_gdid))
+ jnlpool_found = TRUE;
+ }
+ }
+ } else
+ {
+ assertpro(jnlpool); /* only one for utilities */
+ jnlpool_found = TRUE;
+ }
+ if (jnlpool_found)
+ VALIDATE_INITIALIZED_JNLPOOL(csa, csa->nl, reg, GTMRELAXED, SCNDDBNOUPD_CHECK_FALSE);
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
}
/* At this point, the database is officially open but one of two condition can exist here where we need to do more work:
* 1. This was a normal database open and this process has opted-in for global shared stats so we need to also open
diff --git a/sr_port/gvcst_kill.c b/sr_port/gvcst_kill.c
index bef5acc..090f093 100644
--- a/sr_port/gvcst_kill.c
+++ b/sr_port/gvcst_kill.c
@@ -49,6 +49,8 @@
#include "gtm_trigger_trc.h"
#include "tp_frame.h"
#include "tp_restart.h"
+#include "is_file_identical.h"
+#include "anticipatory_freeze.h"
/* Include prototypes */
#include "gvcst_kill_blk.h"
@@ -72,6 +74,7 @@
#include "have_crit.h"
#include "error.h"
#include "gtmimagename.h" /* needed for spanning nodes */
+#include "gtm_repl_multi_inst.h" /* for DISALLOW_MULTIINST_UPDATE_IN_TP */
GBLREF gd_region *gv_cur_region;
GBLREF gv_key *gv_currkey, *gv_altkey;
@@ -83,11 +86,13 @@ GBLREF uint4 dollar_tlevel;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF sgm_info *sgm_info_ptr;
+GBLREF sgm_info *first_sgm_info;
GBLREF unsigned char cw_set_depth;
GBLREF unsigned int t_tries;
GBLREF boolean_t need_kip_incr;
GBLREF uint4 update_trans;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF sgmnt_addrs *kip_csa;
GBLREF boolean_t skip_dbtriggers; /* see gbldefs.c for description of this global */
GBLREF stack_frame *frame_pointer;
@@ -253,7 +258,7 @@ void gvcst_kill2(boolean_t do_subtree, boolean_t *span_status, boolean_t killing
ztwormhole_used = FALSE;
}
)
- JNLPOOL_INIT_IF_NEEDED(csa, csd, cnl);
+ JNLPOOL_INIT_IF_NEEDED(csa, csd, cnl, SCNDDBNOUPD_CHECK_TRUE);
if (!dollar_tlevel)
{
kill_set_head.next_kill_set = NULL;
@@ -267,6 +272,7 @@ void gvcst_kill2(boolean_t do_subtree, boolean_t *span_status, boolean_t killing
prev_update_trans = sgm_info_ptr->update_trans;
assert(('\0' != gv_currkey->base[0]) && gv_currkey->end);
DBG_CHECK_GVTARGET_GVCURRKEY_IN_SYNC(CHECK_CSA_TRUE);
+ DISALLOW_MULTIINST_UPDATE_IN_TP(dollar_tlevel, jnlpool_head, csa, first_sgm_info, FALSE);
T_BEGIN_SETORKILL_NONTP_OR_TP(ERR_GVKILLFAIL);
assert(NULL != update_array);
assert(NULL != update_array_ptr);
diff --git a/sr_port/gvcst_protos.h b/sr_port/gvcst_protos.h
index 7d41934..e16217e 100755
--- a/sr_port/gvcst_protos.h
+++ b/sr_port/gvcst_protos.h
@@ -37,7 +37,7 @@ boolean_t gvcst_gblmod(mval *v);
boolean_t gvcst_get(mval *v);
boolean_t gvcst_get2(mval *v, unsigned char *sn_ptr);
void gvcst_incr(mval *increment, mval *result);
-void gvcst_init(gd_region *greg);
+void gvcst_init(gd_region *greg, gd_addr *addr);
void gvcst_init_statsDB(gd_region *baseDBreg, boolean_t do_statsdb_init);
void gvcst_kill(boolean_t do_subtree);
void gvcst_kill2(boolean_t do_subtree, boolean_t *span_status, boolean_t killing_chunks);
diff --git a/sr_port/gvcst_put.c b/sr_port/gvcst_put.c
index 9a18afc..29084fd 100644
--- a/sr_port/gvcst_put.c
+++ b/sr_port/gvcst_put.c
@@ -50,8 +50,11 @@
#include "gtm_trigger_trc.h"
#include "tp_frame.h"
#include "tp_restart.h"
+#include "is_file_identical.h"
+#include "anticipatory_freeze.h"
/* Include prototypes */
+#include "wbox_test_init.h"
#include "t_write.h"
#include "t_write_root.h"
#include "t_end.h"
@@ -75,6 +78,7 @@
#ifdef DEBUG
#include "mvalconv.h"
#endif
+#include "gtm_repl_multi_inst.h" /* for DISALLOW_MULTIINST_UPDATE_IN_TP */
#ifdef GTM_TRIGGER
LITREF mval literal_null;
@@ -103,7 +107,8 @@ GBLREF int4 prev_first_off, prev_next_off;
GBLREF uint4 update_trans;
GBLREF jnl_format_buffer *non_tp_jfb_ptr;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF uint4 dollar_tlevel;
GBLREF uint4 process_id;
GBLREF uint4 update_array_size, cumul_update_array_size; /* the current total size of the update array */
@@ -133,6 +138,7 @@ GBLREF gv_namehead *gv_target;
GBLREF mval *post_incr_mval;
GBLREF mval increment_delta_mval;
GBLREF sgm_info *sgm_info_ptr;
+GBLREF sgm_info *first_sgm_info;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF enum gtmImageTypes image_type;
@@ -558,7 +564,7 @@ void gvcst_put2(mval *val, span_parms *parms)
ztwormhole_used = FALSE;
}
# endif
- JNLPOOL_INIT_IF_NEEDED(csa, csd, cnl);
+ JNLPOOL_INIT_IF_NEEDED(csa, csd, cnl, SCNDDBNOUPD_CHECK_TRUE);
blk_size = csd->blk_size;
blk_reserved_bytes = parms->blk_reserved_bytes;
blk_fill_size = (blk_size * gv_fillfactor) / 100 - blk_reserved_bytes;
@@ -593,6 +599,7 @@ void gvcst_put2(mval *val, span_parms *parms)
|| (IS_STATSDB_REGNAME(gv_cur_region) && !gv_cur_region->read_only && csa->orig_read_write));
# endif
DBG_CHECK_GVTARGET_GVCURRKEY_IN_SYNC(CHECK_CSA_TRUE);
+ DISALLOW_MULTIINST_UPDATE_IN_TP(dollar_tlevel, jnlpool_head, csa, first_sgm_info, FALSE);
/* this needs to be initialized before any code that does a "goto retry" since this gets used there */
save_targ = gv_target;
gbl_target_was_set = (INVALID_GV_TARGET != reset_gv_target);
diff --git a/sr_port/gvcst_reservedDB_funcs.c b/sr_port/gvcst_reservedDB_funcs.c
index 1654953..5ebfe69 100644
--- a/sr_port/gvcst_reservedDB_funcs.c
+++ b/sr_port/gvcst_reservedDB_funcs.c
@@ -42,11 +42,15 @@
#include "parse_file.h"
#include "getzposition.h"
#include "util.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
+
LITREF mval literal_statsDB_gblname;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data *cs_data;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF uint4 dollar_tlevel;
GBLREF gd_region *gv_cur_region;
@@ -56,6 +60,7 @@ GBLREF boolean_t need_core;
GBLREF boolean_t created_core;
GBLREF boolean_t dont_want_core;
GBLREF gd_addr *gd_header;
+GBLREF mstr extnam_str;
DEBUG_ONLY(GBLREF boolean_t ok_to_UNWIND_in_exit_handling;)
STATICDEF intrpt_state_t gvcst_statsDB_open_ch_intrpt_ok_state;
@@ -65,6 +70,7 @@ STATICDEF gd_region *save_statsDBreg; /* For use in condition handler */
#define RESTORE_SAVED_VALUES \
MBSTART { \
TP_CHANGE_REG(save_cur_region); \
+ jnlpool = save_jnlpool; \
gv_target = save_gv_target; \
reset_gv_target = save_reset_gv_target; \
RESTORE_GV_ALTKEY(save_altkey); \
@@ -98,19 +104,22 @@ error_def(ERR_STATSDBERR);
*/
unsigned char gvcst_cre_autoDB(gd_region *reg)
{
- gd_region *save_cur_region;
- gd_region cur_region;
- gd_segment cur_segment;
- unsigned char cstatus;
+ gd_region *save_cur_region;
+ gd_region cur_region;
+ gd_segment cur_segment;
+ jnlpool_addrs_ptr_t save_jnlpool;
+ unsigned char cstatus;
assert(RDBF_AUTODB & reg->reservedDBFlags);
save_cur_region = gv_cur_region;
+ save_jnlpool = jnlpool;
memcpy((char *)&cur_region, reg, SIZEOF(gd_region));
memcpy((char *)&cur_segment, reg->dyn.addr, SIZEOF(gd_segment));
gv_cur_region = &cur_region;
gv_cur_region->dyn.addr = &cur_segment;
cstatus = mu_cre_file();
TP_CHANGE_REG(save_cur_region);
+ jnlpool = save_jnlpool;
return cstatus;
}
@@ -143,9 +152,10 @@ void gvcst_init_statsDB(gd_region *baseDBreg, boolean_t do_statsdb_init)
mval statsDBrec_mval, statsDBget_mval;
gd_region *statsDBreg, *statsDBreg_located, *save_cur_region;
gv_namehead *save_gv_target, *save_reset_gv_target;
+ jnlpool_addrs_ptr_t save_jnlpool;
srch_blk_status *bh;
char statsDBinitrec[SIZEOF(gvstats_rec_t) * 2]; /* Gives chunk large enuf to hold pad */
- int sizewkey, sizewkeyrnd, padsize, freespace, datasize;
+ int datasize, extlen, freespace, padsize, sizewkey, sizewkeyrnd;
gv_key save_altkey[DBKEYALLOC(MAX_KEY_SZ)], save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
sgmnt_addrs *baseDBcsa, *statsDBcsa;
statsDB_deferred_init_que_elem *sdiqeptr;
@@ -184,7 +194,7 @@ void gvcst_init_statsDB(gd_region *baseDBreg, boolean_t do_statsdb_init)
* (user-invisible) and the caller will modify gld map entries and/or switch baseDB to NOSTATS if any
* errors occur thereby preventing future access to this statsDB database file.
*/
- gvcst_init(statsDBreg_located);
+ gvcst_init(statsDBreg_located, NULL);
if (statsDBreg_located->open) /* do the check just in case */
{
statsDBcsa = &FILE_INFO(statsDBreg_located)->s_addrs;
@@ -221,10 +231,11 @@ void gvcst_init_statsDB(gd_region *baseDBreg, boolean_t do_statsdb_init)
* and "OPEN_BASEREG_IF_STATSREG" rely on this open to happen here (and catch errors) so they
* can take appropriate action (see comment in OPEN_BASEREG_IF_STATSREG for example reason).
*/
- gvcst_init(statsDBreg_located);
+ gvcst_init(statsDBreg_located, NULL);
break;
}
save_cur_region = gv_cur_region;
+ save_jnlpool = jnlpool;
save_gv_target = gv_target;
save_reset_gv_target = reset_gv_target;
SAVE_GV_CURRKEY(save_currkey);
@@ -323,7 +334,9 @@ void gvcst_init_statsDB(gd_region *baseDBreg, boolean_t do_statsdb_init)
}
gd_header->ygs_map_entry_changed = TRUE;
}
+ extlen = extnam_str.len;
op_gvname(3, (mval *)&literal_statsDB_gblname, &baseDBreg_nam_mval, &pid_mval);
+ extnam_str.len = extlen;
assert(NULL != gv_currkey);
assert(0 != gv_currkey->end);
statsDBreg = gv_cur_region;
@@ -463,24 +476,25 @@ CONDITION_HANDLER(gvcst_statsDB_init_ch)
*/
void gvcst_remove_statsDB_linkage(gd_region *baseDBreg)
{
- mval pid_mval, baseDBreg_nam_mval;
- mval statsDBrec_mval, statsDBget_mval;
- gd_region *statsDBreg, *save_cur_region;
- gv_namehead *save_gv_target, *save_reset_gv_target;
- char statsDBinitrec[SIZEOF(gvstats_rec_t) * 2]; /* Gives us a chunk large enuf to hold padding */
- gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
- sgmnt_addrs *baseDBcsa, *statsDBcsa;
- gvstats_rec_t *gvstats_rec_p;
- gvnh_reg_t *save_gd_targ_gvnh_reg;
- gd_binding *save_gd_targ_map;
- gd_addr *save_gd_targ_addr, *save_gd_header;
- boolean_t save_gv_last_subsc_null, save_gv_some_subsc_null;
+ mval pid_mval, baseDBreg_nam_mval;
+ mval statsDBrec_mval, statsDBget_mval;
+ gd_region *statsDBreg, *save_cur_region;
+ gv_namehead *save_gv_target, *save_reset_gv_target;
+ char statsDBinitrec[SIZEOF(gvstats_rec_t) * 2]; /* Gives us a chunk large enuf to hold padding */
+ gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
+ sgmnt_addrs *baseDBcsa, *statsDBcsa;
+ gvstats_rec_t *gvstats_rec_p;
+ gvnh_reg_t *save_gd_targ_gvnh_reg;
+ gd_binding *save_gd_targ_map;
+ gd_addr *save_gd_targ_addr, *save_gd_header;
+ jnlpool_addrs_ptr_t save_jnlpool;
+ boolean_t save_gv_last_subsc_null, save_gv_some_subsc_null;
# ifdef DEBUG
- mval stats_rec;
- srch_blk_status *bh;
- uint4 recsize;
- rec_hdr *recptr;
- gd_region *statsDBreg_located;
+ mval stats_rec;
+ srch_blk_status *bh;
+ uint4 recsize;
+ rec_hdr *recptr;
+ gd_region *statsDBreg_located;
# endif
DCL_THREADGBL_ACCESS;
@@ -490,6 +504,7 @@ void gvcst_remove_statsDB_linkage(gd_region *baseDBreg)
save_gv_target = gv_target;
save_reset_gv_target = reset_gv_target;
SAVE_GV_CURRKEY(save_currkey);
+ save_jnlpool = jnlpool;
/* Below save is similar to that done in op_gvsavtarg/op_gvrectarg */
save_gd_targ_gvnh_reg = TREF(gd_targ_gvnh_reg);
save_gd_targ_map = TREF(gd_targ_map);
@@ -562,6 +577,7 @@ void gvcst_remove_statsDB_linkage(gd_region *baseDBreg)
statsDBreg->statsDB_setup_completed = FALSE;
/* Restore previous region's setup */
TP_CHANGE_REG(save_cur_region);
+ jnlpool = save_jnlpool;
gv_target = save_gv_target;
reset_gv_target = save_reset_gv_target;
RESTORE_GV_CURRKEY(save_currkey);
diff --git a/sr_port/gvnh_spanreg_subs_gvt_init.c b/sr_port/gvnh_spanreg_subs_gvt_init.c
index 6aa6342..7194e32 100644
--- a/sr_port/gvnh_spanreg_subs_gvt_init.c
+++ b/sr_port/gvnh_spanreg_subs_gvt_init.c
@@ -85,7 +85,7 @@ void gvnh_spanreg_subs_gvt_init(gvnh_reg_t *gvnh_reg, gd_addr *addr, viewparm *p
* as we are going to add it to the gvt_pending_list anyways.
*/
if ((NULL == parmblk) && !reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
gvt = (gv_namehead *)targ_alloc(reg->max_key_size, &name_gvt->gvname, reg);
COPY_ACT_FROM_GVNH_REG_TO_GVT(gvnh_reg, gvt, reg);
/* See comment in GVNH_REG_INIT macro for why the below assignment is
diff --git a/sr_port/have_crit.c b/sr_port/have_crit.c
old mode 100755
new mode 100644
index a985de5..97cdcf2
--- a/sr_port/have_crit.c
+++ b/sr_port/have_crit.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -31,7 +31,8 @@
#include "send_msg.h"
GBLREF volatile int4 crit_count;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF uint4 process_id;
GBLREF uint4 crit_deadlock_check_cycle;
GBLREF uint4 dollar_tlevel;
@@ -54,10 +55,12 @@ error_def(ERR_MUTEXRELEASED);
*/
uint4 have_crit(uint4 crit_state)
{
- gd_region *r_top, *r_local;
- gd_addr *addr_ptr;
- sgmnt_addrs *csa;
- uint4 crit_reg_cnt = 0;
+ gd_region *r_top, *r_local;
+ gd_addr *addr_ptr;
+ jnlpool_addrs_ptr_t local_jnlpool;
+ sgmnt_addrs *csa;
+ uint4 crit_reg_cnt = 0;
+ DEBUG_ONLY(uint4 crit_jnlpool_reg = 0;)
/* in order to proper release the necessary regions, CRIT_RELEASE implies going through all the regions */
if (crit_state & CRIT_RELEASE)
@@ -129,18 +132,23 @@ uint4 have_crit(uint4 crit_state)
}
}
}
- if (NULL != jnlpool.jnlpool_ctl)
- {
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
- if ((NULL != csa) && csa->now_crit && (crit_state & CRIT_HAVE_ANY_REG))
+ for (local_jnlpool = jnlpool_head; local_jnlpool; local_jnlpool = local_jnlpool->next)
+ if ((NULL != local_jnlpool) && (NULL != local_jnlpool->jnlpool_ctl))
{
- crit_reg_cnt++;
- if (0 != (crit_state & CRIT_RELEASE))
+ csa = &FILE_INFO(local_jnlpool->jnlpool_dummy_reg)->s_addrs;
+ if ((NULL != csa) && csa->now_crit && (crit_state & CRIT_HAVE_ANY_REG))
{
- assert(!csa->hold_onto_crit);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ crit_reg_cnt++;
+# ifdef DEBUG
+ crit_jnlpool_reg++;
+ assert(1 >= crit_jnlpool_reg);
+# endif
+ if (0 != (crit_state & CRIT_RELEASE))
+ {
+ assert(!csa->hold_onto_crit);
+ rel_lock(local_jnlpool->jnlpool_dummy_reg);
+ }
}
}
- }
return crit_reg_cnt;
}
diff --git a/sr_port/have_crit.h b/sr_port/have_crit.h
index 2a21e7c..c23a963 100755
--- a/sr_port/have_crit.h
+++ b/sr_port/have_crit.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -77,6 +77,7 @@ typedef enum
INTRPT_IN_CRYPT_RECONFIG, /* Deferring interrupts during reconfiguration of the encryption state. */
INTRPT_IN_UNLINK_AND_CLEAR, /* Deferring interrupts around unlink and clearing the filename being unlinked */
INTRPT_IN_GETC, /* Deferring interrupts around GETC() call */
+ INTRPT_IN_AIO_ERROR, /* Deferring interrupts around aio_error() call */
INTRPT_NUM_STATES /* Should be the *last* one in the enum. */
} intrpt_state_t;
@@ -165,7 +166,7 @@ GBLREF boolean_t deferred_timers_check_needed;
GBLREF boolean_t multi_thread_in_use; /* TRUE => threads are in use. FALSE => not in use */
-/* Macro to cause deferrable interrupts to be deferred recording the cause.
+/* Macro to cause deferrable interrupts to be deferred, recording the cause.
* If interrupt is already deferred, state is not changed.
*
* The normal usage of the below macros is
diff --git a/sr_port/io.h b/sr_port/io.h
index 5a2c2ed..d7117c4 100644
--- a/sr_port/io.h
+++ b/sr_port/io.h
@@ -41,6 +41,18 @@ error_def(ERR_UTF16ENDIAN);
#define MAX_DEV_TYPE_LEN 7
#define DD_BUFLEN 80
+#define ASCII_ESC 27 /* this ASCII value is needed on any platform */
+#define EBCDIC_ESC 39
+#define ASCII_CR 13
+#define EBCDIC_CR 13
+#define ASCII_LF 10
+#define EBCDIC_LF 37
+#define ASCII_FF 12
+#define EBCDIC_FF 12
+#define ASCII_BS 8
+#define EBCDIC_BS 22
+#define VT 11
+
#define CHAR_FILTER 128
#define ESC1 1
#define ESC2 2
@@ -121,6 +133,8 @@ typedef struct io_desc_struct
unsigned char zb[ESC_LEN];
char key[DD_BUFLEN];
char device[DD_BUFLEN];
+ char *devicebuffer;
+ int devicebufferlen;
}dollar;
unsigned char esc_state;
void *dev_sp;
@@ -436,7 +450,7 @@ LITREF unsigned char ebcdic_spaces_block[];
\
intrpt_state_t prev_intrpt_state; \
\
- if ((>mio_ch != active_ch->ch) && (NULL != (IOD)->out) \
+ if (CHANDLER_EXISTS && (>mio_ch != active_ch->ch) && (NULL != (IOD)->out) \
&& (NULL != io_std_device.out) && ((IOD)->out == io_std_device.out)) \
{ \
DEFER_INTERRUPTS(INTRPT_IN_GTMIO_CH_SET, prev_intrpt_state); \
@@ -456,7 +470,7 @@ LITREF unsigned char ebcdic_spaces_block[];
\
intrpt_state_t prev_intrpt_state; \
\
- if ((>mio_ch != active_ch->ch) && (NULL != (IOD)->out) \
+ if (CHANDLER_EXISTS && (>mio_ch != active_ch->ch) && (NULL != (IOD)->out) \
&& (NULL != io_std_device.out) && ((IOD)->out == io_std_device.out)) \
{ \
DEFER_INTERRUPTS(INTRPT_IN_GTMIO_CH_SET, prev_intrpt_state); \
@@ -487,4 +501,110 @@ LITREF unsigned char ebcdic_spaces_block[];
} \
}
+#define DEF_EXCEPTION(PP, P_OFF, IOD) \
+MBSTART { \
+ mval MV; \
+ \
+ MV.mvtype = MV_STR; \
+ MV.str.len = (int)(*(PP->str.addr + P_OFF)); \
+ MV.str.addr = (char *)(PP->str.addr + P_OFF + 1); \
+ if (!(ZTRAP_ENTRYREF & TREF(ztrap_form))) \
+ { \
+ op_commarg(&MV, indir_linetail); \
+ op_unwind(); \
+ } \
+ IOD->error_handler = MV.str; \
+ s2pool(&IOD->error_handler); \
+} MBEND
+
+#define ONE_COMMA "1,"
+#define DEVICE_BUFFER_FULL "dollar.device BUFFER FULL! CHECK dollar.devicebuffer"
+
+#define ALLOCATE_DOLLAR_DEVICE_BUFFER_IF_REQUIRED(IOD, LEN, WRITEBUFFER_SET) \
+MBSTART { \
+ /* This macro checks if there's enough space in dollar.device[] buffer to accommodate \
+ * the error message (length = LEN). If not, it allocates dollar.devicebuffer, \
+ * but first tries to reuse if allocated before, and LEN will fit in. \
+ * It then sets WRITEBUFFER_SET to the appropriate buffer to be written into. \
+ */ \
+ if (DD_BUFLEN < LEN) /* Won't fit into the buffer. allocate space. */ \
+ { \
+ /* Reuse previously allocated buffer if the new STR fits in */ \
+ if (IOD->dollar.devicebuffer && (LEN > IOD->dollar.devicebufferlen)) \
+ { \
+ free(IOD->dollar.devicebuffer); \
+ IOD->dollar.devicebuffer = NULL; \
+ } \
+ if (!IOD->dollar.devicebuffer) \
+ { \
+ IOD->dollar.devicebuffer = malloc(LEN); \
+ IOD->dollar.devicebufferlen = LEN; \
+ } \
+ WRITEBUFFER_SET = IOD->dollar.devicebuffer; \
+ MEMCPY_LIT(&IOD->dollar.device[0], DEVICE_BUFFER_FULL); \
+ } else \
+ WRITEBUFFER_SET = &IOD->dollar.device[0]; \
+} MBEND
+
+#define SET_DOLLARDEVICE_ERRSTR(IOD, ERRSTR) \
+MBSTART { \
+ int errlen; \
+ char *writebuffer; \
+ errlen = STRLEN(ERRSTR) + 1; /* +1 for NULL */ \
+ ALLOCATE_DOLLAR_DEVICE_BUFFER_IF_REQUIRED(IOD, errlen, writebuffer); \
+ memcpy(writebuffer, ERRSTR, errlen); \
+} MBEND
+
+#define SET_DOLLARDEVICE_ONECOMMA_ERRSTR(IOD, ERRSTR) \
+MBSTART { \
+ char *writebuffer; \
+ int errlen, prefixlen, len; \
+ prefixlen = STR_LIT_LEN(ONE_COMMA); \
+ errlen = STRLEN(ERRSTR) + 1; /* +1 for NULL */ \
+ len = prefixlen + errlen; \
+ ALLOCATE_DOLLAR_DEVICE_BUFFER_IF_REQUIRED(IOD, len, writebuffer); \
+ memcpy(writebuffer, ONE_COMMA, prefixlen); \
+ memcpy(&writebuffer[prefixlen], ERRSTR, errlen); \
+} MBEND
+
+#define SET_DOLLARDEVICE_ONECOMMA_ERRSTR1_ERRSTR2(IOD, ERRSTR1, ERRSTR2) \
+MBSTART { \
+ char *writebuffer; \
+ int errlen1, errlen2, prefixlen, len; \
+ prefixlen = STR_LIT_LEN(ONE_COMMA); \
+ errlen1 = STRLEN(ERRSTR1); /* No NULL char */ \
+ errlen2 = STRLEN(ERRSTR2) + 1; /* +1 for NULL */ \
+ len = prefixlen + errlen1 + errlen2; \
+ ALLOCATE_DOLLAR_DEVICE_BUFFER_IF_REQUIRED(IOD, len, writebuffer); \
+ memcpy(writebuffer, ONE_COMMA, prefixlen); \
+ memcpy(&writebuffer[prefixlen], ERRSTR1, errlen1); \
+ memcpy(&writebuffer[prefixlen + errlen1], ERRSTR2, errlen2); \
+} MBEND
+
+#define SET_DOLLARDEVICE_ONECOMMA_STRERROR(IOD, ERRNO) \
+MBSTART { \
+ char *errstring, *writebuffer; \
+ int errlen, prefixlen, len; \
+ prefixlen = STR_LIT_LEN(ONE_COMMA); \
+ errstring = STRERROR(ERRNO); \
+ errlen = STRLEN(errstring) + 1; /* +1 for NULL */ \
+ len = prefixlen + errlen; \
+ ALLOCATE_DOLLAR_DEVICE_BUFFER_IF_REQUIRED(IOD, len, writebuffer); \
+ memcpy(writebuffer, ONE_COMMA, prefixlen); \
+ memcpy(&writebuffer[prefixlen], errstring, errlen); \
+} MBEND
+
+#define PUT_DOLLAR_DEVICE_INTO_MSTR(IOD, MSTR) \
+MBSTART { \
+ if (memcmp(IOD->dollar.device, DEVICE_BUFFER_FULL, STR_LIT_LEN(DEVICE_BUFFER_FULL))) \
+ { \
+ MSTR->len = STRLEN(IOD->dollar.device); \
+ MSTR->addr = IOD->dollar.device; \
+ } else \
+ { \
+ assert(IOD->dollar.devicebuffer); \
+ MSTR->addr = IOD->dollar.devicebuffer; \
+ MSTR->len = STRLEN(IOD->dollar.devicebuffer); \
+ } \
+} MBEND
#endif /* IO_H */
diff --git a/sr_port/io_rundown.c b/sr_port/io_rundown.c
index 7dbe550..e788d3f 100644
--- a/sr_port/io_rundown.c
+++ b/sr_port/io_rundown.c
@@ -31,7 +31,7 @@ void io_rundown (int rundown_type)
if (NULL == io_root_log_name)
return;
- for (l = io_root_log_name; NULL != l; l = io_root_log_name)
+ for (l = io_root_log_name; NULL != l; free(l), l = io_root_log_name)
{
io_root_log_name = l->next;
if ((NULL != l->iod) && (n_io_dev_types == l->iod->type))
diff --git a/sr_port/ionl_use.c b/sr_port/ionl_use.c
index e280a1e..a1227c3 100755
--- a/sr_port/ionl_use.c
+++ b/sr_port/ionl_use.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2007 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -23,11 +24,16 @@
#include "nametabtyp.h"
#include "stringpool.h"
#include "namelook.h"
+#include "op.h"
+#include "indir_enum.h"
LITREF nametabent filter_names[];
LITREF unsigned char filter_index[27];
LITREF unsigned char io_params_size[];
+error_def(ERR_TTINVFILTER);
+error_def(ERR_DEVPARMNEG);
+
void ionl_use(io_desc *iod, mval *pp)
{
unsigned char ch, len;
@@ -36,10 +42,9 @@ void ionl_use(io_desc *iod, mval *pp)
io_desc *d_in, *d_out;
char *tab;
int p_offset;
+ DCL_THREADGBL_ACCESS;
- error_def(ERR_TTINVFILTER);
- error_def(ERR_DEVPARMNEG);
-
+ SETUP_THREADGBL_ACCESS;
p_offset = 0;
d_in = iod->pair.in;
d_out = iod->pair.out;
@@ -49,16 +54,14 @@ void ionl_use(io_desc *iod, mval *pp)
switch (ch = *(pp->str.addr + p_offset++))
{
case iop_exception:
- iod->error_handler.len = *(pp->str.addr + p_offset);
- iod->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
case iop_filter:
len = *(pp->str.addr + p_offset);
tab = pp->str.addr + p_offset + 1;
if ((fil_type = namelook(filter_index, filter_names, tab, len)) < 0)
{
- rts_error(VARLSTCNT(1) ERR_TTINVFILTER);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_TTINVFILTER);
return;
}
switch (fil_type)
@@ -83,13 +86,13 @@ void ionl_use(io_desc *iod, mval *pp)
case iop_length:
GET_LONG(length, pp->str.addr + p_offset);
if (length < 0)
- rts_error(VARLSTCNT(1) ERR_DEVPARMNEG);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_DEVPARMNEG);
d_out->length = length;
break;
case iop_width:
GET_LONG(width, pp->str.addr + p_offset);
if (width < 0)
- rts_error(VARLSTCNT(1) ERR_DEVPARMNEG);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_DEVPARMNEG);
if (width == 0)
{
d_out->wrap = FALSE;
@@ -133,8 +136,8 @@ void ionl_use(io_desc *iod, mval *pp)
}
case iop_ipchset:
{
-#if defined(KEEP_zOS_EBCDIC) || defined(VMS)
- if ( (iconv_t)0 != iod->input_conv_cd )
+#if defined(KEEP_zOS_EBCDIC)
+ if ((iconv_t)0 != iod->input_conv_cd)
{
ICONV_CLOSE_CD(iod->input_conv_cd);
}
@@ -142,12 +145,12 @@ void ionl_use(io_desc *iod, mval *pp)
if (DEFAULT_CODE_SET != iod->in_code_set)
ICONV_OPEN_CD(iod->input_conv_cd, (char *)(pp->str.addr + p_offset + 1), INSIDE_CH_SET);
#endif
- break;
+ break;
}
- case iop_opchset:
+ case iop_opchset:
{
-#if defined(KEEP_zOS_EBCDIC) || defined(VMS)
- if ( (iconv_t) 0 != iod->output_conv_cd )
+#if defined(KEEP_zOS_EBCDIC)
+ if ( (iconv_t) 0 != iod->output_conv_cd)
{
ICONV_CLOSE_CD(iod->output_conv_cd);
}
@@ -155,7 +158,7 @@ void ionl_use(io_desc *iod, mval *pp)
if (DEFAULT_CODE_SET != iod->out_code_set)
ICONV_OPEN_CD(iod->output_conv_cd, INSIDE_CH_SET, (char *)(pp->str.addr + p_offset + 1));
#endif
- break;
+ break;
}
}
p_offset += ((IOP_VAR_SIZE == io_params_size[ch]) ?
diff --git a/sr_port/iosocket_bind.c b/sr_port/iosocket_bind.c
index 0e10aeb..839d575 100755
--- a/sr_port/iosocket_bind.c
+++ b/sr_port/iosocket_bind.c
@@ -26,11 +26,9 @@
#include "iosocketdef.h"
#include "gtm_stdlib.h"
#include "gtm_unistd.h"
-#ifndef VMS /* for LOCAL sockets */
+#include "min_max.h"
#include "gtm_stat.h"
#include "eintr_wrappers.h" /* for STAT_FILE and CHG_OWNER */
-#endif
-
#define BOUND "BOUND"
#define IPV6_UNCERTAIN 2
@@ -54,19 +52,20 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
struct addrinfo *ai_ptr;
char port_buffer[NI_MAXSERV];
int errcode;
- ABS_TIME cur_time, end_time;
+ ABS_TIME cur_time, end_time;
GTM_SOCKLEN_TYPE addrlen;
GTM_SOCKLEN_TYPE sockbuflen;
-# ifndef VMS
struct stat statbuf;
mode_t filemode;
-# endif
dsocketptr = socketptr->dev;
ai_ptr = (struct addrinfo*)(&socketptr->local.ai);
assert(NULL != dsocketptr);
dsocketptr->iod->dollar.key[0] = '\0';
dsocketptr->iod->dollar.device[0] = '\0';
+ if (dsocketptr->iod->dollar.devicebuffer)
+ free(dsocketptr->iod->dollar.devicebuffer);
+ dsocketptr->iod->dollar.devicebuffer = NULL;
ioerror = socketptr->ioerror;
if (FD_INVALID != socketptr->temp_sd)
{
@@ -99,7 +98,7 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
if (-1 == setsockopt(socketptr->sd,
IPPROTO_TCP, TCP_NODELAY, &temp_1, SIZEOF(temp_1)))
{
- real_errno = errno;
+ real_errno = errno;
errptr = (char *)STRERROR(real_errno);
errlen = STRLEN(errptr);
SOCKET_FREE(socketptr);
@@ -113,7 +112,7 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
if (-1 == setsockopt(socketptr->sd,
SOL_SOCKET, SO_RCVBUF, &socketptr->bufsiz, SIZEOF(socketptr->bufsiz)))
{
- real_errno = errno;
+ real_errno = errno;
errptr = (char *)STRERROR(real_errno);
errlen = STRLEN(errptr);
SOCKET_FREE(socketptr);
@@ -127,7 +126,7 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
if (-1 == getsockopt(socketptr->sd,
SOL_SOCKET, SO_RCVBUF, &socketptr->bufsiz, &sockbuflen))
{
- real_errno = errno;
+ real_errno = errno;
errptr = (char *)STRERROR(real_errno);
errlen = STRLEN(errptr);
SOCKET_FREE(socketptr);
@@ -137,7 +136,6 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
}
}
}
-# ifndef VMS
if (socket_local == socketptr->protocol)
{
charptr = ((struct sockaddr_un *)(socketptr->local.sa))->sun_path;
@@ -158,17 +156,12 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
real_errno = errno;
if (ioerror)
SOCKET_FREE(socketptr);
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
- errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1]
- , errptr, errlen + 1); /* + 1 for null */
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(dsocketptr->iod, real_errno);
if (ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_SOCKBIND, 0, real_errno);
return FALSE;
}
}
-# endif
temp_1 = bind(socketptr->sd, SOCKET_LOCAL_ADDR(socketptr), ai_ptr->ai_addrlen);
if (temp_1 < 0)
{
@@ -196,11 +189,7 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
default:
if (ioerror)
SOCKET_FREE(socketptr);
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
- errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1]
- , errptr, errlen + 1); /* + 1 for null */
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(dsocketptr->iod, real_errno);
if (ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_SOCKBIND, 0, real_errno);
return FALSE;
@@ -214,34 +203,30 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
{
real_errno = errno;
errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, errlen + 1); /* get null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(dsocketptr->iod, errptr);
if (ioerror)
{
SOCKET_FREE(socketptr);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_SOCKINIT, 3, real_errno, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_SOCKINIT, 3, real_errno, STRLEN(errptr),
+ errptr);
}
return FALSE;
}
}
} while (temp_1 < 0);
-
/* obtain actual port from the bound address if port 0 was specified */
addrlen = SOCKET_ADDRLEN(socketptr, ai_ptr, local);
if (-1 == getsockname(socketptr->sd, SOCKET_LOCAL_ADDR(socketptr), &addrlen))
{
real_errno = errno;
errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, errlen + 1); /* + 1 for null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(dsocketptr->iod, errptr);
if (ioerror)
{
SOCKET_FREE(socketptr);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_GETSOCKNAMERR, 3, real_errno, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_GETSOCKNAMERR, 3, real_errno, STRLEN(errptr), errptr);
}
- return FALSE;
+ return FALSE;
}
if (socket_local != socketptr->protocol)
{
@@ -250,14 +235,12 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
if (0 != errcode)
{
real_errno = errno;
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
TEXT_ADDRINFO(errptr, errcode, real_errno);
- errlen = STRLEN(errptr);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, errlen + 1); /* + 1 for null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(dsocketptr->iod, errptr);
if (ioerror)
{
SOCKET_FREE(socketptr);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_GETNAMEINFO, 0, ERR_TEXT, 2, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_GETNAMEINFO, 0, ERR_TEXT, 2, STRLEN(errptr), errptr);
}
return FALSE;
}
@@ -265,7 +248,6 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
if (0 == socketptr->local.port)
socketptr->local.port = actual_port;
assert(socketptr->local.port == actual_port);
-# ifndef VMS
} else
{
if (socketptr->filemode_mask)
@@ -279,14 +261,12 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
{
real_errno = errno;
errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, errlen + 1); /* for null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(dsocketptr->iod, errptr);
if (ioerror)
{
SOCKET_FREE(socketptr);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_SOCKINIT, 3, real_errno, errlen, errptr
- , ERR_TEXT, 2, RTS_ERROR_LITERAL("setting protection"));
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_SOCKINIT, 3, real_errno, STRLEN(errptr),
+ errptr, ERR_TEXT, 2, RTS_ERROR_LITERAL("setting protection"));
}
return FALSE;
}
@@ -298,34 +278,29 @@ boolean_t iosocket_bind(socket_struct *socketptr, int4 msec_timeout, boolean_t u
{
real_errno = errno;
errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- MEMCPY_LIT(dsocketptr->iod->dollar.device, ONE_COMMA);
- memcpy(&dsocketptr->iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, errlen + 1); /* for null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(dsocketptr->iod, errptr);
if (ioerror)
{
SOCKET_FREE(socketptr);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_SOCKINIT, 3, real_errno, errlen, errptr,
- ERR_TEXT, 2, RTS_ERROR_LITERAL("setting ownership"));
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_SOCKINIT, 3, real_errno, STRLEN(errptr),
+ errptr, ERR_TEXT, 2, RTS_ERROR_LITERAL("setting ownership"));
}
return FALSE;
}
}
-# endif
}
socketptr->state = socket_bound;
len = SIZEOF(BOUND) - 1;
- memcpy(&dsocketptr->iod->dollar.key[0], BOUND, len);
- dsocketptr->iod->dollar.key[len++] = '|';
- memcpy(&dsocketptr->iod->dollar.key[len], socketptr->handle, socketptr->handle_len);
- len += socketptr->handle_len;
- dsocketptr->iod->dollar.key[len++] = '|';
+ memcpy(&dsocketptr->iod->dollar.key[0], BOUND, len);
+ dsocketptr->iod->dollar.key[len++] = '|';
+ memcpy(&dsocketptr->iod->dollar.key[len], socketptr->handle, socketptr->handle_len);
+ len += socketptr->handle_len;
+ dsocketptr->iod->dollar.key[len++] = '|';
if (socket_local != socketptr->protocol)
SPRINTF(&dsocketptr->iod->dollar.key[len], "%d", socketptr->local.port);
-# ifndef VMS
else /* path goes in $key */
strncpy(&dsocketptr->iod->dollar.key[len], ((struct sockaddr_un *)(socketptr->local.sa))->sun_path,
DD_BUFLEN - len - 1);
-# endif
dsocketptr->iod->dollar.key[DD_BUFLEN - 1] = '\0';
return TRUE;
}
diff --git a/sr_port/iosocket_close.c b/sr_port/iosocket_close.c
index a740907..e2cdd67 100755
--- a/sr_port/iosocket_close.c
+++ b/sr_port/iosocket_close.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -21,13 +21,10 @@
#include "gtm_string.h"
#include "gtm_iconv.h"
-#ifndef VMS
#include "gtm_stat.h"
#include "gtmio.h"
-#endif
#include "gtm_stdio.h"
#include "gtm_unistd.h"
-
#include "gtm_socket.h"
#include "gtm_inet.h"
@@ -42,12 +39,12 @@
#include "gtm_tls.h"
#endif
#include "error.h"
+#include "op.h"
+#include "indir_enum.h"
GBLREF io_desc *active_device;
GBLREF int process_exiting;
-#ifndef VMS
GBLREF boolean_t gtm_pipe_child;
-#endif
LITREF unsigned char io_params_size[];
@@ -71,7 +68,9 @@ void iosocket_close(io_desc *iod, mval *pp)
boolean_t socket_destroy = FALSE;
boolean_t socket_delete = FALSE;
boolean_t ch_set;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
assert(iod->type == gtmsocket);
dsocketptr = (d_socket_struct *)iod->dev_sp;
ESTABLISH_GTMIO_CH(&iod->pair, ch_set);
@@ -81,9 +80,7 @@ void iosocket_close(io_desc *iod, mval *pp)
switch (ch)
{
case iop_exception:
- iod->error_handler.len = (int)(*(pp->str.addr + p_offset));
- iod->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
case iop_socket:
handle_len = (int)(*(pp->str.addr + p_offset));
@@ -92,8 +89,8 @@ void iosocket_close(io_desc *iod, mval *pp)
socket_specified = TRUE;
break;
case iop_ipchset:
-# if defined(KEEP_zOS_EBCDIC) || defined(VMS)
- if ( (iconv_t)0 != iod->input_conv_cd )
+# if defined(KEEP_zOS_EBCDIC)
+ if ((iconv_t)0 != iod->input_conv_cd)
{
ICONV_CLOSE_CD(iod->input_conv_cd);
}
@@ -102,9 +99,9 @@ void iosocket_close(io_desc *iod, mval *pp)
ICONV_OPEN_CD(iod->input_conv_cd, INSIDE_CH_SET, (char *)(pp->str.addr + p_offset + 1));
# endif
break;
- case iop_opchset:
-# if defined(KEEP_zOS_EBCDIC) || defined(VMS)
- if ( (iconv_t)0 != iod->output_conv_cd )
+ case iop_opchset:
+# if defined(KEEP_zOS_EBCDIC)
+ if ((iconv_t)0 != iod->output_conv_cd)
{
ICONV_CLOSE_CD(iod->output_conv_cd);
}
@@ -119,11 +116,9 @@ void iosocket_close(io_desc *iod, mval *pp)
case iop_nodestroy:
socket_destroy = FALSE;
break;
-# ifndef VMS
case iop_delete:
socket_delete = TRUE;
break;
-# endif
default:
break;
}
@@ -169,17 +164,14 @@ void iosocket_close_range(d_socket_struct *dsocketptr, int start, int end, boole
int rc, save_fd, save_rc = 0, save_errno;
ssize_t status;
socket_struct *socketptr;
-# ifndef VMS
struct stat statbuf, fstatbuf;
char *path;
int res;
int null_fd = 0;
-# endif
for (ii = start; ii >= end; ii--)
{
socketptr = dsocketptr->socket[ii];
-# ifndef VMS
/* Don't reap if in a child process creating a new job or pipe device */
if ((socket_local == socketptr->protocol) && socketptr->passive && !gtm_pipe_child)
{ /* only delete if passive/listening */
@@ -197,7 +189,6 @@ void iosocket_close_range(d_socket_struct *dsocketptr, int start, int end, boole
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("unlink during socket delete"), CALLFROM, errno);
}
-# endif
/* below is similar to iosocket_flush but socketptr may not be current socket */
if (socketptr->obuffer_timer_set)
{
@@ -227,7 +218,6 @@ void iosocket_close_range(d_socket_struct *dsocketptr, int start, int end, boole
save_fd = socketptr->sd;
save_errno = errno;
}
-# ifndef VMS
else if (!process_exiting && (3 > socketptr->sd))
{
OPENFILE("/dev/null", O_RDWR, null_fd);
@@ -237,7 +227,6 @@ void iosocket_close_range(d_socket_struct *dsocketptr, int start, int end, boole
}
assert(socketptr->sd == null_fd);
}
-# endif
SOCKET_FREE(socketptr);
if (dsocketptr->current_socket >= ii)
dsocketptr->current_socket--;
@@ -249,12 +238,10 @@ void iosocket_close_range(d_socket_struct *dsocketptr, int start, int end, boole
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_CLOSEFAIL, 1, save_fd, save_errno);
}
-# ifndef VMS
else if (-1 == null_fd)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_FILEOPENFAIL, 2, LIT_AND_LEN("/dev/null"), save_errno, 0);
}
-# endif
}
void iosocket_close_one(d_socket_struct *dsocketptr, int index)
diff --git a/sr_port/iosocket_connect.c b/sr_port/iosocket_connect.c
index ec80d9d..a76bd4c 100644
--- a/sr_port/iosocket_connect.c
+++ b/sr_port/iosocket_connect.c
@@ -32,6 +32,7 @@
#include "gtm_ipv6.h"
#include "gtm_unistd.h"
#include "gtm_select.h"
+#include "min_max.h"
#define ESTABLISHED "ESTABLISHED"
@@ -290,18 +291,13 @@ boolean_t iosocket_connect(socket_struct *sockptr, int4 msec_timeout, boolean_t
} /* else fall through */
case EINPROGRESS:
case EALREADY:
-# if (defined(__osf__) && defined(__alpha)) || defined(__sun) || defined(__vms)
- case EWOULDBLOCK:
-# endif
need_socket = need_connect = FALSE;
if (0 != msec_timeout)
need_select = TRUE;
/* fall through */
case ETIMEDOUT: /* the other side bound but not listening */
case ECONNREFUSED:
-# ifndef VMS
- case ENOENT: /* LOCAL socket not there */
-# endif
+ case ENOENT: /* LOCAL socket not there */
if (!no_time_left && (0 != msec_timeout) && (NO_M_TIMEOUT != msec_timeout))
{
sys_get_curr_time(&cur_time);
@@ -317,7 +313,7 @@ boolean_t iosocket_connect(socket_struct *sockptr, int4 msec_timeout, boolean_t
else if (!no_time_left)
{
if (ETIMEDOUT == save_errno || ECONNREFUSED == save_errno
- UNIX_ONLY(|| ENOENT == save_errno))
+ || ENOENT == save_errno)
need_connect = need_socket = TRUE;
save_errno = 0;
res = -1; /* do the outer loop again */
@@ -376,7 +372,7 @@ boolean_t iosocket_connect(socket_struct *sockptr, int4 msec_timeout, boolean_t
} else
{ /* return socket error */
if (ECONNREFUSED == sockerror || ETIMEDOUT == sockerror
- UNIX_ONLY(|| ENOENT == sockerror))
+ || ENOENT == sockerror)
{ /* try until timeout */
last_errno = sockerror;
save_errno = 0;
@@ -421,16 +417,13 @@ boolean_t iosocket_connect(socket_struct *sockptr, int4 msec_timeout, boolean_t
sockptr->remote.ai_head = NULL;
}
errptr = (char *)STRERROR(save_errno);
- errlen = STRLEN(errptr);
if (dev_open == iod->state)
{
iod->dollar.za = 9;
- memcpy(iod->dollar.device, ONE_COMMA, SIZEOF(ONE_COMMA));
- memcpy(&iod->dollar.device[SIZEOF(ONE_COMMA) - 1],
- errptr, errlen + 1); /* + 1 for null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(dsocketptr->iod, errptr);
}
if (sockptr->ioerror)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_OPENCONN, 0, ERR_TEXT, 2, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_OPENCONN, 0, ERR_TEXT, 2, STRLEN(errptr), errptr);
errno = save_errno;
return FALSE;
}
diff --git a/sr_port/iosocket_destroy.c b/sr_port/iosocket_destroy.c
index c562f0b..db331ef 100644
--- a/sr_port/iosocket_destroy.c
+++ b/sr_port/iosocket_destroy.c
@@ -50,6 +50,11 @@ void iosocket_destroy (io_desc *ciod)
else
lpp = &lp->next;
}
+ if (ciod->dollar.devicebuffer)
+ {
+ free(ciod->dollar.devicebuffer);
+ ciod->dollar.devicebuffer = NULL;
+ }
free(dsocketptr);
free(ciod);
}
diff --git a/sr_port/iosocket_flush.c b/sr_port/iosocket_flush.c
index 9c2927a..0d5b95c 100755
--- a/sr_port/iosocket_flush.c
+++ b/sr_port/iosocket_flush.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -19,11 +19,11 @@
#include <errno.h>
#include "gtm_stdio.h"
#include "gtm_string.h"
-
#include "io.h"
#include "gt_timer.h"
#include "iosocketdef.h"
#include "error.h"
+#include "min_max.h"
error_def(ERR_CURRSOCKOFR);
error_def(ERR_NOSOCKETINDEV);
@@ -38,24 +38,20 @@ void iosocket_flush(io_desc *iod)
d_socket_struct *dsocketptr;
socket_struct *socketptr;
ssize_t status;
- int on = 1, off = 0;
- char *errptr;
- int4 errlen;
+ int on = 1, off = 0;
+ char *errptr;
+ int4 errlen;
boolean_t ch_set;
assert(gtmsocket == iod->type);
-
dsocketptr = (d_socket_struct *)iod->dev_sp;
socketptr = dsocketptr->socket[dsocketptr->current_socket];
ESTABLISH_GTMIO_CH(&iod->pair, ch_set);
-
if (0 >= dsocketptr->n_socket)
{
-# ifndef VMS
if (iod == io_std_device.out)
ionl_flush(iod);
else
-# endif
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NOSOCKETINDEV);
REVERT_GTMIO_CH(&iod->pair, ch_set);
return;
@@ -83,24 +79,6 @@ void iosocket_flush(io_desc *iod)
if ((0 < socketptr->obuffer_size) && ((0 >= status) || (0 != socketptr->obuffer_errno)))
iosocket_buffer_error(socketptr); /* pre-existing error or error flushing buffer */
}
-#ifdef C9A06001531
- /* pending change request C9A06001531 */
- memcpy(iod->dollar.device, "0", SIZEOF("0"));
- if ( -1 == setsockopt(socketptr->sd, SOL_SOCKET, TCP_NODELAY, &on, SIZEOF(on)) ||
- (-1 == setsockopt(socketptr->sd, SOL_SOCKET, TCP_NODELAY, &off, SIZEOF(off))))
- {
- errptr = (char *)STRERROR(errno);
- errlen = strlen(errptr);
- iod->dollar.za = 9;
- MEMCPY_LIT(iod->dollar.device, "1,");
- memcpy(&iod->dollar.device[SIZEOF("1,") - 1], errptr, errlen + 1); /* we want the null */
- if (socketptr->ioerror)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_SOCKWRITE, 0, ERR_TEXT, 2, errlen, errptr);
- REVERT_GTMIO_CH(&iod->pair, ch_set);
- return;
- }
-
-#endif
REVERT_GTMIO_CH(&iod->pair, ch_set);
return;
}
diff --git a/sr_port/iosocket_iocontrol.c b/sr_port/iosocket_iocontrol.c
index 61560fd..4bfb04c 100755
--- a/sr_port/iosocket_iocontrol.c
+++ b/sr_port/iosocket_iocontrol.c
@@ -227,16 +227,11 @@ void iosocket_iocontrol(mstr *mn, int4 argcnt, va_list args)
void iosocket_dlr_device(mstr *d)
{
io_desc *iod;
- int len;
boolean_t ch_set;
iod = io_curr_device.in;
ESTABLISH_GTMIO_CH(&iod->pair, ch_set);
- len = STRLEN(iod->dollar.device);
- /* verify internal buffer has enough space for $DEVICE string value */
- assert((int)d->len > len);
- memcpy(d->addr, iod->dollar.device, len);
- d->len = len;
+ PUT_DOLLAR_DEVICE_INTO_MSTR(iod, d);
REVERT_GTMIO_CH(&iod->pair, ch_set);
return;
}
diff --git a/sr_port/iosocket_open.c b/sr_port/iosocket_open.c
index 022a0a8..61cbdbf 100755
--- a/sr_port/iosocket_open.c
+++ b/sr_port/iosocket_open.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2012-2016 Fidelity National Information *
+ * Copyright (c) 2012-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -15,10 +15,8 @@
#include "gtm_string.h"
#include "gtm_stdio.h"
-#ifndef VMS
#include "gtm_stdlib.h"
#include "gtm_stat.h"
-#endif
#include "gtm_socket.h"
#include "gtm_inet.h"
#include "gtm_time.h"
@@ -34,11 +32,11 @@
#include "iotimer.h"
#include "io_params.h"
#include "iosocketdef.h"
-#ifndef VMS
#include "iormdef.h"
-#endif
#include "stringpool.h"
#include "error.h"
+#include "op.h"
+#include "indir_enum.h"
GBLREF d_socket_struct *socket_pool, *newdsocket;
GBLREF io_pair io_std_device; /* standard device */
@@ -46,6 +44,7 @@ GBLREF boolean_t gtm_utf8_mode;
GBLREF int4 gtm_max_sockets;
GBLREF boolean_t dollar_zininterrupt;
GBLREF UConverter *chset_desc[];
+
LITREF unsigned char io_params_size[];
LITREF mstr chset_names[];
@@ -71,7 +70,7 @@ error_def(ERR_ZINTRECURSEIO);
short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4 timepar)
{
char addr[SA_MAXLITLEN], *errptr, sockaddr[SA_MAXLITLEN],
- temp_addr[SA_MAXLITLEN], dev_type[MAX_DEV_TYPE_LEN];
+ temp_addr[SA_MAXLITLEN], dev_type[MAX_DEV_TYPE_LEN];
static char *conv_buff = NULL;
unsigned char ch, *c, *start, *next, *top;
int new_ozff_len, conv_len, handle_len, moreread_timeout, len;
@@ -82,7 +81,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
io_desc *ioptr;
fd_set tcp_fd;
uint4 bfsize = DEFAULT_SOCKET_BUFFER_SIZE, ibfsize;
- d_socket_struct *dsocketptr;
+ d_socket_struct *dsocketptr;
socket_struct *curr_socketptr = NULL, *socketptr = NULL, *localsocketptr = NULL;
mv_stent *mv_zintdev;
boolean_t zint_conn_restart = FALSE;
@@ -90,32 +89,32 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
mstr chset_mstr;
gtm_chset_t default_chset, temp_ichset, temp_ochset;
boolean_t attach_specified = FALSE,
- listen_specified = FALSE,
- connect_specified = FALSE,
- ioerror_specified = FALSE,
- delay_specified = FALSE,
- nodelay_specified = FALSE,
- ibfsize_specified = FALSE,
- moreread_specified = FALSE,
- is_principal = FALSE, /* called from inetd */
+ listen_specified = FALSE,
+ connect_specified = FALSE,
+ ioerror_specified = FALSE,
+ delay_specified = FALSE,
+ nodelay_specified = FALSE,
+ ibfsize_specified = FALSE,
+ moreread_specified = FALSE,
+ is_principal = FALSE, /* called from inetd */
newversion = FALSE, /* for local sockets */
- ichset_specified,
- ochset_specified;
+ ichset_specified,
+ ochset_specified;
unsigned char delimiter_buffer[MAX_N_DELIMITER * (MAX_DELIM_LEN + 1)], zff_buffer[MAX_ZFF_LEN];
char ioerror,
- sock_handle[MAX_HANDLE_LEN], delimiter[MAX_DELIM_LEN + 1];
+ sock_handle[MAX_HANDLE_LEN], delimiter[MAX_DELIM_LEN + 1];
int socketptr_delim_len;
char ipaddr[SA_MAXLEN];
int errcode;
struct addrinfo *ai_ptr, *remote_ai_ptr;
-#ifndef VMS
uic_struct_int uic;
uint filemode;
uint filemode_mask;
unsigned long uicvalue;
-#endif
boolean_t ch_set;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
ioptr = dev->iod;
ESTABLISH_RET_GTMIO_CH(&ioptr->pair, -1, ch_set);
assert((params) *(pp->str.addr + p_offset) < (unsigned char)n_iops);
@@ -141,7 +140,6 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
dsocketptr->iod = ioptr;
} else
dsocketptr = (d_socket_struct *)ioptr->dev_sp;
-
if (ioptr->state == dev_never_opened)
{
ioptr->state = dev_closed;
@@ -153,7 +151,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
/* called from io_init */
is_principal = TRUE;
}
- if (dsocketptr->mupintr)
+ if (dsocketptr->mupintr)
{ /* check if connect was interrupted */
sockintr = &dsocketptr->sock_save_state;
assertpro(sockwhich_invalid != sockintr->who_saved); /* Interrupt should never have an invalid save state */
@@ -173,7 +171,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
assert(newdsocket);
assert(newdsocket == sockintr->newdsocket);
memcpy(newdsocket, (d_socket_struct *)mv_zintdev->mv_st_cont.mvs_zintdev.curr_sp_buffer.addr,
- d_socket_struct_len);
+ d_socket_struct_len);
socketptr = newdsocket->socket[newdsocket->current_socket];
ichset_specified = newdsocket->ichset_specified;
ochset_specified = newdsocket->ochset_specified;
@@ -195,11 +193,9 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
memcpy(ioptr->dollar.device, "0", SIZEOF("0"));
zff_len = -1; /* indicates neither ZFF nor ZNOFF specified */
delimiter_len = -1; /* indicates neither DELIM nor NODELIM specified */
-# ifndef VMS
filemode = filemode_mask = 0;
uic.mem = (uid_t)-1; /* flag as not specified */
uic.grp = (gid_t)-1;
-# endif
ichset_specified = ochset_specified = FALSE;
while (iop_eol != (ch = *(pp->str.addr + p_offset++)))
{
@@ -215,7 +211,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
case iop_ipchset:
UNICODE_ONLY(
if (gtm_utf8_mode)
- { /* Only change ipchset if in UTF8 mode */
+ { /* Only change ipchset if in UTF8 mode */
GET_ADDR_AND_LEN(chset_mstr.addr, chset_mstr.len);
SET_ENCODING(temp_ichset, &chset_mstr)
ichset_specified = TRUE;
@@ -225,14 +221,14 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
case iop_opchset:
UNICODE_ONLY(
if (gtm_utf8_mode)
- { /* Only change ipchset if in UTF8 mode */
+ { /* Only change ipchset if in UTF8 mode */
GET_ADDR_AND_LEN(chset_mstr.addr, chset_mstr.len);
SET_ENCODING(temp_ochset, &chset_mstr)
ochset_specified = TRUE;
}
);
break;
- case iop_chset:
+ case iop_chset:
UNICODE_ONLY(
if (gtm_utf8_mode)
{ /* Only change ipchset/opchset if in UTF8 mode */
@@ -240,7 +236,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
SET_ENCODING(temp_ichset, &chset_mstr)
temp_ochset = temp_ichset;
ichset_specified = ochset_specified = TRUE;
- }
+ }
);
break;
/* Note the following 4 cases (iop_m/utf16/utf16be/utf16le) have no corresponding device parameter
@@ -327,9 +323,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
ioerror = *(pp->str.addr + p_offset + 1); /* the first char decides */
break;
case iop_exception:
- ioptr->error_handler.len = (int)(*(pp->str.addr + p_offset));
- ioptr->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&ioptr->error_handler);
+ DEF_EXCEPTION(pp, p_offset, ioptr);
break;
case iop_attach:
attach_specified = TRUE;
@@ -368,7 +362,6 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
MAX_MOREREAD_TIMEOUT);
moreread_specified = TRUE;
break;
-# ifndef VMS
case iop_newversion:
newversion = TRUE;
break;
@@ -404,7 +397,6 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
filemode_mask |= S_IRWXU;
filemode |= *(pp->str.addr + p_offset) << 6;
break;
-# endif
default:
break;
}
@@ -449,7 +441,6 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
socketptr->moreread_timeout = moreread_timeout;
socketptr->def_moreread_timeout = TRUE; /* iosocket_readfl.c needs to know user specified */
}
-# ifndef VMS
if (listen_specified)
{ /* for LOCAL sockets */
if (filemode_mask)
@@ -459,10 +450,8 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
}
socketptr->uic = uic; /* -1 is no change */
}
-# endif
- /* socket handle -- also check for duplication */
if (attach_specified)
- {
+ { /* socket handle -- also check for duplication */
if (iosocket_handle(sock_handle, &handle_len, FALSE, newdsocket) >= 0)
{
if (FD_INVALID != socketptr->temp_sd)
@@ -470,8 +459,8 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
SOCKET_FREE(socketptr);
assert(ioptr->newly_created == FALSE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SOCKETEXIST, 2, handle_len, sock_handle);
- return FALSE;
- }
+ return FALSE;
+ }
} else
iosocket_handle(sock_handle, &handle_len, TRUE, dsocketptr);
socketptr->handle_len = handle_len;
@@ -494,12 +483,12 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
* curr_socketptr will be used to set the values of delimiter, ZFF. */
if (!socketptr)
{ /* If new socket not created, then use the existing (current) socket from the socket device */
- if (dsocketptr->n_socket <= dsocketptr->current_socket)
+ if (dsocketptr->n_socket <= dsocketptr->current_socket)
{
assert(FALSE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_CURRSOCKOFR, 2, dsocketptr->current_socket,
dsocketptr->n_socket);
- return FALSE;
+ return FALSE;
}
if (-1 != dsocketptr->current_socket)
curr_socketptr = dsocketptr->socket[dsocketptr->current_socket];
@@ -517,14 +506,15 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
assert(FALSE);
}
if (curr_socketptr && (0 <= zff_len) && /* ZFF or ZNOFF specified */
- (0 < (curr_socketptr->zff.len = zff_len))) /* assign the new ZFF len, might be 0 from ZNOFF, or ZFF="" */
+ (0 < (curr_socketptr->zff.len = zff_len))) /* assign the new ZFF len, might be 0 from ZNOFF, or ZFF="" */
{ /* ZFF="non-zero-len-string" specified */
if (gtm_utf8_mode) /* Check if ZFF has any invalid UTF-8 character */
- { /* Note: the ZFF string originates from the source program, so is in UTF-8 mode or M mode regardless
- * of OCHSET of this device. ZFF is output on WRITE # command, and MUST contain valid UTF-8 sequence. */
+ { /* Note: the ZFF string originates from the source program, so is in UTF-8 mode or M mode regardless
+ * of OCHSET of this device; ZFF is output on WRITE # command, and MUST contain valid UTF-8 sequence
+ */
utf8_len_strict(zff_buffer, zff_len); /* triggers badchar error for invalid sequence */
}
- /* we rely on curr_socketptr->zff.addr being set to 0 in iosocket_create() */
+ /* we rely on curr_socketptr->zff.addr being set to 0 in iosocket_create() */
if (NULL == curr_socketptr->zff.addr)
curr_socketptr->zff.addr = (char *)malloc(MAX_ZFF_LEN);
else if (curr_socketptr->zff.addr != curr_socketptr->ozff.addr)
@@ -562,15 +552,14 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
ioptr->dollar.key[len++] = '|';
if (socket_tcpip == socketptr->protocol)
strncpy(&ioptr->dollar.key[len], socketptr->remote.saddr_ip, DD_BUFLEN - 1 - len);
-# ifndef VMS
else if (socket_local == socketptr->protocol)
{
if ((NULL != socketptr->local.sa)
- && (NULL != ((struct sockaddr_un *)(socketptr->local.sa))->sun_path))
+ && (NULL != ((struct sockaddr_un *)(socketptr->local.sa))->sun_path))
strncpy(&ioptr->dollar.key[len], ((struct sockaddr_un *)(socketptr->local.sa))->sun_path,
DD_BUFLEN - 1 - len);
else if ((NULL != socketptr->remote.sa)
- && (NULL != ((struct sockaddr_un *)(socketptr->remote.sa))->sun_path))
+ && (NULL != ((struct sockaddr_un *)(socketptr->remote.sa))->sun_path))
strncpy(&ioptr->dollar.key[len], ((struct sockaddr_un *)(socketptr->remote.sa))->sun_path,
DD_BUFLEN - 1 - len);
/* set default delimiter on principal local sockets to resemble rm device */
@@ -578,7 +567,6 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
delimiter_len = 1;
iosocket_delimiter(delimiter_buffer, delimiter_len, socketptr, FALSE);
}
-# endif
else
ioptr->dollar.key[len] = '\0';
ioptr->dollar.key[DD_BUFLEN-1] = '\0'; /* In case we fill the buffer */
@@ -626,9 +614,9 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
continue;
if (((localsocketptr->delimiter[0].addr == localsocketptr->idelimiter[0].addr) &&
IS_UTF16_CHSET(ioptr->ichset) && IS_UTF16_CHSET(dsocketptr->ichset_utf16_variant))
- || ((localsocketptr->delimiter[0].addr != localsocketptr->idelimiter[0].addr)
+ || ((localsocketptr->delimiter[0].addr != localsocketptr->idelimiter[0].addr)
&& !IS_UTF16_CHSET(ioptr->ichset)))
- iosocket_idelim_conv(localsocketptr, ioptr->ichset);
+ iosocket_idelim_conv(localsocketptr, ioptr->ichset);
}
if (ochset_specified)
for (soc_cnt=0; soc_cnt < dsocketptr->n_socket; soc_cnt++)
@@ -638,9 +626,9 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
continue;
if (((localsocketptr->delimiter[0].addr == localsocketptr->odelimiter0.addr) &&
IS_UTF16_CHSET(ioptr->ochset) && IS_UTF16_CHSET(dsocketptr->ochset_utf16_variant))
- || ((localsocketptr->delimiter[0].addr != localsocketptr->odelimiter0.addr)
+ || ((localsocketptr->delimiter[0].addr != localsocketptr->odelimiter0.addr)
&& !IS_UTF16_CHSET(ioptr->ochset)))
- iosocket_odelim_conv(localsocketptr, ioptr->ochset);
+ iosocket_odelim_conv(localsocketptr, ioptr->ochset);
}
/* Now convert the ZFFs */
if (ochset_specified)
@@ -651,7 +639,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
{
localsocketptr = dsocketptr->socket[soc_cnt];
if (localsocketptr && (NULL != localsocketptr->ozff.addr) && (0 < localsocketptr->zff.len)
- && (localsocketptr->ozff.addr != localsocketptr->zff.addr))
+ && (localsocketptr->ozff.addr != localsocketptr->zff.addr))
free(localsocketptr->ozff.addr); /* previously converted */
localsocketptr->ozff = localsocketptr->zff; /* contains converted UTF-16 form */
}
@@ -666,7 +654,7 @@ short iosocket_open(io_log_name *dev, mval *pp, int file_des, mval *mspace, int4
{
conv_len = MAX_ZFF_LEN;
new_ozff_len = gtm_conv(chset_desc[CHSET_UTF8], chset_desc[ioptr->ochset],
- &localsocketptr->zff, conv_buff, &conv_len);
+ &localsocketptr->zff, conv_buff, &conv_len);
assert(MAX_ZFF_LEN > new_ozff_len);
localsocketptr->ozff.len = new_ozff_len;
localsocketptr->ozff.addr = malloc(new_ozff_len);
diff --git a/sr_port/iosocket_readfl.c b/sr_port/iosocket_readfl.c
index 5a8d2eb..dfa8deb 100644
--- a/sr_port/iosocket_readfl.c
+++ b/sr_port/iosocket_readfl.c
@@ -113,9 +113,7 @@ void iosocket_readfl_badchar(mval *vmvalptr, int datalen, int delimlen, unsigned
iod->dollar.key[MIN(delimlen, DD_BUFLEN - 1)] = '\0';
}
}
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- memcpy(&iod->dollar.device[len], BADCHAR_DEVICE_MSG, SIZEOF(BADCHAR_DEVICE_MSG));
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, BADCHAR_DEVICE_MSG);
}
#endif
@@ -902,19 +900,13 @@ int iosocket_readfl(mval *v, int4 width, int4 msec_timeout)
if (0 == chars_read)
iod->dollar.x = 0;
iod->dollar.za = 9;
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
# ifdef GTM_TLS
if (socketptr->tlsenabled && (0 > real_errno))
errptr = (char *)gtm_tls_get_error();
else /* TLS not enabled or system call error */
# endif
errptr = (char *)STRERROR(real_errno);
- errlen = STRLEN(errptr);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errptr, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errptr);
if (io_curr_device.in == io_std_device.in)
{
if (!prin_in_dev_failure)
@@ -929,7 +921,7 @@ int iosocket_readfl(mval *v, int4 width, int4 msec_timeout)
{
iod->dollar.zeof = TRUE;
if (socketptr->ioerror)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_IOEOF, 0, ERR_TEXT, 2, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_IOEOF, 0, ERR_TEXT, 2, STRLEN(errptr), errptr);
} else
iod->dollar.zeof = TRUE;
}
diff --git a/sr_port/iosocket_use.c b/sr_port/iosocket_use.c
index fd59a20..9d3c490 100755
--- a/sr_port/iosocket_use.c
+++ b/sr_port/iosocket_use.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2013-2016 Fidelity National Information *
+ * Copyright (c) 2013-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -32,6 +32,8 @@
#include "stringpool.h"
#include "gtm_conv.h"
#include "error.h"
+#include "op.h"
+#include "indir_enum.h"
GBLREF io_pair io_curr_device;
GBLREF io_pair io_std_device;
@@ -79,25 +81,25 @@ void iosocket_use(io_desc *iod, mval *pp)
d_socket_struct *dsocketptr;
socket_struct *socketptr, newsocket, *localsocketptr;
char handlea[MAX_HANDLE_LEN], handles[MAX_HANDLE_LEN], handled[MAX_HANDLE_LEN];
- char addr[SA_MAXLITLEN], *errptr, sockaddr[SA_MAXLITLEN],
- temp_addr[SA_MAXLITLEN], ioerror, *free_ozff = NULL;
+ char addr[SA_MAXLITLEN], *errptr, sockaddr[SA_MAXLITLEN],
+ temp_addr[SA_MAXLITLEN], ioerror, *free_ozff = NULL;
unsigned char delimiter_buffer[MAX_N_DELIMITER * (MAX_DELIM_LEN + 1)];
unsigned char zff_buffer[MAX_ZFF_LEN];
boolean_t attach_specified = FALSE,
- detach_specified = FALSE,
- connect_specified = FALSE,
- ioerror_specified = FALSE,
- listen_specified = FALSE,
- socket_specified = FALSE,
- delay_specified = FALSE,
- nodelay_specified = FALSE,
- bfsize_specified = FALSE,
+ detach_specified = FALSE,
+ connect_specified = FALSE,
+ ioerror_specified = FALSE,
+ listen_specified = FALSE,
+ socket_specified = FALSE,
+ delay_specified = FALSE,
+ nodelay_specified = FALSE,
+ bfsize_specified = FALSE,
ochset_specified = FALSE,
ichset_specified = FALSE,
- ibfsize_specified = FALSE,
- moreread_specified = FALSE,
- flush_specified = FALSE,
- create_new_socket;
+ ibfsize_specified = FALSE,
+ moreread_specified = FALSE,
+ flush_specified = FALSE,
+ create_new_socket;
int4 index, n_specified, zff_len, delimiter_len, moreread_timeout;
int fil_type, nodelay, p_offset = 0;
uint4 bfsize = DEFAULT_SOCKET_BUFFER_SIZE, ibfsize;
@@ -107,10 +109,12 @@ void iosocket_use(io_desc *iod, mval *pp)
gtm_chset_t temp_ochset, temp_ichset;
size_t d_socket_struct_len;
boolean_t ch_set;
+ DCL_THREADGBL_ACCESS;
- assert(iod->state == dev_open);
- assert(iod->type == gtmsocket);
- dsocketptr = (d_socket_struct *)(iod->dev_sp);
+ SETUP_THREADGBL_ACCESS;
+ assert(iod->state == dev_open);
+ assert(iod->type == gtmsocket);
+ dsocketptr = (d_socket_struct *)(iod->dev_sp);
/* ---------------------------------- parse the command line ------------------------------------ */
n_specified = 0;
zff_len = -1; /* indicates neither ZFF nor ZNOFF specified */
@@ -127,8 +131,8 @@ void iosocket_use(io_desc *iod, mval *pp)
if (dollar_zininterrupt)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_ZINTRECURSEIO);
/* We are not in $zinterrupt code and this device was not resumed properly
- so clear its restartability.
- */
+ * so clear its restartability.
+ */
io_find_mvstent(iod, TRUE);
dsocketptr->mupintr = FALSE;
}
@@ -138,16 +142,13 @@ void iosocket_use(io_desc *iod, mval *pp)
dsocketptr->sock_save_state.who_saved = sockwhich_invalid;
io_find_mvstent(iod, TRUE);
}
-
while (iop_eol != (ch = *(pp->str.addr + p_offset++)))
{
assert((params)ch < (params)n_iops);
switch (ch)
{
case iop_exception:
- iod->error_handler.len = (int)(*(pp->str.addr + p_offset));
- iod->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
case iop_filter:
len = *(pp->str.addr + p_offset);
@@ -253,13 +254,13 @@ void iosocket_use(io_desc *iod, mval *pp)
memcpy(handles, (char *)(pp->str.addr + p_offset + 1), handles_len);
break;
case iop_ipchset:
-#if defined(KEEP_zOS_EBCDIC) || defined(VMS)
+# if defined(KEEP_zOS_EBCDIC)
if ((iconv_t)0 != iod->input_conv_cd)
ICONV_CLOSE_CD(iod->input_conv_cd);
SET_CODE_SET(iod->in_code_set, (char *)(pp->str.addr + p_offset + 1));
if (DEFAULT_CODE_SET != iod->in_code_set)
ICONV_OPEN_CD(iod->input_conv_cd, INSIDE_CH_SET, (char *)(pp->str.addr + p_offset + 1));
-#endif
+# endif
GET_ADDR_AND_LEN(chset_mstr.addr, chset_mstr.len);
SET_ENCODING(temp_ichset, &chset_mstr);
if (!gtm_utf8_mode && IS_UTF_CHSET(temp_ichset))
@@ -267,13 +268,13 @@ void iosocket_use(io_desc *iod, mval *pp)
ichset_specified = TRUE;
break;
case iop_opchset:
-#if defined(KEEP_zOS_EBCDIC) || defined(VMS)
+# if defined(KEEP_zOS_EBCDIC)
if ((iconv_t)0 != iod->output_conv_cd)
ICONV_CLOSE_CD(iod->output_conv_cd);
SET_CODE_SET(iod->out_code_set, (char *)(pp->str.addr + p_offset + 1));
if (DEFAULT_CODE_SET != iod->out_code_set)
ICONV_OPEN_CD(iod->output_conv_cd, (char *)(pp->str.addr + p_offset + 1), INSIDE_CH_SET);
-#endif
+# endif
GET_ADDR_AND_LEN(chset_mstr.addr, chset_mstr.len);
SET_ENCODING(temp_ochset, &chset_mstr);
if (!gtm_utf8_mode && IS_UTF_CHSET(temp_ochset))
@@ -325,17 +326,17 @@ void iosocket_use(io_desc *iod, mval *pp)
case iop_nowrap:
iod->wrap = FALSE;
break;
- case iop_morereadtime:
- /* Time in milliseconds socket read will wait for more data before returning */
- GET_LONG(moreread_timeout, pp->str.addr + p_offset);
+ case iop_morereadtime:
+ /* Time in milliseconds socket read will wait for more data before returning */
+ GET_LONG(moreread_timeout, pp->str.addr + p_offset);
if (-1 == moreread_timeout)
moreread_timeout = DEFAULT_MOREREAD_TIMEOUT;
else if (-1 > moreread_timeout)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_DEVPARMNEG);
else if (MAX_MOREREAD_TIMEOUT < moreread_timeout)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_MRTMAXEXCEEDED, 1, MAX_MOREREAD_TIMEOUT);
- moreread_specified = TRUE;
- break;
+ moreread_specified = TRUE;
+ break;
case iop_flush:
n_specified++;
flush_specified = TRUE;
@@ -409,11 +410,11 @@ void iosocket_use(io_desc *iod, mval *pp)
return; /* detach can only be specified by itself */
}
if (attach_specified)
- { /* NOTE: A socket could be moved from one device to another using DETACH/ATTACH. A socket does not carry I[O]CHSET with
- * it while being moved. Such a socket will use the I[O]CHSET of the device it is ATTACHed to. If there is input still
- * buffered, this may cause unintentional consequences in the application if I[O]CHSET changes. GT.M does not detect
- * (or report) a change in I[O]CHSET due to DETACH/ATTACH.
- */
+ { /* NOTE: A socket could be moved from one device to another using DETACH/ATTACH. A socket does not carry I[O]CHSET
+ * with it while being moved. Such a socket will use the I[O]CHSET of the device it is ATTACHed to. If there is
+ * input still buffered, this may cause unintentional consequences in the application if I[O]CHSET changes. GT.M
+ * does not detect (or report) a change in I[O]CHSET due to DETACH/ATTACH.
+ */
if (1 < n_specified)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_ANCOMPTINC, 4, LEN_AND_LIT("ATTACH"), LEN_AND_LIT("USE"));
@@ -433,10 +434,10 @@ void iosocket_use(io_desc *iod, mval *pp)
if (create_new_socket = (listen_specified || connect_specified)) /* real "=" */
{
/* allocate the structure for a new socket */
- if (NULL == (socketptr = iosocket_create(sockaddr, bfsize, -1, listen_specified)))
+ if (NULL == (socketptr = iosocket_create(sockaddr, bfsize, -1, listen_specified)))
{
REVERT_GTMIO_CH(&iod->pair, ch_set);
- return;
+ return;
}
if (gtm_max_sockets <= newdsocket->n_socket)
{
@@ -448,14 +449,12 @@ void iosocket_use(io_desc *iod, mval *pp)
}
/* give the new socket a handle */
iosocket_handle(handles, &handles_len, TRUE, dsocketptr);
- socketptr->handle_len = handles_len;
- memcpy(socketptr->handle, handles, handles_len);
+ socketptr->handle_len = handles_len;
+ memcpy(socketptr->handle, handles, handles_len);
socketptr->dev = newdsocket; /* use newdsocket temporarily for the sake of bind/connect */
-#ifndef VMS
socketptr->filemode_mask = 0;
socketptr->uic.mem = (uid_t)-1;
socketptr->uic.grp = (gid_t)-1;
-#endif
} else
{
if (socket_specified)
@@ -480,22 +479,20 @@ void iosocket_use(io_desc *iod, mval *pp)
{
if (0 >= newdsocket->n_socket)
{
-# ifndef VMS
if (iod == io_std_device.out)
ionl_use(iod, pp);
else
-# endif
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NOSOCKETINDEV);
REVERT_GTMIO_CH(&iod->pair, ch_set);
return;
}
- if (newdsocket->n_socket <= newdsocket->current_socket)
- {
+ if (newdsocket->n_socket <= newdsocket->current_socket)
+ {
assert(FALSE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_CURRSOCKOFR, 2, newdsocket->current_socket,
newdsocket->n_socket);
- return;
- }
+ return;
+ }
socketptr = newdsocket->socket[newdsocket->current_socket];
}
socketptr->temp_sd = FD_INVALID;
@@ -532,9 +529,8 @@ void iosocket_use(io_desc *iod, mval *pp)
0 < (newsocket.zff.len = zff_len)) /* assign the new ZFF len, might be 0 from ZNOFF, or ZFF="" */
{ /* ZFF="non-zero-len-string" specified */
if (gtm_utf8_mode) /* Check if ZFF has any invalid UTF-8 character */
- { /* Note: the ZFF string originates from the source program, so is in UTF-8 mode or M mode
- regardless of OCHSET of this device. ZFF is output on WRITE # command, and MUST contain
- valid UTF-8 sequence.
+ { /* Note: the ZFF string originates from the source program, so is in UTF-8 mode or M mode regardless of
+ * OCHSET of this device. ZFF is output on WRITE # command, and MUST contain valid UTF-8 sequence.
*/
utf8_len_strict(zff_buffer, zff_len);
}
@@ -554,8 +550,7 @@ void iosocket_use(io_desc *iod, mval *pp)
newsocket.ozff = newsocket.zff;
}
if (gtm_utf8_mode)
- {
- /* If CHSET is being changed to UTF-16, and delimitors are not converted, convert them
+ { /* If CHSET is being changed to UTF-16, and delimitors are not converted, convert them
* But only if the UTF16 variant has already been determined.
* If CHSET is being changed to non-UTF-16, and delims are converted, free them
*/
@@ -565,11 +560,11 @@ void iosocket_use(io_desc *iod, mval *pp)
localsocketptr = dsocketptr->socket[soc_cnt];
if (!(localsocketptr && (0 < localsocketptr->n_delimiter)))
continue;
- if (((localsocketptr->delimiter[0].addr == localsocketptr->idelimiter[0].addr) &&
- IS_UTF16_CHSET(iod->ichset) && IS_UTF16_CHSET(dsocketptr->ichset_utf16_variant))
- || ((localsocketptr->delimiter[0].addr != localsocketptr->idelimiter[0].addr)
+ if (((localsocketptr->delimiter[0].addr == localsocketptr->idelimiter[0].addr)
+ && IS_UTF16_CHSET(iod->ichset) && IS_UTF16_CHSET(dsocketptr->ichset_utf16_variant))
+ || ((localsocketptr->delimiter[0].addr != localsocketptr->idelimiter[0].addr)
&& !IS_UTF16_CHSET(iod->ichset)))
- iosocket_idelim_conv(localsocketptr, iod->ichset);
+ iosocket_idelim_conv(localsocketptr, iod->ichset);
}
if (ochset_specified)
for (soc_cnt=0; soc_cnt < dsocketptr->n_socket; soc_cnt++)
@@ -583,9 +578,8 @@ void iosocket_use(io_desc *iod, mval *pp)
&& !IS_UTF16_CHSET(iod->ochset)))
iosocket_odelim_conv(localsocketptr, iod->ochset);
}
- /* Now convert the ZFFs */
if (ochset_specified)
- {
+ { /* Now convert the ZFFs */
if (!IS_UTF16_CHSET(iod->ochset))
{ /* Changed to a non-UTF16 CHSET. free all converted ZFFs */
for (soc_cnt=0; soc_cnt < dsocketptr->n_socket; soc_cnt++)
@@ -640,7 +634,7 @@ void iosocket_use(io_desc *iod, mval *pp)
iosocket_flush(iod); /* buffered output if any */
if (bfsize_specified)
newsocket.buffer_size = bfsize;
-#ifdef TCP_NODELAY
+# ifdef TCP_NODELAY
if (socket_local != newsocket.protocol)
{
nodelay = newsocket.nodelay ? 1 : 0;
@@ -650,20 +644,19 @@ void iosocket_use(io_desc *iod, mval *pp)
{
save_errno = errno;
errptr = (char *)STRERROR(save_errno);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_SETSOCKOPTERR, 5, LEN_AND_LIT("TCP_NODELAY"),
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_SETSOCKOPTERR, 5, LEN_AND_LIT("TCP_NODELAY"),
save_errno, LEN_AND_STR(errptr));
return;
}
}
-#endif
- if ((socketptr->bufsiz != newsocket.bufsiz) &&
- (-1 == setsockopt(newsocket.sd, SOL_SOCKET,
- SO_RCVBUF, &newsocket.bufsiz, SIZEOF(newsocket.bufsiz))))
+# endif
+ if ((socketptr->bufsiz != newsocket.bufsiz)
+ && (-1 == setsockopt(newsocket.sd, SOL_SOCKET, SO_RCVBUF, &newsocket.bufsiz, SIZEOF(newsocket.bufsiz))))
{
save_errno = errno;
errptr = (char *)STRERROR(save_errno);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_SETSOCKOPTERR, 5, LEN_AND_LIT("SO_RCVBUF"), save_errno,
- LEN_AND_STR(errptr));
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_SETSOCKOPTERR, 5, LEN_AND_LIT("SO_RCVBUF"), save_errno,
+ LEN_AND_STR(errptr));
return;
}
if (socketptr->buffer_size != newsocket.buffer_size)
@@ -679,24 +672,24 @@ void iosocket_use(io_desc *iod, mval *pp)
}
}
}
- /* -------------------------------------- action -------------------------------------------- */
+ /* -------------------------------------- action -------------------------------------------- */
if ((listen_specified && ((!iosocket_bind(&newsocket, NO_M_TIMEOUT, ibfsize_specified, FALSE))
|| (!iosocket_listen_sock(&newsocket, DEFAULT_LISTEN_DEPTH))))
|| (connect_specified && (!iosocket_connect(&newsocket, 0, ibfsize_specified))))
- { /* error message should be printed from bind/connect */
- if (socketptr->sd > 0)
- (void)close(socketptr->sd);
+ { /* error message should be printed from bind/connect */
+ if (socketptr->sd > 0)
+ (void)close(socketptr->sd);
SOCKET_FREE(socketptr);
REVERT_GTMIO_CH(&iod->pair, ch_set);
- return;
- }
+ return;
+ }
/* ------------------------------------ commit changes -------------------------------------- */
if (create_new_socket)
{
/* a new socket is created. so add to the list */
newsocket.dev = dsocketptr;
- newdsocket->socket[newdsocket->n_socket++] = socketptr;
- newdsocket->current_socket = newdsocket->n_socket - 1;
+ newdsocket->socket[newdsocket->n_socket++] = socketptr;
+ newdsocket->current_socket = newdsocket->n_socket - 1;
}
else
{
diff --git a/sr_port/iosocket_write.c b/sr_port/iosocket_write.c
index 4d57483..91d32be 100644
--- a/sr_port/iosocket_write.c
+++ b/sr_port/iosocket_write.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -16,7 +16,7 @@
#include <errno.h>
#ifdef USE_POLL
-#include <poll.h>
+#include "gtm_poll.h"
#else
#include "gtm_select.h"
#endif
@@ -131,20 +131,15 @@ void iosocket_buffer_error(socket_struct *socketptr)
if (socketptr->tlsenabled)
{
iod->dollar.za = 9;
- memcpy(iod->dollar.device, ONE_COMMA, SIZEOF(ONE_COMMA));
if (-1 == socketptr->obuffer_errno)
errptr = gtm_tls_get_error();
else
errptr = (char *)STRERROR(socketptr->obuffer_errno);
- errlen = STRLEN(errptr);
- devlen = MIN((SIZEOF(iod->dollar.device) - SIZEOF(ONE_COMMA)), errlen);
- memcpy(&iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errptr);
socketptr->obuffer_errno = 0;
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_TLSIOERROR, 2, LEN_AND_LIT("send"),
- ERR_TEXT, 2, errlen, errptr);
+ ERR_TEXT, 2, STRLEN(errptr), errptr);
} else
# endif
{
diff --git a/sr_port/iosocketdef.h b/sr_port/iosocketdef.h
index dcc5635..0ecc156 100755
--- a/sr_port/iosocketdef.h
+++ b/sr_port/iosocketdef.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -22,11 +22,9 @@
#include <sys/types.h>
#include "gtm_inet.h"
#include "gtm_netdb.h"
-#ifndef VMS
#include "gtm_un.h"
-#endif
+#include "min_max.h"
#include "gtm_socket.h" /* for using sockaddr_storage */
-
#ifndef GTM_MB_LEN_MAX
#include "gtm_utf8.h"
#endif
@@ -37,13 +35,11 @@
#define TCP_WRITE 1
#define TCP_READ 2
-#ifndef VMS
typedef struct
{
- uid_t mem;
- gid_t grp;
+ uid_t mem;
+ gid_t grp;
} uic_struct_int;
-#endif
/* Debugging notes: Some debuging calls as as below. Note that DBGSOCK2 is *always* disabled.
* disabled. As parts of the code work, the DBGSOCK calls are changed to DBGSOCK2 to get
@@ -94,30 +90,26 @@ typedef struct
/* For buffered output, wait this long for socket to be ready to output */
#define DEFAULT_WRITE_WAIT 200
-#define ONE_COMMA "1,"
-
-#define SOCKERROR(iod, socketptr, gtmerror, syserror) \
-{ \
- int errlen; \
- char *errptr; \
- iod->dollar.za = 9; \
- memcpy(iod->dollar.device, ONE_COMMA, SIZEOF(ONE_COMMA)); \
- errptr = (char *)STRERROR(syserror); \
- errlen = STRLEN(errptr); \
- memcpy(&iod->dollar.device[SIZEOF(ONE_COMMA) - 1], errptr, errlen + 1); /* + 1 for null */ \
- assert(ERR_SOCKWRITE == gtmerror); \
- UNIX_ONLY(if (iod == io_std_device.out) \
- { \
- if (!prin_out_dev_failure) \
- prin_out_dev_failure = TRUE; \
- else \
- { \
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NOPRINCIO); \
- stop_image_no_core(); \
- } \
- }) \
- if (socketptr->ioerror) \
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) gtmerror, 0, ERR_TEXT, 2, errlen, errptr); \
+#define SOCKERROR(iod, socketptr, gtmerror, syserror) \
+{ \
+ int errlen; \
+ char *errptr; \
+ iod->dollar.za = 9; \
+ errptr = (char *)STRERROR(syserror); \
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errptr); \
+ assert(ERR_SOCKWRITE == gtmerror); \
+ if (iod == io_std_device.out) \
+ { \
+ if (!prin_out_dev_failure) \
+ prin_out_dev_failure = TRUE; \
+ else \
+ { \
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NOPRINCIO); \
+ stop_image_no_core(); \
+ } \
+ } \
+ if (socketptr->ioerror) \
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) gtmerror, 0, ERR_TEXT, 2, STRLEN(errptr), errptr); \
}
#define SOCKET_ALLOC(SOCKPTR) \
@@ -226,7 +218,6 @@ typedef struct
iosocket_delimiter_copy(SOCKPTR, NEWSOCKPTR); \
}
-#ifndef VMS
enum socket_pass_type
{
sockpass_new,
@@ -255,10 +246,6 @@ enum socket_pass_type
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(2) ERR_SOCKPASSDATAMIX, 0); \
} \
}
-#else
-#define ENSURE_DATA_SOCKET(SOCKPTR)
-#define ENSURE_PASS_SOCKET(SOCKPTR)
-#endif
enum socket_state
{
@@ -335,12 +322,10 @@ typedef struct socket_struct_type
boolean_t first_read;
boolean_t first_write;
boolean_t def_moreread_timeout; /* true if deviceparameter morereadtime defined in open or use */
-#ifndef VMS
enum socket_pass_type passtype; /* prevent mix of data and socket passing on LOCAL sockets */
uint filemode; /* for LOCAL */
uint filemode_mask; /* to tell which modes specified */
uic_struct_int uic;
-#endif
mstr zff;
mstr ozff; /* UTF-16 if chset is UTF-16 else copy of zff */
uint4 lastaction; /* waitcycle count */
diff --git a/sr_port/jmp_opto.c b/sr_port/jmp_opto.c
index 6ca8b3f..fc69a2a 100755
--- a/sr_port/jmp_opto.c
+++ b/sr_port/jmp_opto.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -139,7 +140,7 @@ LITDEF readonly jump_opto_struct jump_opto_table[NUM_JO_TBL_ELE] =
JOPT_NO_OPT /* RET */
}
},
- { OC_HALT, /* opcode */
+ { OC_ZHALT, /* opcode */
9, /* index */
{
JOPT_NO_OPT, /* OC_JMP */ JOPT_NO_OPT, /* OC_JMPTSET */
@@ -320,7 +321,7 @@ void jmp_opto(void)
i = NO_ENTRY;
break;
default:
- GTMASSERT;
+ assertpro(FALSE && p[i]);
break;
} /* switch */
} /* while */
diff --git a/sr_port/jnl.h b/sr_port/jnl.h
index c54fe26..1d23521 100644
--- a/sr_port/jnl.h
+++ b/sr_port/jnl.h
@@ -1365,16 +1365,17 @@ MBSTART { \
#define FINISH_JNL_PHASE2_IN_JNLPOOL_IF_NEEDED(REPLICATION, JNLPOOL) \
MBSTART { \
- if (REPLICATION && JNLPOOL.jrs.tot_jrec_len) \
+ if (REPLICATION && JNLPOOL->jrs.tot_jrec_len) \
{ \
JPL_PHASE2_WRITE_COMPLETE(JNLPOOL); /* Mark jnl record writing into jnlpool as complete */ \
- assert(0 == JNLPOOL.jrs.tot_jrec_len); \
+ assert(0 == JNLPOOL->jrs.tot_jrec_len); \
} \
} MBEND
#define NONTP_FINISH_JNL_PHASE2_IN_JNLBUFF_AND_JNLPOOL(CSA, JRS, REPLICATION, JNLPOOL) \
MBSTART { \
FINISH_JNL_PHASE2_IN_JNLBUFF(CSA, JRS); /* Step CMT16 (if BG), Step CMT06a (if MM) */ \
+ assert(!REPLICATION || (!csa->jnlpool || (csa->jnlpool == JNLPOOL))); \
FINISH_JNL_PHASE2_IN_JNLPOOL_IF_NEEDED(REPLICATION, JNLPOOL); /* Step CMT17 (if BG), Step CMT06b (if MM) */ \
} MBEND
@@ -1389,10 +1390,11 @@ MBSTART { \
assert(si->update_trans); \
jrs = si->jbuf_rsrv_ptr; \
assert(JNL_ALLOWED(csa)); \
+ assert(!REPLICATION || (!csa->jnlpool || (csa->jnlpool == JNLPOOL))); \
if (NEED_TO_FINISH_JNL_PHASE2(jrs)) \
- FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Step CMT16 (if BG), Step CMT06a (if MM) */ \
+ FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Step CMT16 (if BG) */ \
} \
- FINISH_JNL_PHASE2_IN_JNLPOOL_IF_NEEDED(replication, jnlpool); /* Step CMT17 (if BG), Step CMT06b (if MM) */ \
+ FINISH_JNL_PHASE2_IN_JNLPOOL_IF_NEEDED(replication, JNLPOOL); /* Step CMT17 (if BG) */ \
} MBEND
/* BEGIN : Structures used by "jnl_write_reserve" */
@@ -1688,11 +1690,13 @@ MBSTART { \
}
/* Macro that checks that the region seqno in the filehdr is never more than the seqno in the journal pool */
-#define ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csd, jnlpool_ctl) \
-{ /* The seqno in the file header should be at most 1 greater than that in the journal pool. \
- * See step (5) of of commit logic flow in secshr_db_clnup.c for why. Assert that. \
- */ \
- assert((NULL == jnlpool_ctl) || (csd->reg_seqno <= (jnlpool_ctl->jnl_seqno + 1))); \
+#define ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(CSA, JNLPOOL) \
+{ /* The seqno in the file header should be at most 1 greater than that in the journal pool. \
+ * See step (5) of of commit logic flow in secshr_db_clnup.c for why. Assert that. \
+ * If CSA->jnlpool is NULL it means there have been no updates to the region so no jnlpool is attached. \
+ */ \
+ assert((!CSA->jnlpool || !JNLPOOL || !JNLPOOL->jnlpool_ctl) \
+ || (CSA->hdr->reg_seqno <= (JNLPOOL->jnlpool_ctl->jnl_seqno + 1))); \
}
/* Given the record size, construct an IV to be used for a subsequent encryption or decryption operation. Currently, the maximum IV
* length our encryption plug-in supports is 16 bytes, and we only have three bytes of information suitable for an IV at the
diff --git a/sr_port/jnl_file_lost.c b/sr_port/jnl_file_lost.c
index 8511aa4..757d993 100644
--- a/sr_port/jnl_file_lost.c
+++ b/sr_port/jnl_file_lost.c
@@ -27,11 +27,10 @@
#include "gtmsource.h"
#include "anticipatory_freeze.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gd_region *gv_cur_region;
GBLREF volatile boolean_t in_wcs_recover;
GBLREF int process_exiting;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
error_def(ERR_JNLCLOSED);
error_def(ERR_REPLJNLCLOSED);
@@ -40,17 +39,22 @@ uint4 jnl_file_lost(jnl_private_control *jpc, uint4 jnl_stat)
{ /* Notify operator and terminate journaling */
unsigned int status;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t save_jnlpool;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INST_FREEZE_ON_MSG_ENABLED */
seq_num reg_seqno, jnlseqno;
boolean_t was_lockid = FALSE, instfreeze_environ;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
+ save_jnlpool = jnlpool;
switch(jpc->region->dyn.addr->acc_meth)
{
case dba_mm:
case dba_bg:
csa = &FILE_INFO(jpc->region)->s_addrs;
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ jnlpool = csa->jnlpool;
break;
default:
assertpro(FALSE && jpc->region->dyn.addr->acc_meth);
@@ -62,12 +66,14 @@ uint4 jnl_file_lost(jnl_private_control *jpc, uint4 jnl_stat)
* 2) The process has the given message set in $gtm_custom_errors (indicative of instance freeze on error setup)
* in which case the goal is to never shut-off journaling
*/
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
- instfreeze_environ = INST_FREEZE_ON_MSG_ENABLED(csa, jnl_stat);
+ assert((NULL == jnlpool) || (NULL != jnlpool->jnlpool_ctl));
+ instfreeze_environ = INST_FREEZE_ON_MSG_ENABLED(csa, jnl_stat, local_jnlpool);
if ((JNL_FILE_LOST_ERRORS == TREF(error_on_jnl_file_lost)) || instfreeze_environ)
{
if (!process_exiting || instfreeze_environ || !csa->jnl->error_reported)
{
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
csa->jnl->error_reported = TRUE;
in_wcs_recover = FALSE; /* in case we're called in wcs_recover() */
if (SS_NORMAL != jpc->status)
@@ -77,6 +83,8 @@ uint4 jnl_file_lost(jnl_private_control *jpc, uint4 jnl_stat)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(6) jnl_stat, 4, JNL_LEN_STR(csa->hdr),
DB_LEN_STR(gv_cur_region));
}
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return jnl_stat;
}
if (0 != jnl_stat)
@@ -88,11 +96,13 @@ uint4 jnl_file_lost(jnl_private_control *jpc, uint4 jnl_stat)
{
csa->hdr->repl_state = repl_was_open;
reg_seqno = csa->hdr->reg_seqno;
- jnlseqno = (NULL != jnlpool.jnlpool_ctl) ? jnlpool.jnlpool_ctl->jnl_seqno : MAX_SEQNO;
+ jnlseqno = (jnlpool && jnlpool->jnlpool_ctl) ? jnlpool->jnlpool_ctl->jnl_seqno : MAX_SEQNO;
send_msg_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_REPLJNLCLOSED, 6, DB_LEN_STR(jpc->region), ®_seqno, ®_seqno,
&jnlseqno, &jnlseqno);
} else
send_msg_csa(CSA_ARG(csa) VARLSTCNT(5) ERR_JNLCLOSED, 3, DB_LEN_STR(jpc->region), &csa->ti->curr_tn);
jnl_file_close(jpc->region, FALSE, TRUE);
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return EXIT_NRM;
}
diff --git a/sr_port/jnl_file_open_common.c b/sr_port/jnl_file_open_common.c
index 187e122..29da5a3 100644
--- a/sr_port/jnl_file_open_common.c
+++ b/sr_port/jnl_file_open_common.c
@@ -45,8 +45,7 @@
#include "get_fs_block_size.h"
#include "anticipatory_freeze.h"
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
GBLREF jnl_process_vector *prc_vec;
GBLREF jnl_gbls_t jgbl;
GBLREF uint4 mu_reorg_encrypt_in_prog;
diff --git a/sr_port/jnl_pool_write.c b/sr_port/jnl_pool_write.c
index 65511a4..978bde3 100644
--- a/sr_port/jnl_pool_write.c
+++ b/sr_port/jnl_pool_write.c
@@ -35,8 +35,7 @@
#include "copy.h"
#include "sleep.h"
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
GBLREF boolean_t is_replicator;
@@ -54,6 +53,7 @@ void jnl_pool_write(sgmnt_addrs *csa, enum jnl_record_type rectype, jnl_record *
uint4 dstlen, rlen;
uint4 jnlpool_size, tot_jrec_len;
uchar_ptr_t jnlrecptr;
+ jnlpool_addrs_ptr_t local_jnlpool;
jnlpool_ctl_ptr_t jctl;
jpl_rsrv_struct_t *jrs;
uint4 write, write_total;
@@ -61,13 +61,15 @@ void jnl_pool_write(sgmnt_addrs *csa, enum jnl_record_type rectype, jnl_record *
gtm_int64_t wait_write_addr; /* needed signed because of subtraction happening below */
assert(is_replicator);
+ assert(NULL != csa);
+ local_jnlpool = JNLPOOL_FROM(csa);
+ assert(NULL != local_jnlpool);
assert(NULL != jnl_rec);
assert(IS_VALID_RECTYPES_RANGE(rectype) && IS_REPLICATED(rectype));
assert(JNL_ENABLED(csa) || REPL_WAS_ENABLED(csa));
- jctl = jnlpool.jnlpool_ctl;
- assert(jctl == jnlpool_ctl);
+ jctl = local_jnlpool->jnlpool_ctl;
assert(NULL != jctl); /* ensure we haven't yet detached from the jnlpool */
- jrs = &jnlpool.jrs;
+ jrs = &local_jnlpool->jrs;
jnlpool_size = jctl->jnlpool_size;
tot_jrec_len = jrs->tot_jrec_len;
DEBUG_ONLY(jgbl.cu_jnl_index++;)
@@ -129,7 +131,7 @@ void jnl_pool_write(sgmnt_addrs *csa, enum jnl_record_type rectype, jnl_record *
* calls by concurrent processes at same time. If we see a lot of the "jnl_pool_write_sleep"
* counter value then this will become a priority. For now we expect that counter to be ~ 0.
*/
- repl_phase2_cleanup(&jnlpool);
+ repl_phase2_cleanup(local_jnlpool);
}
/* If the database is encrypted, then at this point jfb->buff will contain encrypted
* data which we don't want to to push into the jnlpool. Instead, we make use of the
@@ -146,11 +148,11 @@ void jnl_pool_write(sgmnt_addrs *csa, enum jnl_record_type rectype, jnl_record *
assert(rlen < jnlpool_size); /* Because of "if (tot_jrec_len <= jnlpool_size)" above */
/* Inspite of the above assert, do a "rlen < jnlpool_size" check below in pro to be safe */
if (rlen <= dstlen) /* dstlen & srclen >= rlen (most frequent case) */
- memcpy(jnlpool.jnldata_base + write, jnlrecptr, rlen);
+ memcpy(local_jnlpool->jnldata_base + write, jnlrecptr, rlen);
else if (rlen < jnlpool_size) /* dstlen < rlen <= jnlpool_size */
{
- memcpy(jnlpool.jnldata_base + write, jnlrecptr, dstlen);
- memcpy(jnlpool.jnldata_base, jnlrecptr + dstlen, rlen - dstlen);
+ memcpy(local_jnlpool->jnldata_base + write, jnlrecptr, dstlen);
+ memcpy(local_jnlpool->jnldata_base, jnlrecptr + dstlen, rlen - dstlen);
}
} else
jrs->memcpy_skipped = TRUE;
diff --git a/sr_port/jnl_send_oper.c b/sr_port/jnl_send_oper.c
index 0150d1e..52855d3 100755
--- a/sr_port/jnl_send_oper.c
+++ b/sr_port/jnl_send_oper.c
@@ -27,8 +27,8 @@
#define ENOSPC_LOGGING_PERIOD 100 /* every 100th ENOSPC error is logged to avoid flooding the operator log */
-GBLREF bool caller_id_flag;
-GBLREF uint4 process_id;
+GBLREF boolean_t caller_id_flag;
+GBLREF uint4 process_id;
error_def(ERR_CALLERID);
error_def(ERR_JNLBUFINFO);
diff --git a/sr_port/jnl_set_cur_prior.c b/sr_port/jnl_set_cur_prior.c
index 7b51e62..072846e 100644
--- a/sr_port/jnl_set_cur_prior.c
+++ b/sr_port/jnl_set_cur_prior.c
@@ -65,7 +65,7 @@ void jnl_set_fd_prior(int jnl_fd, sgmnt_addrs* csa, sgmnt_data* csd, jnl_file_he
if ((NULL != jfh_checked) && is_file_identical((char *)csa->region->dyn.addr->fname, (char *)jfh_checked->data_file_name))
{
jfh_checked->is_not_latest_jnl = TRUE;
- JNL_DO_FILE_WRITE(csa, csd->jnl_file_name, jnl_fd, 0, jfh_checked, get_fs_block_size(jnl_fd), status1, status2);
+ JNL_DO_FILE_WRITE(csa, csd->jnl_file_name, jnl_fd, 0, jfh_checked, REAL_JNL_HDR_LEN, status1, status2);
assert(SS_NORMAL == status1);
}
JNL_FD_CLOSE(jnl_fd, status1);
diff --git a/sr_port/jnl_write.c b/sr_port/jnl_write.c
index b31b38c..00b58a4 100644
--- a/sr_port/jnl_write.c
+++ b/sr_port/jnl_write.c
@@ -49,6 +49,7 @@
#endif
GBLREF uint4 process_id;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_src_server;
GBLREF boolean_t in_jnl_file_autoswitch;
GBLREF uint4 dollar_tlevel;
diff --git a/sr_port/jnl_write_attempt.c b/sr_port/jnl_write_attempt.c
index 9bcd652..d9cf324 100644
--- a/sr_port/jnl_write_attempt.c
+++ b/sr_port/jnl_write_attempt.c
@@ -43,9 +43,9 @@
#define ITERATIONS_100K 100000
-GBLREF jnlpool_addrs jnlpool;
-GBLREF uint4 process_id;
-GBLREF uint4 image_count;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF uint4 process_id;
+GBLREF uint4 image_count;
error_def(ERR_JNLACCESS);
error_def(ERR_JNLCNTRL);
@@ -173,6 +173,7 @@ uint4 jnl_write_attempt(jnl_private_control *jpc, uint4 threshold)
uint4 prev_freeaddr;
unsigned int lcnt, prev_lcnt, cnt;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t save_jnlpool;
unsigned int status;
boolean_t was_crit, jnlfile_lost, exact_check;
DCL_THREADGBL_ACCESS;
@@ -180,6 +181,9 @@ uint4 jnl_write_attempt(jnl_private_control *jpc, uint4 threshold)
SETUP_THREADGBL_ACCESS;
jb = jpc->jnl_buff;
csa = &FILE_INFO(jpc->region)->s_addrs;
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (csa->jnlpool != jnlpool))
+ jnlpool = csa->jnlpool;
was_crit = csa->now_crit;
/* If holding crit and input threshold matches jb->rsrv_freeaddr, then we need to wait in the loop as long as dskaddr
@@ -236,6 +240,8 @@ uint4 jnl_write_attempt(jnl_private_control *jpc, uint4 threshold)
* turned OFF (due to disk space issues etc.)
*/
jpc->status = SS_NORMAL;
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return SS_NORMAL;
}
if (SS_NORMAL == status)
@@ -281,14 +287,21 @@ uint4 jnl_write_attempt(jnl_private_control *jpc, uint4 threshold)
if (!jnlfile_lost)
continue;
else
+ {
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return status;
+ }
}
- if ((ERR_JNLWRTDEFER == status) && IS_REPL_INST_FROZEN)
- { /* Check if the write was deferred because the instance is frozen.
- * In that case, wait until the freeze is lifted instead of wasting time spinning on the latch
- * in jnl_qio.
- */
- WAIT_FOR_REPL_INST_UNFREEZE(csa);
+ if (ERR_JNLWRTDEFER == status)
+ {
+ if (DBG_ASSERT(!csa->jnlpool || (csa->jnlpool == jnlpool)) IS_REPL_INST_FROZEN_JPL(csa->jnlpool))
+ { /* Check if the write was deferred because the instance is frozen.
+ * In that case, wait until the freeze is lifted instead of wasting time spinning on the latch
+ * in jnl_qio.
+ */
+ WAIT_FOR_REPL_INST_UNFREEZE(csa);
+ }
}
if ((ERR_JNLWRTDEFER != status) && (ERR_JNLWRTNOWWRTR != status) && (ERR_JNLPROCSTUCK != status))
{ /* If holding crit, then jnl_sub_write_attempt would have invoked jnl_file_lost which would have
@@ -314,5 +327,7 @@ uint4 jnl_write_attempt(jnl_private_control *jpc, uint4 threshold)
}
}
}
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return SS_NORMAL;
}
diff --git a/sr_port/jnl_write_eof_rec.c b/sr_port/jnl_write_eof_rec.c
index 750558c..4007ca5 100644
--- a/sr_port/jnl_write_eof_rec.c
+++ b/sr_port/jnl_write_eof_rec.c
@@ -28,12 +28,13 @@
#include "gtmsource.h"
#include "jnl_get_checksum.h"
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
void jnl_write_eof_rec(sgmnt_addrs *csa, struct_jrec_eof *eof_record)
{
jnl_private_control *jpc;
+ jnlpool_addrs_ptr_t save_jnlpool;
assert(!IN_PHASE2_JNL_COMMIT(csa));
jpc = csa->jnl;
@@ -49,7 +50,10 @@ void jnl_write_eof_rec(sgmnt_addrs *csa, struct_jrec_eof *eof_record)
/* At this point jgbl.gbl_jrec_time should be set by the caller */
assert(jgbl.gbl_jrec_time);
eof_record->prefix.time = jgbl.gbl_jrec_time;
- ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csa->hdr, jnlpool_ctl); /* debug-only sanity check between seqno of filehdr and jnlpool */
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (csa->jnlpool == jnlpool))
+ jnlpool = csa->jnlpool;
+ ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csa, jnlpool); /* debug-only sanity check between seqno of csa->hdr and jnlpool */
/* In UNIX, mur_close_files, at the beginning sets both jgbl.mur_jrec_seqno and csa->hdr->reg_seqno to
* murgbl.consist_jnl_seqno. Assert that this is indeed the case. However, csa->hdr->reg_seqno is NOT
* maintained by rollback during forward phase of recovery and is set only at mur_close_files whereas
@@ -73,4 +77,6 @@ void jnl_write_eof_rec(sgmnt_addrs *csa, struct_jrec_eof *eof_record)
eof_record->filler = 0;
eof_record->prefix.checksum = compute_checksum(INIT_CHECKSUM_SEED, (unsigned char *)eof_record, SIZEOF(struct_jrec_eof));
jnl_write(jpc, JRT_EOF, (jnl_record *)eof_record, NULL);
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
}
diff --git a/sr_port/jnl_write_epoch_rec.c b/sr_port/jnl_write_epoch_rec.c
index 053a4cd..c8d3aca 100644
--- a/sr_port/jnl_write_epoch_rec.c
+++ b/sr_port/jnl_write_epoch_rec.c
@@ -34,8 +34,8 @@
#include "jnl_get_checksum.h"
#include "anticipatory_freeze.h"
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
GBLREF seq_num seq_num_zero;
GBLREF int4 strm_index;
@@ -47,6 +47,7 @@ void jnl_write_epoch_rec(sgmnt_addrs *csa)
jnl_buffer_ptr_t jb;
jnl_private_control *jpc;
jnl_file_header *header;
+ jnlpool_addrs_ptr_t save_jnlpool;
unsigned char hdr_base[REAL_JNL_HDR_LEN + MAX_IO_BLOCK_SIZE];
sgmnt_data_ptr_t csd;
uint4 jnl_fs_block_size, read_write_size;
@@ -54,6 +55,9 @@ void jnl_write_epoch_rec(sgmnt_addrs *csa)
assert(!IN_PHASE2_JNL_COMMIT(csa));
jpc = csa->jnl;
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (csa->jnlpool != jnlpool))
+ jnlpool = csa->jnlpool;
jb = jpc->jnl_buff;
assert((csa->ti->early_tn == csa->ti->curr_tn) || (csa->ti->early_tn == csa->ti->curr_tn + 1));
assert(0 != jpc->pini_addr);
@@ -76,7 +80,7 @@ void jnl_write_epoch_rec(sgmnt_addrs *csa)
/* we need to write epochs if jgbl.forw_phase_recovery so future recovers will have a closer turnaround point */
jb->next_epoch_time = epoch_record.prefix.time + jb->epoch_interval;
epoch_record.prefix.checksum = INIT_CHECKSUM_SEED;
- ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csd, jnlpool_ctl); /* debug-only sanity check between seqno of filehdr and jnlpool */
+ ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csa, jnlpool); /* debug-only sanity check between seqno of csa->hdr and jnlpool */
if (jgbl.forw_phase_recovery)
{ /* Set jnl-seqno of epoch record from the current seqno that rollback is playing. Note that in case of -recover
* we don't actually care what seqnos get assigned to the epoch record so we go ahead and set it to the same
@@ -151,4 +155,6 @@ void jnl_write_epoch_rec(sgmnt_addrs *csa)
(unsigned char *)&epoch_record, SIZEOF(struct_jrec_epoch));
jnl_write(jpc, JRT_EPOCH, (jnl_record *)&epoch_record, NULL);
jb->post_epoch_freeaddr = jb->rsrv_freeaddr;
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
}
diff --git a/sr_port/jnl_write_inctn_rec.c b/sr_port/jnl_write_inctn_rec.c
index e2b1d5a..4458252 100644
--- a/sr_port/jnl_write_inctn_rec.c
+++ b/sr_port/jnl_write_inctn_rec.c
@@ -28,7 +28,6 @@
#include "gtmsource.h"
#include "jnl_get_checksum.h"
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
GBLREF jnl_gbls_t jgbl;
GBLREF inctn_opcode_t inctn_opcode;
GBLREF inctn_detail_t inctn_detail; /* holds detail to fill in to inctn jnl record */
diff --git a/sr_port/jnl_write_pblk.c b/sr_port/jnl_write_pblk.c
index 53f454a..5e2eb9d 100644
--- a/sr_port/jnl_write_pblk.c
+++ b/sr_port/jnl_write_pblk.c
@@ -71,7 +71,7 @@ void jnl_write_pblk(sgmnt_addrs *csa, cw_set_element *cse, uint4 com_csum)
DBG_ENSURE_PTR_IS_VALID_ENCTWINGLOBUFF(csa, csd, (sm_uc_ptr_t)old_block);
}
jpc = csa->jnl;
- assert(0 != jpc->pini_addr);
+ assert((0 != jpc->pini_addr) || ((!JNL_ENABLED(csd)) && (JNL_ENABLED(csa))));
pblk_record.prefix.jrec_type = JRT_PBLK;
pblk_record.prefix.pini_addr = (0 == jpc->pini_addr) ? JNL_HDR_LEN : jpc->pini_addr;
pblk_record.prefix.tn = JB_CURR_TN_APPROPRIATE(TRUE, jpc, csa);
diff --git a/sr_port/line.c b/sr_port/line.c
index 31d48f2..732fcd5 100755
--- a/sr_port/line.c
+++ b/sr_port/line.c
@@ -198,6 +198,8 @@ boolean_t line(uint4 *lnc)
dot_count = TREF(block_level);
show_source_line(TRUE);
dec_err(VARLSTCNT(1) ERR_BLKTOODEEP);
+ TREF(source_error_found) = TRUE;
+ success = FALSE;
}
}
if ((TREF(block_level) < dot_count) || (mline_tail == &mline_root))
diff --git a/sr_port/lke.hlp b/sr_port/lke.hlp
index e57a822..3344534 100755
--- a/sr_port/lke.hlp
+++ b/sr_port/lke.hlp
@@ -577,7 +577,7 @@
**Note**
- This help file is a concise representation of revision V6.3-001 of the
+ This help file is a concise representation of revision V6.3-003 of the
UNIX Administration and Operations Guide. To obtain a copy of the current
revision, go to www.fis-gtm.com and then click on the User Documentation
tab.
diff --git a/sr_port/lke_cleartree.c b/sr_port/lke_cleartree.c
index 96f8d71..408035a 100755
--- a/sr_port/lke_cleartree.c
+++ b/sr_port/lke_cleartree.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2008 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -18,7 +19,7 @@
#include "mdef.h"
-#include <signal.h>
+#include "gtm_signal.h"
#include "mlkdef.h"
#include "gdsroot.h"
@@ -27,6 +28,7 @@
#include "fileinfo.h"
#include "gdsbt.h"
#include "gdsfhead.h"
+#include "filestruct.h"
#include "mlk_shrblk_delete_if_empty.h"
#include "mlk_wake_pending.h"
#include "lke.h"
@@ -37,6 +39,10 @@
GBLREF VSIG_ATOMIC_T util_interrupt;
+error_def(ERR_CTRLC);
+
+mlk_shrblk_ptr_t mlk_shrblk_sort(mlk_shrblk_ptr_t head);
+
bool lke_cleartree(
gd_region *region,
struct CLB *lnk,
@@ -56,10 +62,8 @@ bool lke_cleartree(
int depth = 0;
bool locks = FALSE, locked, deleted;
- error_def(ERR_CTRLC);
-
node = start[0]
- = tree;
+ = mlk_shrblk_sort(tree);
subscript_offset[0] = 0;
for (;;)
@@ -109,10 +113,10 @@ bool lke_cleartree(
/* This node has children, so move down */
++depth;
node = start[depth]
- = (mlk_shrblk_ptr_t)R2A(node->children);
+ = mlk_shrblk_sort((mlk_shrblk_ptr_t)R2A(node->children));
subscript_offset[depth] = name.len;
}
if (util_interrupt)
- rts_error(VARLSTCNT(1) ERR_CTRLC);
+ rts_error_csa(CSA_ARG(REG2CSA(region)) VARLSTCNT(1) ERR_CTRLC);
}
}
diff --git a/sr_port/lke_show.c b/sr_port/lke_show.c
index f3b5ae2..f3fb46e 100755
--- a/sr_port/lke_show.c
+++ b/sr_port/lke_show.c
@@ -131,17 +131,14 @@ void lke_show(void)
ls_free *= 100; /* Scale to [0-100] range. (couldn't do this inside util_out_print) */
if (ls_free < 1) /* No memory? Notify user. */
gtm_putmsg_csa(NULL, VARLSTCNT(4) ERR_LOCKSPACEFULL, 2, DB_LEN_STR(reg));
- if (ls_free < 1 || memory)
- {
- if (ctl->subtop > ctl->subfree)
- gtm_putmsg_csa(NULL, VARLSTCNT(10) ERR_LOCKSPACEINFO, 8, REG_LEN_STR(reg),
- (ctl->max_prccnt - ctl->prccnt), ctl->max_prccnt,
- (ctl->max_blkcnt - ctl->blkcnt), ctl->max_blkcnt, LEN_AND_LIT(" not "));
- else
- gtm_putmsg_csa(NULL, VARLSTCNT(10) ERR_LOCKSPACEINFO, 8, REG_LEN_STR(reg),
- (ctl->max_prccnt - ctl->prccnt), ctl->max_prccnt,
- (ctl->max_blkcnt - ctl->blkcnt), ctl->max_blkcnt, LEN_AND_LIT(" "));
- }
+ if (ctl->subtop > ctl->subfree)
+ gtm_putmsg_csa(NULL, VARLSTCNT(10) ERR_LOCKSPACEINFO, 8, REG_LEN_STR(reg),
+ (ctl->max_prccnt - ctl->prccnt), ctl->max_prccnt,
+ (ctl->max_blkcnt - ctl->blkcnt), ctl->max_blkcnt, LEN_AND_LIT(" not "));
+ else
+ gtm_putmsg_csa(NULL, VARLSTCNT(10) ERR_LOCKSPACEINFO, 8, REG_LEN_STR(reg),
+ (ctl->max_prccnt - ctl->prccnt), ctl->max_prccnt,
+ (ctl->max_blkcnt - ctl->blkcnt), ctl->max_blkcnt, LEN_AND_LIT(" "));
free(ctl);
} else
{
diff --git a/sr_port/lke_showtree.c b/sr_port/lke_showtree.c
index 665baa0..f548bda 100755
--- a/sr_port/lke_showtree.c
+++ b/sr_port/lke_showtree.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -19,8 +19,8 @@
#include "mdef.h"
-#include <signal.h>
#include <stddef.h>
+#include "gtm_signal.h"
#include "gtm_string.h"
#include "gtm_stdio.h"
@@ -34,6 +34,8 @@
GBLREF VSIG_ATOMIC_T util_interrupt;
error_def(ERR_CTRLC);
+mlk_shrblk_ptr_t mlk_shrblk_sort(mlk_shrblk_ptr_t head);
+
void lke_show_memory(mlk_shrblk_ptr_t bhead, char *prefix)
{
mlk_shrblk_ptr_t b, bnext;
@@ -83,7 +85,7 @@ bool lke_showtree(struct CLB *lnk,
return TRUE;
}
node = start[0]
- = tree;
+ = mlk_shrblk_sort(tree);
subscript_offset[0] = 0;
for (;;)
@@ -120,7 +122,7 @@ bool lke_showtree(struct CLB *lnk,
/* This node has children, so move down */
++depth;
node = start[depth]
- = (mlk_shrblk_ptr_t)R2A(node->children);
+ = mlk_shrblk_sort((mlk_shrblk_ptr_t)R2A(node->children));
subscript_offset[depth] = name.len;
}
if (util_interrupt)
diff --git a/sr_port/lvzwr_out.c b/sr_port/lvzwr_out.c
index 03029e6..27dac8e 100644
--- a/sr_port/lvzwr_out.c
+++ b/sr_port/lvzwr_out.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -49,16 +49,16 @@
#include "stack_frame.h"
#include "jobsp.h"
+GBLREF gd_region *gv_cur_region;
+GBLREF gv_namehead *gv_target;
+GBLREF gv_key *gv_currkey;
+GBLREF int merge_args;
GBLREF lvzwrite_datablk *lvzwrite_block;
-GBLREF zshow_out *zwr_output;
-GBLREF gv_namehead *gv_target;
-GBLREF gv_key *gv_currkey;
-GBLREF int merge_args;
-GBLREF merge_glvn_ptr mglvnp;
-GBLREF gd_region *gv_cur_region;
-GBLREF symval *curr_symval;
-GBLREF zwr_hash_table *zwrhtab; /* Used to track aliases during zwrites */
-GBLREF uint4 zwrtacindx; /* When creating $ZWRTACxxx vars for ZWRite, this holds xxx */
+GBLREF merge_glvn_ptr mglvnp;
+GBLREF symval *curr_symval;
+GBLREF uint4 zwrtacindx; /* When creating $ZWRTACxxx vars for ZWRite, this holds xxx */
+GBLREF zshow_out *zwr_output;
+GBLREF zwr_hash_table *zwrhtab; /* Used to track aliases during zwrites */
LITDEF MSTR_CONST(semi_star, " ;*");
LITDEF MSTR_CONST(dzwrtac_clean, "$ZWRTAC=\"\"");
@@ -72,15 +72,26 @@ void lvzwr_out_targkey(mstr *one);
void lvzwr_out_targkey(mstr *one)
{
int n, nsubs;
+# ifdef DEBUG
+ int4 length;
+# endif
zshow_output(zwr_output, lvzwrite_block->curr_name);
nsubs = lvzwrite_block->curr_subsc;
if (nsubs)
{
+ DEBUG_ONLY(length = 0;)
*one->addr = '(';
zshow_output(zwr_output, one);
for (n = 0 ; ; )
- {
+ { /* the following check protects against an apparent bug in the system service managing (at least) terminal
+ * output where it gets overwhelmed and hangs in __write_nocancel (cat does too, so it's not GT.M); because
+ * zwrite does a subscript at a time, this should not be necessary, however, the check is consistent with
+ * appropriate restrictions in op_putindx, op_fnname and op_fnquery
+ */
+ DEBUG_ONLY(MV_FORCE_STR(((zwr_sub_lst *)lvzwrite_block->sub)->subsc_list[n].actual);)
+ assert(MAX_STRLEN /* WARNING assignment below; check in op_putindx should assure this */
+ >= (length += ((zwr_sub_lst *)lvzwrite_block->sub)->subsc_list[n].actual->str.len));
mval_write(zwr_output, ((zwr_sub_lst *)lvzwrite_block->sub)->subsc_list[n].actual, FALSE);
if (++n < nsubs)
{
@@ -180,7 +191,7 @@ void lvzwr_out(lv_val *lvp)
{ /* Put out "dummy" statement that will clear all the $ZWRTAC vars for a clean slate */
zwr_output->flush = TRUE;
zshow_output(zwr_output, &dzwrtac_clean);
- UNIX_ONLY(MIDCHILD_SEND_VAR);
+ MIDCHILD_SEND_VAR;
}
MEMCPY_LIT(zwrt_varname.c, DOLLAR_ZWRTAC);
lastc = i2asc((uchar_ptr_t)zwrt_varname.c + STR_LIT_LEN(DOLLAR_ZWRTAC), zwrtacindx);
@@ -203,7 +214,7 @@ void lvzwr_out(lv_val *lvp)
zshow_output(zwr_output, &one);
zwr_output->flush = TRUE;
zshow_output(zwr_output, (const mstr *)&newzav->zwr_var);
- UNIX_ONLY(MIDCHILD_SEND_VAR);
+ MIDCHILD_SEND_VAR;
if (dump_container)
{ /* We want to dump the entire container variable but the name doesn't match the var we are
* currently dumping so push a new lvzwrite_block onto the stack, fill it in for the current var
diff --git a/sr_port/m_halt.c b/sr_port/m_halt.c
index 3524442..90be83c 100755
--- a/sr_port/m_halt.c
+++ b/sr_port/m_halt.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -17,10 +18,10 @@
int m_halt(void)
{
+ triple *triptr;
- oprtype x;
-
- newtriple(OC_HALT);
+ triptr = newtriple(OC_ZHALT);
+ triptr->operand[0] = put_ilit(0); /* flag as HALT rather than ZHALT */
+ triptr->operand[1] = put_ilit(0); /* return from HALT is always "success" */
return TRUE;
-
}
diff --git a/sr_port/m_zhalt.c b/sr_port/m_zhalt.c
index 4cae1fc..fbec426 100644
--- a/sr_port/m_zhalt.c
+++ b/sr_port/m_zhalt.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2011, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2011-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -17,29 +18,33 @@
#include "cmd.h"
#include "toktyp.h"
-LITREF mval literal_zero;
-
-/* Halt the process similar to op_halt but allow a return code to be specified. If no return code
- * is specified, return code 0 is used as a default (making it identical to op_halt).
+/* Halt the process similar to HALT but ZHALT allows specification of a return code. If the command does not specify a return
+ * code, this uses 0 as a default, so that case appears the same to the shell as HALT. However, they are subject to different
+ * potential restrictions, so they use a flag that separates the two.
*/
int m_zhalt(void)
{
triple *triptr;
- oprtype ot;
+ oprtype ot;
int status;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- /* Let m_halt() handle the case of the missing return code */
if ((TK_SPACE == TREF(window_token)) || (TK_EOL == TREF(window_token)))
- return m_halt();
- switch (status = expr(&ot, MUMPS_NUM)) /* NOTE assignment */
+ { /* no argument means return 0 */
+ triptr = newtriple(OC_ZHALT);
+ triptr->operand[0] = put_ilit(1);
+ triptr->operand[1] = put_ilit(0);
+ return TRUE;
+ }
+ switch (status = expr(&ot, MUMPS_INT)) /* NOTE assignment */
{
case EXPR_FAIL:
return FALSE;
case EXPR_GOOD:
triptr = newtriple(OC_ZHALT);
- triptr->operand[0] = ot;
+ triptr->operand[0] = put_ilit(1);
+ triptr->operand[1] = ot;
return TRUE;
case EXPR_INDR:
make_commarg(&ot, indir_zhalt);
diff --git a/sr_port/mdb_condition_handler.c b/sr_port/mdb_condition_handler.c
index 0791cf0..f547ee1 100644
--- a/sr_port/mdb_condition_handler.c
+++ b/sr_port/mdb_condition_handler.c
@@ -93,7 +93,7 @@
# include "gtm_trigger.h"
#endif
-GBLREF boolean_t ctrlc_on, created_core, dont_want_core, in_gvcst_incr, pool_init, run_time;
+GBLREF boolean_t ctrlc_on, created_core, dont_want_core, in_gvcst_incr, run_time;
GBLREF boolean_t ztrap_explicit_null; /* whether $ZTRAP was explicitly set to NULL in this frame */
GBLREF dollar_ecode_type dollar_ecode; /* structure containing $ECODE related information */
GBLREF dollar_stack_type dollar_stack;
@@ -101,13 +101,14 @@ GBLREF gd_region *gv_cur_region;
GBLREF gv_key *gv_currkey;
GBLREF gv_namehead *gv_target;
GBLREF inctn_opcode_t inctn_opcode;
-GBLREF int mumps_status;
+GBLREF int mumps_status, pool_init;
GBLREF int4 exi_condition;
GBLREF io_desc *active_device, *gtm_err_dev;
GBLREF io_pair io_std_device, io_curr_device;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF mstr *err_act;
-GBLREF mval *alias_retarg, dollar_etrap, dollar_zstatus, dollar_zerror, dollar_ztrap;
+GBLREF mval *alias_retarg, dollar_zstatus, dollar_zerror;
GBLREF mv_stent *mv_chain;
GBLREF sgm_info *first_sgm_info;
GBLREF sgmnt_addrs *cs_addrs;
@@ -266,6 +267,7 @@ CONDITION_HANDLER(mdb_condition_handler)
tp_region *tr;
gd_region *reg_top, *reg_save, *reg_local;
gd_addr *addr_ptr;
+ jnlpool_addrs_ptr_t local_jnlpool;
sgmnt_addrs *csa;
stack_frame *fp;
boolean_t error_in_zyerror;
@@ -603,26 +605,27 @@ CONDITION_HANDLER(mdb_condition_handler)
}
# ifdef UNIX
/* Release FTOK lock on the replication instance file if holding it (possible if error in jnlpool_init) */
- assert((NULL == jnlpool.jnlpool_dummy_reg) || jnlpool.jnlpool_dummy_reg->open || !pool_init);
- if ((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open)
- {
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
- assert(NULL != udi);
- if (NULL != udi)
+ for (local_jnlpool = jnlpool_head; local_jnlpool; local_jnlpool = local_jnlpool->next)
+ if ((NULL != local_jnlpool->jnlpool_dummy_reg) && local_jnlpool->jnlpool_dummy_reg->open)
{
- if (udi->grabbed_ftok_sem)
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, FALSE, FALSE);
- assert(!udi->grabbed_ftok_sem);
+ udi = FILE_INFO(local_jnlpool->jnlpool_dummy_reg);
+ assert(NULL != udi);
+ if (NULL != udi)
+ {
+ if (udi->grabbed_ftok_sem)
+ ftok_sem_release(local_jnlpool->jnlpool_dummy_reg, FALSE, FALSE);
+ assert(!udi->grabbed_ftok_sem);
+ }
}
- }
# endif
/* Release crit lock on journal pool if holding it */
- if (pool_init) /* atleast one region replicated and we have done jnlpool init */
- {
- csa = (sgmnt_addrs *)&FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
- if (csa && csa->now_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
- }
+ for (local_jnlpool = jnlpool_head; local_jnlpool; local_jnlpool = local_jnlpool->next)
+ if (local_jnlpool->pool_init)
+ {
+ csa = (sgmnt_addrs *)&FILE_INFO(local_jnlpool->jnlpool_dummy_reg)->s_addrs;
+ if (csa && csa->now_crit)
+ rel_lock(local_jnlpool->jnlpool_dummy_reg);
+ }
TREF(in_op_fnnext) = FALSE; /* in case we were in $NEXT */
/* Global values that may need cleanups */
if (INTRPT_OK_TO_INTERRUPT != intrpt_ok_state)
@@ -739,7 +742,7 @@ CONDITION_HANDLER(mdb_condition_handler)
* will be rethrown one level down as $ETRAP normally does. Note in case of a rethrow, we avoid resetting
* mpc/ctxt as those values are only appropriate for the level in which they were saved.
*/
- if (!repeat_error && ((0 != dollar_ztrap.str.len) || ztrap_explicit_null))
+ if (!repeat_error && ((0 != (TREF(dollar_ztrap)).str.len) || ztrap_explicit_null))
{ /* Verify not indirect or that context is unchanged before reset context */
assert(NULL != restart_pc);
assert((!(SFF_INDCE & frame_pointer->flags)) || (restart_ctxt == frame_pointer->ctxt));
@@ -766,11 +769,12 @@ CONDITION_HANDLER(mdb_condition_handler)
*/
goerrorframe(); /* unwind back to error_frame */
proc_act_type = 0;
- } else if ((0 != dollar_etrap.str.len) || (0 != dollar_ztrap.str.len))
+ } else if ((0 != (TREF(dollar_etrap)).str.len) || (0 != (TREF(dollar_ztrap)).str.len))
{
assert(!ztrap_explicit_null);
proc_act_type = SFT_ZTRAP;
- err_act = (0 != dollar_etrap.str.len) ? &dollar_etrap.str : &dollar_ztrap.str;
+ err_act = (0 != (TREF(dollar_etrap)).str.len)
+ ? &((TREF(dollar_etrap)).str) : &((TREF(dollar_ztrap)).str);
} else
{ /* Either $ETRAP is empty-string or ztrap_explicit_null is set
*
@@ -785,7 +789,7 @@ CONDITION_HANDLER(mdb_condition_handler)
etrap_handling = TRUE;
if (ztrap_explicit_null)
{
- assert(0 == dollar_etrap.str.len);
+ assert(0 == (TREF(dollar_etrap)).str.len);
for (level = dollar_zlevel() - 1; level > 0; level--)
{
GOLEVEL(level, FALSE);
@@ -809,7 +813,7 @@ CONDITION_HANDLER(mdb_condition_handler)
} else if (etrap_handling)
{
proc_act_type = SFT_ZTRAP;
- err_act = &dollar_etrap.str;
+ err_act = &((TREF(dollar_etrap)).str);
} else
{
PRN_ERROR;
@@ -924,15 +928,15 @@ CONDITION_HANDLER(mdb_condition_handler)
"re-dispatching error frame\n"));
MUM_TSTART_FRAME_CHECK;
MUM_TSTART; /* unwind the current C-stack and restart executing from the top of the current M-stack */
- } else if ((0 != dollar_etrap.str.len) || (0 != dollar_ztrap.str.len))
+ } else if ((0 != (TREF(dollar_etrap)).str.len) || (0 != (TREF(dollar_ztrap)).str.len))
{
assert(!ztrap_explicit_null);
proc_act_type = SFT_ZTRAP;
- err_act = (0 != dollar_etrap.str.len) ? &dollar_etrap.str : &dollar_ztrap.str;
+ err_act = (0 != (TREF(dollar_etrap)).str.len) ? &((TREF(dollar_etrap)).str) : &((TREF(dollar_ztrap)).str);
DBGEHND((stderr, "mdb_condition_handler: Dispatching %s error handler [%.*s]\n",
- (0 != dollar_etrap.str.len) ? "$ETRAP" : "$ZTRAP", err_act->len, err_act->addr));
+ (0 != (TREF(dollar_etrap)).str.len) ? "$ETRAP" : "$ZTRAP", err_act->len, err_act->addr));
/* Reset mpc to beginning of the current line (to retry after invoking $ZTRAP) */
- if (0 != dollar_ztrap.str.len)
+ if (0 != (TREF(dollar_ztrap)).str.len)
reset_mpc = TRUE;
} else
{ /* Either $ETRAP is empty string or ztrap_explicit_null is set.
@@ -950,7 +954,7 @@ CONDITION_HANDLER(mdb_condition_handler)
{
GTMTRIG_ONLY(assert(0 == gtm_trigger_depth)); /* Should never happen in a trigger */
DBGEHND((stderr, "mdb_condition_handler: ztrap_explicit_null set - unwinding till find handler\n"));
- assert(0 == dollar_etrap.str.len);
+ assert(0 == (TREF(dollar_etrap)).str.len);
for (level = dollar_zlevel() - 1; level > 0; level--)
{
GOLEVEL(level, FALSE);
@@ -976,7 +980,7 @@ CONDITION_HANDLER(mdb_condition_handler)
} else if (etrap_handling)
{
proc_act_type = SFT_ZTRAP;
- err_act = &dollar_etrap.str;
+ err_act = &((TREF(dollar_etrap)).str);
DBGEHND((stderr, "mdb_condition_handler: $ETRAP handler being dispatched [%.*s]\n", err_act->len,
err_act->addr));
}
diff --git a/sr_port/mdef.h b/sr_port/mdef.h
index db1c537..9c469ff 100644
--- a/sr_port/mdef.h
+++ b/sr_port/mdef.h
@@ -293,6 +293,7 @@ typedef UINTPTR_T uintszofptr_t;
#define MAX_DIGITS_IN_EXP 2 /* maximum number of decimal digits in an exponent */
#define MAX_HOST_NAME_LEN 256
#define MAX_LONG_IN_DOUBLE 0xFFFFFFFFFFFFF /*Max Fraction part in IEEE double format*/
+#define MAX_INT_IN_BYTE 255
#ifndef _AIX
# ifndef __sparc
@@ -501,9 +502,15 @@ MBSTART { /* also requires threaddef DCL and SETUP*/ \
TMS = NO_M_TIMEOUT; \
else \
{ \
- assert(MV_BIAS >= 1000); /* if formats change scale may need attention */ \
+ assert(MV_BIAS >= 1000); /* if formats change scale may need attention */ \
/* negative becomes 0 larger than MAXPOSINT4 caps to MAXPOSINT4 */ \
- TMS = (TMV->mvtype & MV_INT) ? ((0 > TMV->m[1]) ? 0 : TMV->m[1]) : (TMV->sgn ? 0 : MAXPOSINT4); \
+ if (!(TMV->mvtype & MV_INT)) \
+ TMV->e += 3; /* for non-ints, bump exponent to get millisecs from MV_FORCE_INT */ \
+ TMS = ((TMV->mvtype & MV_INT) ? TMV->m[1] : MIN(MAXPOSINT4, MV_FORCE_INT(TMV))); \
+ if (!(TMV->mvtype & MV_INT)) \
+ TMV->e -= 3; /* if we messed with the exponent, restore it to its original value */ \
+ if (0 > TMS) \
+ TMS = 0; \
} \
if ((TREF(tpnotacidtime)).m[1] < TMS) \
TPNOTACID_CHECK(NOTACID); \
diff --git a/sr_port/merge_desc_check.c b/sr_port/merge_desc_check.c
old mode 100755
new mode 100644
index ddfd5e3..4d37f28
--- a/sr_port/merge_desc_check.c
+++ b/sr_port/merge_desc_check.c
@@ -145,14 +145,14 @@ boolean_t merge_desc_check(void)
OPEN_BASEREG_IF_STATSREG(map);
reg = map->reg.addr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
}
for (map = start_map2; map <= end_map2; map++)
{
OPEN_BASEREG_IF_STATSREG(map);
reg = map->reg.addr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
}
/* At this point, all regions involved in the merge ^gvn1(subs1)=^gvn2(subs2) are open
* so we can use max_fid_index without issues.
diff --git a/sr_port/merrors.msg b/sr_port/merrors.msg
index 0033593..3269a50 100644
--- a/sr_port/merrors.msg
+++ b/sr_port/merrors.msg
@@ -321,7 +321,7 @@ JNLCLOSE <Error closing journal file !AD>/error/fao=2!/ansi=0
NOTPRINCIO <Output currently directed to device !AD>/warning/fao=2!/ansi=0
NOTTOEOFONPUT <Not positioned to EOF on write (sequential organization only)>/error/fao=0!/ansi=0
NOZBRK <No zbreak at that location>/info/fao=0!/ansi=0
-NULSUBSC <Null subscripts are not allowed for region: !AD>/error/fao=2!/ansi=0
+NULSUBSC <!AD Null subscripts are not allowed for current region>/error/fao=2!/ansi=0
NUMOFLOW <Numeric overflow>/error/fao=0!/ansi=92
PARFILSPC <Parameter: !AD file specification: !AD>/error/fao=4!/ansi=0
PATCLASS <Illegal character class for pattern code>/error/fao=0!/ansi=0
@@ -370,7 +370,7 @@ UNIMPLOP <Unimplemented construct encountered>/error/fao=0!/ansi=0
VAREXPECTED <Variable expected in this context>/error/fao=0!/ansi=39
VARRECBLKSZ <Blocksize must be at least record size + 4 bytes>/error/fao=0!/ansi=0
MAXARGCNT <Maximum number of arguments !UL exceeded>/error/fao=1!/ansi=0
-GTMSECSHRSEMGET <semget error errno = !UL>/error/fao=1!/ansi=0
+GTMSECSHRSEMGET <semget error errno = !UL>/fatal/fao=1!/ansi=0
VIEWARGCNT <View parameter !AD has inappropriate number of subparameters>/error/fao=2!/ansi=0
GTMSECSHRDMNSTARTED <gtmsecshr daemon started (key: 0x!XL) for version !AD from !AD>/info/fao=5!/ansi=0
ZATTACHERR <Error attaching to "!AD">/error/fao=2!/ansi=0
@@ -441,12 +441,12 @@ QUITARGUSE <Quit cannot take an argument in this context>/error/fao=0!/ansi=16
NAMEEXPECTED <A local variable name is expected in this context>/error/fao=0!/ansi=0
FALLINTOFLST <Fall-through to a label with formallist is not allowed>/error/fao=0!/ansi=11
NOTEXTRINSIC <Quit does not return to an extrinsic function: argument not allowed>/error/fao=0!/ansi=16
-GTMSECSHRREMSEMFAIL <error removing semaphore errno = !UL>/error/fao=1!/ansi=0
+GTMSECSHRREMSEMFAIL <error removing semaphore errno = !UL>/warning/fao=1!/ansi=0
FMLLSTMISSING <The formal list is absent from a label called with an actual list: !AD>/error/fao=2!/ansi=20
ACTLSTTOOLONG <More actual parameters than formal parameters: !AD>/error/fao=2!/ansi=58
ACTOFFSET <Actuallist not allowed with offset>/error/fao=0!/ansi=0
MAXACTARG <Maximum number of actual arguments exceeded>/error/fao=0!/ansi=0
-GTMSECSHRREMSEM <[client pid !UL] Semaphore (!UL) removed>/error/fao=2!/ansi=0
+GTMSECSHRREMSEM <[client pid !UL] Semaphore (!UL) removed>/info/fao=2!/ansi=0
JNLTMQUAL2 <Time qualifier LOOKBACK_TIME="!AZ" is later than SINCE_TIME="!AZ">/error/fao=2!/ansi=0
GDINVALID <Unrecognized Global Directory file format: !AD, expected label: !AD, found: !AD>/error/fao=6!/ansi=0
ASSERT <Assert failed in !AD line !UL for expression (!AD)>/fatal/fao=5!/ansi=0
@@ -590,7 +590,7 @@ LDGOQFMT <Corrupt GOQ format header information!/>/error/fao=0!/ansi=0
BEGINST <Beginning LOAD at record number: !UL>/info/fao=1!/ansi=0
INVMVXSZ <Invalid block size for GOQ load format>/fatal/fao=0!/ansi=0
JNLWRTNOWWRTR <Journal writer attempting another write>/error/fao=0!/ansi=0
-GTMSECSHRSHMCONCPROC <More than one process attached to Shared memory segment (!UL) not removed (!UL)>/error/fao=2!/ansi=0
+GTMSECSHRSHMCONCPROC <More than one process attached to Shared memory segment (!UL) not removed (!UL)>/warning/fao=2!/ansi=0
JNLINVALLOC <Journal file allocation !UL is not within the valid range of !UL to !UL. Journal file not created.>/warning/fao=3!/ansi=0
JNLINVEXT <Journal file extension !UL is greater than the maximum allowed size of !UL. Journal file not created.>/warning/fao=2!/ansi=0
MUPCLIERR <Action not taken due to CLI errors>/error/fao=0!/ansi=0
@@ -750,7 +750,7 @@ BLKSIZ512 <Block size !UL rounds to !UL>/info/fao=2!/ansi=0
MUTEXERR <Mutual Exclusion subsystem failure>/error/fao=0!/ansi=0
JNLVSIZE <Journal File !AD has incorrect virtual_filesize !UL. Allocation : !UL, Extension : !UL, Filesize : !UL, File system block size : !UL>/error/fao=7!/ansi=0
MUTEXLCKALERT <Mutual Exclusion subsystem ALERT - lock attempt threshold crossed for region !AD. Process !UL is in crit cycle !UL.>/warning/fao=4!/ansi=0
-MUTEXFRCDTERM <Mutual Exclusion subsystem detected forced termination of process !UL. Crit salvaged from region !AD.>/warning/fao=3!/ansi=0
+MUTEXFRCDTERM <Mutual Exclusion subsystem detected forced termination of process !UL. Crit salvaged from database file !AD.>/warning/fao=3!/ansi=0
GTMSECSHR <!UL : Error during gtmsecshr operation>/error/fao=1!/ansi=0
GTMSECSHRSRVFID <!AD: !UL - Attempt to service request failed.!/ client id: !UL, mesg type: !UL, mesg data: !UL>/warning/fao=6!/ansi=0
GTMSECSHRSRVFIL <!AD: !UL - Attempt to service request failed.!/ client id: !UL, mesg type: !UL!/file: !AD>/warning/fao=7!/ansi=0
@@ -761,7 +761,7 @@ INVCTLMNE <Invalid control mnemonics>/error/fao=0!/ansi=0
SOCKLISTEN <Error listening on a socket>/error/fao=0!/ansi=0
LQLENGTHNA <Listening queue length !UL not appropriate. Must be between 1 and 5.>/error/fao=1!/ansi=0
ADDRTOOLONG <Socket address !AD of length !UL is longer than the maximum permissible length !UL>/error/fao=4!/ansi=0
-GTMSECSHRGETSEMFAIL <error getting semaphore errno = !UL>/error/fao=1!/ansi=0
+GTMSECSHRGETSEMFAIL <error getting semaphore errno = !UL>/warning/fao=1!/ansi=0
CPBEYALLOC <Attempt to copy beyond the allocated buffer>/error/fao=0!/ansi=0
DBRDONLY <Database file !AD read only>/error/fao=2!/ansi=0
DUPTN <Duplicate transaction found [TN = 0x!16 at XQ] at offset 0x!XL in journal file !AD>/warning/fao=4!/ansi=0
@@ -889,11 +889,11 @@ GTMSECSHRTMOUT <gtmsecshr exiting due to idle timeout>/info/fao=0!/ansi=0
GTMSECSHRRECVF <gtmsecshr receive on server socket failed>/error/fao=0!/ansi=0
GTMSECSHRSENDF <gtmsecshr send on server socket failed>/error/fao=0!/ansi=0
SIZENOTVALID8 <Size (in bytes) must be either 1, 2, 4, or 8>/error/fao=0!/ansi=0
-GTMSECSHROPCMP <gtmsecshr operation may be compromised>/warning/fao=0!/ansi=0
+GTMSECSHROPCMP <gtmsecshr operation may be compromised>/fatal/fao=0!/ansi=0
GTMSECSHRSUIDF <gtmsecshr server setuid to root failed>/warning/fao=0!/ansi=0
GTMSECSHRSGIDF <gtmsecshr server setgid to root failed>/warning/fao=0!/ansi=0
GTMSECSHRSSIDF <gtmsecshr server setsid failed>/warning/fao=0!/ansi=0
-GTMSECSHRFORKF <gtmsecshr server unable to fork off a child process>/error/fao=0!/ansi=0
+GTMSECSHRFORKF <gtmsecshr server unable to fork off a child process>/fatal/fao=0!/ansi=0
DBFSYNCERR <Error synchronizing database file !AD to disk>/error/fao=2!/ansi=0
SECONDAHEAD <Secondary ahead of primary. !/ Secondary database possibly updated by process other than the update process. First perform rollback.>/error/fao=0!/ansi=0
SCNDDBNOUPD <Database Updates not allowed on the secondary>/error/fao=0!/ansi=0
@@ -1316,7 +1316,7 @@ CRYPTOPFAILED <Encrypt/Decrypt operation failed for file !AD. !AD>/error/fao=4!
CRYPTDLNOOPEN <Could not load encryption library while opening encrypted file !AD. !AD>/error/fao=4!/ansi=0
CRYPTNOV4 <!AD is an encrypted database. Cannot downgrade(to V4) with Encryption option enabled.>/error/fao=2!/ansi=0
CRYPTNOMM <!AD is an encrypted database. Cannot support MM access method.>/error/fao=2!/ansi=0
-UNUSEDMSG1319 <Last used in V6.2-002A>/error/fao=0!/ansi=0
+READONLYNOBG <Read-only cannot be enabled on non-MM databases>/error/fao=0!/ansi=0
CRYPTKEYFETCHFAILED <Could not retrieve encryption key corresponding to file !AD. !AD>/error/fao=4!/ansi=0
CRYPTKEYFETCHFAILEDNF <Could not retrieve encryption key during !AD operation key. !AD>/error/fao=4!/ansi=0
CRYPTHASHGENFAILED <Could not generate cryptographic hash for symmetric key corresponding to file !AD. !AD>/error/fao=4!/ansi=0
@@ -1357,7 +1357,7 @@ TRIGNAMEUNIQ <Unable to make trigger name !AD unique beyond !UL versions already
ZTRIGINVACT <Missing or invalid parameter in position !UL given to $ZTRIGGER()>/error/fao=1!/ansi=0
INDRCOMPFAIL <Compilation of indirection failed>/error/fao=0!/ansi=0
QUITALSINV <QUIT * return when the extrinsic was not invoked with SET *>/error/fao=0!/ansi=0
-PROCTERM <!AD process termination due to !AD (return code !UL) from !AD>/warning/fao=7!/ansi=0
+PROCTERM <!AD process termination due to !AZ (return code !UL) from !AD>/warning/fao=6!/ansi=0
SRCLNNTDSP <Source lines exceeding !UL character width are not displayed>/info/fao=1!/ansi=0
ARROWNTDSP <Unable to display ^----- due to length of source line>/info/fao=0!/ansi=0
TRIGDEFBAD <Trigger initialization failed for global ^!AD. Error while processing ^#t("!AD",!AD)>/error/fao=6!/ansi=0
@@ -1374,7 +1374,7 @@ GVZTRIGFAIL <ZTRIGGER of a global variable failed. Failure code: !AD.>/error/fa
MUUSERLBK <Abnormal shutdown of replication-enabled database !AD detected>/error/fao=2!/ansi=0
SETINSETTRIGONLY <ISV !AD can only be modified in a 'SET' type trigger>/error/fao=2!/ansi=0
DZTRIGINTRIG <$ZTRIGGER() is not allowed inside trigger context. Trigger name: !AD>/error/fao=2!/ansi=0
-UNUSEDMSG1377 <SECNODZTRIGINTP : Last used in V6.2-000>/error/fao=0!/ansi=0
+LSINSERTED <Line !UL, source module !AD exceeds maximum source line length; line seperator inserted, terminating scope of any prior IF, ELSE, or FOR>/warning/fao=3!/ansi=0
BOOLSIDEFFECT <Extrinsic ($$), External call ($&) or $INCREMENT() with potential side effects in Boolean expression>/warning/fao=0!/ansi=0
DBBADUPGRDSTATE <Correcting conflicting values for fields describing database version upgrade state in the file header for region !AD (!AD) - make fresh backups with new journal files immediately.>/warning/fao=4!/ansi=0
WRITEWAITPID <PID !UL waited !UL minute(s) for PID !UL to finish writing block 0x!XL in database file !AD>/error/fao=6!/ansi=0
@@ -1386,7 +1386,7 @@ GTMSECSHRCHDIRF <gtmsecshr unable to chdir to its temporary directory (!AD)>/err
JNLORDBFLU <Error flushing database blocks to !AD. See related messages in the operator log>/error/fao=2!/ansi=0
ZCCLNUPRTNMISNG <External call: Cleanup routine name missing. Cannot continue>/error/fao=0!/ansi=0
ZCINVALIDKEYWORD <External call: Invalid keyword found. Cannot continue>/error/fao=0!/ansi=0
-UNUSEDMSG1389 <REPLNOMULTILINETRG : Last used in V6.2-000>/error/fao=0!/ansi=0
+REPLMULTINSTUPDATE <Previous updates in the current transaction are to !AD so updates to !AD (in !AD) not allowed>/error/fao=6!/ansi=0
DBSHMNAMEDIFF <Database file !AD points to shared memory (id = !UL) which points to a different database file !AZ>/error/fao=4!/ansi=0
SHMREMOVED <Removed Shared Memory id !UL corresponding to file !AD>/info/fao=3!/ansi=0
DEVICEWRITEONLY <Cannot read from a write-only device>/error/fao=0!/ansi=0
@@ -1483,9 +1483,9 @@ DBSPANCHUNKORD <!AD Chunk of !UL blocks is out of order>/error/fao=3!/ansi=0
DBDATAMX <!AD Record too large>/error/fao=2!/ansi=0
DBIOERR <Error while doing write operation on region !AD (!AD)>/error/fao=4!/ansi=0
INITORRESUME <UPDATERESYNC on a Supplementary Instance must additionally specify INITIALIZE or RESUME>/error/fao=0!/ansi=0
-GTMSECSHRNOARG0 <gtmsecshr cannot identify its origin - argv[0] is null>/error/fao=0!/ansi=0
-GTMSECSHRISNOT <gtmsecshr is not running as gtmsecshr but !AD - must be gtmsecshr>/error/fao=2!/ansi=0
-GTMSECSHRBADDIR <gtmsecshr is not running from $gtm_dist/gtmsecshrdir or $gtm_dist cannot be determined>/error/fao=0!/ansi=0
+GTMSECSHRNOARG0 <gtmsecshr cannot identify its origin - argv[0] is null>/fatal/fao=0!/ansi=0
+GTMSECSHRISNOT <gtmsecshr is not running as gtmsecshr but !AD - must be gtmsecshr>/fatal/fao=2!/ansi=0
+GTMSECSHRBADDIR <gtmsecshr is not running from $gtm_dist/gtmsecshrdir or $gtm_dist cannot be determined>/fatal/fao=0!/ansi=0
JNLBUFFREGUPD <Journal file buffer size for region !AD has been adjusted from !UL to !UL.>/warning/fao=4!/ansi=0
JNLBUFFDBUPD <Journal file buffer size for database file !AD has been adjusted from !UL to !UL.>/warning/fao=4!/ansi=0
LOCKINCR2HIGH <Attempt to increment a LOCK more than !UL times>/error/fao=1!/ansi=0
@@ -1629,7 +1629,7 @@ DBGLDMISMATCH <Database file !AD has !AZ whereas !AZ !AD in global directory !AD
DBBLKSIZEALIGN <Database file !AD has AIO=ON and block_size=!UL which is not a multiple of filesystem block size !UL>/error/fao=4!/ansi=0
ASYNCIONOMM <Database file !AD!AD cannot !AD>/error/fao=6!/ansi=0
RESYNCSEQLOW <MUPIP JOURNAL -ROLLBACK -FORWARD -RESYNC=!@ZQ [0x!16 at XQ] requested is lower than !@ZQ [0x!16 at XQ] which is the starting sequence number of the instance>/error/fao=4!/ansi=0
-DBNULCOL <NULL collation representation for record !UL in block !UL is !AD which differs from the database file header settings of !AD>/error/fao=6!/ansi=0
+DBNULCOL <!AD NULL collation representation differs from the database file header setting>/error/fao=2!/ansi=0
UTF16ENDIAN <The device previously set UTF-16 endianness to !AD and cannot change to !AD>/error/fao=4!/ansi=0
OFRZACTIVE <Region !AD has an Online Freeze>/warning/fao=2!/ansi=0
OFRZAUTOREL <Online Freeze automatically released for region !AD>/warning/fao=2!/ansi=0
@@ -1638,8 +1638,8 @@ OFRZCRITSTUCK <Unable to proceed with a write to region !AD with Online Freeze w
OFRZNOTHELD <Online Freeze had been automatically released for at least one region>/warning/fao=0!/ansi=0
AIOBUFSTUCK <Waited !UL minutes for PID: !UL to finish AIO disk write of block: !UL [0x!XL] aio_error=!UL>/error/fao=5!/ansi=0
DBDUPNULCOL <Discarding !AD=!AD key due to duplicate null collation record>/error/fao=4!/ansi=0
-CHANGELOGINTERVAL <!AD Server now logging to !AD with a !UL second interval>/info/fao=5!/ansi=0
-DBNONUMSUBS <!AD key contains a numeric form of subscript in a global defined to collate all subscripts as strings>/error/fao=2!/ansi=0
+CHANGELOGINTERVAL <!AD Server is now logging to !AD every !UL transactions>/info/fao=5!/ansi=0
+DBNONUMSUBS <!AD Key contains a numeric form of subscript in a global defined to collate all subscripts as strings>/error/fao=2!/ansi=0
AUTODBCREFAIL <Automatic creation of database file !AD associated with region !AD failed; see associated messages for details>/error/fao=4!/ansi=0
RNDWNSTATSDBFAIL <Rundown of statistics database region !AD (DB !AD) failed at/in !AD with following error: !AD>/error/fao=8!/ansi=0
STATSDBNOTSUPP <Attempted operation is not supported on statistics database file !AD>/error/fao=2!/ansi=0
@@ -1668,6 +1668,10 @@ MUCREFILERR <Error in/at !AD creating database !AD (region !AD)>/error/fao=6!/an
JNLBUFFPHS2SALVAGE <Salvaged journal records from process !UL for database file !AD at transaction number [0x!16 at XQ] and journal-sequence-number/unique-token [0x!16 at XQ] with journal file starting offset [0x!XL] and length [0x!XL]>/info/fao=7!/ansi=0
JNLPOOLPHS2SALVAGE <Salvaged journal records from process !UL for replication instance file !AD at journal sequence number [0x!16 at XQ] with journal pool starting offset [0x!16 at XQ] and length [0x!XL]>/info/fao=6!/ansi=0
MURNDWNARGLESS <Argumentless MUPIP RUNDOWN started with process id !UL by userid !UL from directory !AD>/info/fao=4!/ansi=0
+DBFREEZEON <Region !AD is FROZEN (!AZOVERRIDE !AZONLINE !AZAUTOREL)>/info/fao=5!/ansi=0
+DBFREEZEOFF <Region !AD is UNFROZEN (!AZOVERRIDE !AZAUTOREL)>/info/fao=4!/ansi=0
+STPCRIT <String pool space critical>/error/fao=0!/ansi=0
+STPOFLOW <String pool space overflow>/fatal/fao=0!/ansi=0
!
! If there are UNUSEDMSG* lines unused for more than one year and at least two non-patch releases, use them before adding new lines.
!
diff --git a/sr_port/lk_check_own.c b/sr_port/mlk_check_own.c
similarity index 82%
rename from sr_port/lk_check_own.c
rename to sr_port/mlk_check_own.c
index b5d2db3..dd76527 100755
--- a/sr_port/lk_check_own.c
+++ b/sr_port/mlk_check_own.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001, 2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -23,10 +23,14 @@
#include "mlkdef.h"
#include "filestruct.h"
#include "lockdefs.h"
-#include "lk_check_own.h"
+#include "mlk_check_own.h"
#include "is_proc_alive.h"
+#include "interlock.h"
-GBLREF short crash_count;
+GBLREF short crash_count;
+#ifdef DEBUG
+GBLREF unsigned int t_tries;
+#endif
/*
* ------------------------------------------------
@@ -38,7 +42,7 @@ GBLREF short crash_count;
* FALSE - otherwise
* ------------------------------------------------
*/
-boolean_t lk_check_own(mlk_pvtblk *x)
+boolean_t mlk_check_own(mlk_pvtblk *x)
{
int4 status;
int4 icount, time[2];
@@ -48,11 +52,8 @@ boolean_t lk_check_own(mlk_pvtblk *x)
if (!x->blocked)
return FALSE;
csa = &FILE_INFO(x->region)->s_addrs;
- if (csa->critical)
- crash_count = csa->critical->crashcnt;
- was_crit = csa->now_crit;
- if (!was_crit)
- grab_crit(x->region); /* check on process that owns lock */
+ GRAB_LOCK_CRIT(csa, x->region, was_crit);
+ assert((csa->lock_crit_with_db) || !csa->now_crit || (CDB_STAGNATE <= t_tries));
ret_val = FALSE;
if (x->blocked->owner)
{ /* There is an owner for the blocking node */
@@ -69,7 +70,6 @@ boolean_t lk_check_own(mlk_pvtblk *x)
}
} else
ret_val = TRUE; /* There is no owner. Take credit for freeing it.. */
- if (!was_crit)
- rel_crit(x->region);
+ REL_LOCK_CRIT(csa, x->region, was_crit);
return ret_val;
}
diff --git a/sr_port/lk_check_own.h b/sr_port/mlk_check_own.h
similarity index 74%
rename from sr_port/lk_check_own.h
rename to sr_port/mlk_check_own.h
index ee59ba0..616f52f 100755
--- a/sr_port/lk_check_own.h
+++ b/sr_port/mlk_check_own.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2010 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -12,6 +13,6 @@
#ifndef LK_CHECK_OWN_INCLUDED
#define LK_CHECK_OWN_INCLUDED
-boolean_t lk_check_own(mlk_pvtblk *x);
+boolean_t mlk_check_own(mlk_pvtblk *x);
#endif /* LK_CHECK_OWN_INCLUDED */
diff --git a/sr_port/lkinit.c b/sr_port/mlk_gbldef.c
similarity index 81%
rename from sr_port/lkinit.c
rename to sr_port/mlk_gbldef.c
index cc83037..758d8b9 100755
--- a/sr_port/lkinit.c
+++ b/sr_port/mlk_gbldef.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
diff --git a/sr_port/mlk_lock.c b/sr_port/mlk_lock.c
index dc3e08f..9c712ab 100755
--- a/sr_port/mlk_lock.c
+++ b/sr_port/mlk_lock.c
@@ -181,6 +181,6 @@ uint4 mlk_lock(mlk_pvtblk *p,
INCR_GVSTATS_COUNTER(csa, csa->nl, n_lock_fail, 1);
}
} else /* acc_meth = dba_usr */
- retval = gvusr_lock(p->total_length, &p->value[0], p->region);
+ retval = gvusr_lock(p->nref_length, &p->value[0], p->region);
return retval;
}
diff --git a/sr_port/mlk_pvtblk_create.c b/sr_port/mlk_pvtblk_create.c
index 9f1ba67..80f3143 100755
--- a/sr_port/mlk_pvtblk_create.c
+++ b/sr_port/mlk_pvtblk_create.c
@@ -26,6 +26,7 @@
#include "mlk_region_lookup.h"
#include "mlk_pvtblk_insert.h"
#include "mlk_pvtblk_create.h"
+#include "mmrhash.h"
#include "dpgbldir.h"
#include "gtm_reservedDB.h"
/* The header files below are for environment translation*/
@@ -34,7 +35,6 @@
#include "gtm_env_xlate_init.h"
GBLREF gd_addr *gd_header;
-static mstr gtmgbldir_mstr;
error_def(ERR_LOCKSUB2LONG);
error_def(ERR_PCTYRESERVED);
@@ -61,14 +61,14 @@ void mlk_pvtblk_create (int subcnt, mval *extgbl1, va_list subptr)
{
va_list mp;
int i, len;
- int4 rlen; /* Roundup each length to get clear len for mlk_shrsub */
- unsigned char *cp;
+ unsigned char *cp, *cp_prev;
mval *extgbl2, *mp_temp, val_xlated;
mlk_pvtblk *r;
gd_region *reg;
sgmnt_addrs *sa;
gd_addr *gld;
-
+ hash128_state_t accstate, tmpstate;
+ gtm_uint16 hashres;
/* Get count of mvals including extgbl1 */
assert (subcnt >= 2);
@@ -104,7 +104,7 @@ void mlk_pvtblk_create (int subcnt, mval *extgbl1, va_list subptr)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_PCTYRESERVED);
reg = mlk_region_lookup((mp_temp), gld);
/* Add up the sizes of all MVAL strings */
- for (len = 0, rlen=0, i = 0; i < subcnt; mp_temp=va_arg(mp, mval *), i++)
+ for (len = 0, i = 0; i < subcnt; mp_temp=va_arg(mp, mval *), i++)
{
MV_FORCE_STR(mp_temp);
if ((mp_temp)->str.len > 255)
@@ -112,7 +112,6 @@ void mlk_pvtblk_create (int subcnt, mval *extgbl1, va_list subptr)
ERR_TEXT, 2, (mp_temp)->str.len, (mp_temp)->str.addr);
assert((mp_temp)->mvtype & MV_STR);
len += (int)(mp_temp)->str.len;
- rlen += ROUND_UP(((mp_temp)->str.len + 1), 4);
}
va_end(mp);
/*
@@ -120,23 +119,28 @@ void mlk_pvtblk_create (int subcnt, mval *extgbl1, va_list subptr)
* All strings are stored one after another in the buffer.
* Each string is preceeded by 1 byte string len.
*/
- r = (mlk_pvtblk *) malloc(MLK_PVTBLK_SIZE(len, subcnt));
- memset(r, 0, SIZEOF(mlk_pvtblk) - 1);
+ MLK_PVTBLK_ALLOC(len + subcnt, subcnt, 0, r);
r->translev = 1;
r->subscript_cnt = subcnt;
/* Each string is preceeded by string length byte */
- r->total_length = len + subcnt;
- r->total_len_padded = rlen; /* len byte already accounted for */
+ r->nref_length = len + subcnt;
+ /* Keep the hash code generation here in sync with MLK_PVTBLK_SUBHASH_GEN() */
+ HASH128_STATE_INIT(accstate, 0);
cp = &r->value[0];
/* Copy all strings into the buffer one after another */
for (i = 0, VAR_COPY(mp, subptr); i < subcnt; i++)
{
+ cp_prev = cp;
mp_temp = va_arg(mp, mval *);
MV_FORCE_STR(mp_temp);
len = (int)(mp_temp)->str.len;
*cp++ = len;
memcpy(cp, (mp_temp)->str.addr, len);
cp += len;
+ gtmmrhash_128_ingest(&accstate, cp_prev, len + 1);
+ tmpstate = accstate;
+ gtmmrhash_128_result(&tmpstate, (cp - r->value), &hashres);
+ MLK_PVTBLK_SUBHASH(r, i) = (uint4)hashres.one;
}
va_end(mp);
r->region = reg;
diff --git a/sr_port/mlk_pvtblk_equ.c b/sr_port/mlk_pvtblk_equ.c
index 862917a..82ac2b5 100755
--- a/sr_port/mlk_pvtblk_equ.c
+++ b/sr_port/mlk_pvtblk_equ.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -18,6 +19,6 @@
int mlk_pvtblk_equ(mlk_pvtblk *a, mlk_pvtblk *b)
{
- return (a->ctlptr == b->ctlptr && a->total_length == b->total_length
- && (memcmp(a->value, b->value, a->total_length) == 0));
+ return (a->ctlptr == b->ctlptr && a->nref_length == b->nref_length
+ && (memcmp(a->value, b->value, a->nref_length) == 0));
}
diff --git a/sr_port/mlk_region_lookup.c b/sr_port/mlk_region_lookup.c
old mode 100755
new mode 100644
index bac7259..d987a4f
--- a/sr_port/mlk_region_lookup.c
+++ b/sr_port/mlk_region_lookup.c
@@ -47,7 +47,7 @@ gd_region *mlk_region_lookup(mval *ptr, gd_addr *addr)
{
reg = addr->maps->reg.addr; /* local lock map is first */
if (!reg->open)
- gv_init_reg (reg);
+ gv_init_reg (reg, NULL);
} else
{
p++;
@@ -64,14 +64,14 @@ gd_region *mlk_region_lookup(mval *ptr, gd_addr *addr)
if (!reg->open)
{
targ->clue.end = 0;
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
}
} else
{
map = gv_srch_map(addr, gvent.var_name.addr, gvent.var_name.len, SKIP_BASEDB_OPEN_FALSE);
reg = map->reg.addr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
targ = (gv_namehead *)targ_alloc(reg->max_key_size, &gvent, reg);
GVNH_REG_INIT(addr, addr->tab_ptr, map, targ, reg, gvnh_reg, tabent);
}
diff --git a/sr_port/mlk_shr_init.c b/sr_port/mlk_shr_init.c
index 82668c5..962dc7c 100755
--- a/sr_port/mlk_shr_init.c
+++ b/sr_port/mlk_shr_init.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -26,8 +27,9 @@ void mlk_shr_init(sm_uc_ptr_t base,
sgmnt_addrs *csa,
boolean_t read_write)
{
- int i, nr_blocks, nr_procs;
+ int i, nr_blocks, nr_procs, shr_size, nr_buckets;
sm_uc_ptr_t cp;
+ mlk_shrhash_ptr_t sh;
mlk_shrblk_ptr_t sb;
mlk_prcblk_ptr_t pb;
mlk_ctldata_ptr_t ctl;
@@ -37,16 +39,26 @@ void mlk_shr_init(sm_uc_ptr_t base,
* mlk_shrblk --> size * 5/8 (consisting of nr_blocks number of mlk_shrblk structures)
* mlk_prcblk --> size * 1/8 (consisting of nr_procs number of mlk_prcblk structures)
* mlk_shrsubs --> size * 2/8 - SIZEOF(mlk_ctldata) (consisting of variable number of variable length subscript strings)
- * Total block counts are recorded in ctl->max_* becuase those values are used for free lock space calculation.
+ * Total block counts are recorded in ctl->max_* because those values are used for free lock space calculation.
* (see:lke_show.c and mlk_unlock.c)
*/
- nr_blocks = ((size >> 1) + (size >> 3)) / SIZEOF(mlk_shrblk); /* size/2 + size/8 = size*5/8 */
+ shr_size = (size >> 1) + (size >> 3); /* size/2 + size/8 = size*5/8 */
+ /* Split shrblock space into blocks and hash buckets.
+ * Hopscotch hashing works reasonably well with a high load factor, but leaving a little space avoids the worst case,
+ * so allocate up to 1/8 more hash buckets than shrblks.
+ */
+ nr_blocks = (8 * shr_size) / (8 * SIZEOF(mlk_shrblk) + 9 * SIZEOF(mlk_shrhash));
+ nr_buckets = (9 * shr_size) / (8 * SIZEOF(mlk_shrblk) + 9 * SIZEOF(mlk_shrhash));
+ assert(shr_size >= (nr_blocks * SIZEOF(mlk_shrblk) + nr_buckets * SIZEOF(mlk_shrhash)));
nr_procs = (size >> 3) / SIZEOF(mlk_prcblk);
memset(base, 0, size);
ctl = (mlk_ctldata_ptr_t)base;
- sb = (mlk_shrblk_ptr_t)(ctl + 1);
ctl->wakeups = 1;
+ sh = (mlk_shrhash_ptr_t)(ctl + 1);
+ A2R(ctl->blkhash, sh);
+ ctl->num_blkhash = nr_buckets;
+ sb = (mlk_shrblk_ptr_t)(sh + nr_buckets);
A2R(ctl->blkfree, sb);
ctl->blkcnt = nr_blocks;
ctl->max_blkcnt = nr_blocks;
diff --git a/sr_port/mlk_shrblk_create.c b/sr_port/mlk_shrblk_create.c
index e0ec97e..7454be7 100755
--- a/sr_port/mlk_shrblk_create.c
+++ b/sr_port/mlk_shrblk_create.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -18,6 +19,17 @@
#include "copy.h"
#include "mlk_shrblk_create.h"
+#ifdef MLK_SHRHASH_DEBUG
+#define SHRHASH_DEBUG_ONLY(x) x
+#else
+#define SHRHASH_DEBUG_ONLY(x)
+#endif
+
+void mlk_shrhash_add(mlk_pvtblk *p, mlk_shrblk_ptr_t shr, int subnum);
+#ifdef MLK_SHRHASH_DEBUG
+void mlk_shrhash_validate(mlk_ctldata_ptr_t ctl);
+#endif
+
mlk_shrblk_ptr_t mlk_shrblk_create(mlk_pvtblk *p,
unsigned char *val, /* the subscript */
int len, /* subscript's length */
@@ -56,5 +68,125 @@ mlk_shrblk_ptr_t mlk_shrblk_create(mlk_pvtblk *p,
subptr->backpointer = n;
subptr->length = len;
memcpy(subptr->data, val, len);
+ mlk_shrhash_add(p, ret, p->subscript_cnt - nshrs);
return ret;
}
+
+void mlk_shrhash_add(mlk_pvtblk *p, mlk_shrblk_ptr_t shr, int subnum)
+{
+ int bi, fi, si, mi;
+ uint4 hash, num_buckets, usedmap;
+ mlk_shrhash_ptr_t shrhash, bucket, free_bucket, search_bucket, move_bucket;
+ mlk_shrblk_ptr_t move_shrblk;
+
+ SHRHASH_DEBUG_ONLY(mlk_shrhash_validate(p->ctlptr));
+ shrhash = (mlk_shrhash_ptr_t)R2A(p->ctlptr->blkhash);
+ num_buckets = p->ctlptr->num_blkhash;
+ hash = MLK_PVTBLK_SUBHASH(p, subnum);
+ bi = hash % num_buckets;
+ bucket = &shrhash[bi];
+ assert(MAXUINT4 > bucket->usedmap);
+ if (0 == bucket->shrblk)
+ { /* Target bucket is free, so just use it. */
+ assert(0 == (bucket->usedmap & 1U));
+ A2R(bucket->shrblk, shr);
+ assert(0 < bucket->shrblk);
+ bucket->hash = hash;
+ bucket->usedmap |= 1U;
+ SHRHASH_DEBUG_ONLY(mlk_shrhash_validate(p->ctlptr));
+ return;
+ }
+ /* Search for free bucket */
+ for (fi = (bi + 1) % num_buckets ; 0 != shrhash[fi].shrblk ; fi = (fi + 1) % num_buckets)
+ assert(fi != bi); /* Table full */
+ /* While free bucket is out of the neighborhood, find a closer one that can be moved into it. */
+ while (MLK_SHRHASH_NEIGHBORS <= ((num_buckets + fi - bi) % num_buckets))
+ { /* Find a bucket with a neighbor which can be moved to the free bucket */
+ for ((si = ((num_buckets + fi - MLK_SHRHASH_NEIGHBORS + 1) % num_buckets)), (mi = fi) ;
+ si != fi ;
+ si = (si + 1) % num_buckets)
+ {
+ search_bucket = &shrhash[si];
+ usedmap = search_bucket->usedmap;
+ if (0 == usedmap)
+ continue;
+ /* Pull the earliest used bucket out of the map, but don't pass the free bucket. */
+ for (mi = si ; (0 == (usedmap & 1U)) && (mi != fi) ; usedmap >>= 1)
+ {
+ assert(0 != usedmap);
+ mi = (mi + 1) % num_buckets;
+ }
+ if (mi != fi)
+ break;
+ }
+ assert(si != fi); /* Otherwise no movable buckets */
+ /* Move the bucket from the mapped bucket to the free bucket */
+ move_bucket = &shrhash[mi];
+ free_bucket = &shrhash[fi];
+ assert(0 != move_bucket->shrblk);
+ assert(0 == free_bucket->shrblk);
+ /* Check that moving neighbor was marked used and free neighbor was not */
+ assert(0 != (search_bucket->usedmap & (1U << ((num_buckets + mi - si) % num_buckets))));
+ assert(0 == (search_bucket->usedmap & (1U << ((num_buckets + fi - si) % num_buckets))));
+ /* We are moving a relative pointer, so convert to absolute and back */
+ move_shrblk = (mlk_shrblk_ptr_t)R2A(move_bucket->shrblk);
+ A2R(free_bucket->shrblk, move_shrblk);
+ assert(0 < free_bucket->shrblk);
+ assert(MLK_SHRHASH_NEIGHBORS > ((num_buckets + fi - (move_bucket->hash % num_buckets)) % num_buckets));
+ free_bucket->hash = move_bucket->hash;
+ move_bucket->shrblk = 0;
+ move_bucket->hash = 0;
+ /* Clear bit for moved neighbor, set bit for target neighbor */
+ search_bucket->usedmap &= ~(1U << ((num_buckets + mi - si) % num_buckets));
+ search_bucket->usedmap |= (1U << ((num_buckets + fi - si) % num_buckets));
+ /* The moved neighbor is now free */
+ fi = mi;
+ }
+ /* We found one close enough, so store the new data there */
+ assert(0 == (bucket->usedmap & (1U << ((num_buckets + fi - bi) % num_buckets)))); /* Neighbor was not used before */
+ free_bucket = &shrhash[fi];
+ assert(0 == free_bucket->shrblk);
+ A2R(free_bucket->shrblk, shr);
+ assert(0 < free_bucket->shrblk);
+ assert(MLK_SHRHASH_NEIGHBORS > ((num_buckets + fi - (hash % num_buckets)) % num_buckets));
+ free_bucket->hash = hash;
+ /* Note the new neighbor of the original bucket */
+ bucket->usedmap |= (1U << ((num_buckets + fi - bi) % num_buckets));
+ SHRHASH_DEBUG_ONLY(mlk_shrhash_validate(p->ctlptr));
+}
+
+#ifdef MLK_SHRHASH_DEBUG
+
+void mlk_shrhash_validate(mlk_ctldata_ptr_t ctl)
+{
+ mlk_shrhash_ptr_t shrhash, bucket, neighbor_bucket, original_bucket;
+ uint4 num_buckets, usedmap;
+ int bi, ni, obi;
+
+ shrhash = (mlk_shrhash_ptr_t)R2A(ctl->blkhash);
+ num_buckets = ctl->num_blkhash;
+ for (bi=0; bi < num_buckets; bi++)
+ {
+ bucket = &shrhash[bi];
+ for ((usedmap = bucket->usedmap), (ni = bi); usedmap; (usedmap >>= 1), (ni = (ni + 1) % num_buckets))
+ {
+ if (usedmap & 1U)
+ {
+ neighbor_bucket = &shrhash[ni];
+ assert(0 != neighbor_bucket->shrblk);
+ assert(neighbor_bucket->hash % num_buckets == bi);
+ }
+ }
+ if (0 == bucket->shrblk)
+ assert(0 == (usedmap & 1U));
+ else
+ {
+ obi = bucket->hash % num_buckets;
+ assert(MLK_SHRHASH_NEIGHBORS > ((num_buckets + bi - obi) % num_buckets));
+ original_bucket = &shrhash[obi];
+ assert(0 != (original_bucket->usedmap & (1U << ((num_buckets + bi - obi) % num_buckets))));
+ }
+ }
+}
+
+#endif
diff --git a/sr_port/mlk_shrblk_delete_if_empty.c b/sr_port/mlk_shrblk_delete_if_empty.c
index 95a8dbf..a52d8f2 100755
--- a/sr_port/mlk_shrblk_delete_if_empty.c
+++ b/sr_port/mlk_shrblk_delete_if_empty.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001, 2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -17,6 +17,10 @@
#include "mlkdef.h"
#include "copy.h"
#include "mlk_shrblk_delete_if_empty.h"
+#include "mmrhash.h"
+
+void mlk_shrhash_delete(mlk_ctldata_ptr_t ctl, mlk_shrblk_ptr_t d);
+void mlk_shrhash_val_build(mlk_shrblk_ptr_t d, uint4 *total_len, hash128_state_t *hs);
boolean_t mlk_shrblk_delete_if_empty(mlk_ctldata_ptr_t ctl, mlk_shrblk_ptr_t d)
{
@@ -28,6 +32,7 @@ boolean_t mlk_shrblk_delete_if_empty(mlk_ctldata_ptr_t ctl, mlk_shrblk_ptr_t d)
p = (d->parent == 0) ? NULL : (mlk_shrblk_ptr_t)R2A(d->parent);
l = (mlk_shrblk_ptr_t)R2A(d->lsib);
r = (mlk_shrblk_ptr_t)R2A(d->rsib);
+ mlk_shrhash_delete(ctl, d);
if (d == r)
{
if (p == NULL)
@@ -53,3 +58,60 @@ boolean_t mlk_shrblk_delete_if_empty(mlk_ctldata_ptr_t ctl, mlk_shrblk_ptr_t d)
++ctl->blkcnt;
return TRUE;
}
+
+void mlk_shrhash_delete(mlk_ctldata_ptr_t ctl, mlk_shrblk_ptr_t d)
+{
+ hash128_state_t hs;
+ gtm_uint16 hashres;
+ uint4 hash, total_len = 0, num_buckets, usedmap;
+ mlk_shrblk_ptr_t search_shrblk;
+ int bi, si;
+ mlk_shrhash_ptr_t shrhash, bucket, search_bucket;
+
+ shrhash = (mlk_shrhash_ptr_t)R2A(ctl->blkhash);
+ num_buckets = ctl->num_blkhash;
+ HASH128_STATE_INIT(hs, 0);
+ mlk_shrhash_val_build(d, &total_len, &hs);
+ gtmmrhash_128_result(&hs, total_len, &hashres);
+ hash = (uint4)hashres.one;
+ bi = hash % num_buckets;
+ bucket = &shrhash[bi];
+ usedmap = bucket->usedmap;
+ for (si = bi ; 0 != usedmap ; (si = (si + 1) % num_buckets), (usedmap >>= 1))
+ {
+ if (0 == (usedmap & 1U))
+ continue;
+ search_bucket = &shrhash[si];
+ if (search_bucket->hash != hash)
+ continue;
+ assert(0 != search_bucket->shrblk);
+ search_shrblk = (mlk_shrblk_ptr_t)R2A(search_bucket->shrblk);
+ if (d == search_shrblk)
+ {
+ assert(0 != (bucket->usedmap & (1U << ((num_buckets + si - bi) % num_buckets))));
+ search_bucket->shrblk = 0;
+ search_bucket->hash = 0;
+ bucket->usedmap &= ~(1U << ((num_buckets + si - bi) % num_buckets));
+ return;
+ }
+ }
+ assert(usedmap);
+}
+
+/* Build the hash value for a shrblk by following parent pointers recursively and hashing the shrsubs from the top.
+ * Keep in sync with MLK_PVTBLK_SUBHASH_GEN().
+ *
+ * Note: At some point we might consider adding a hash field to the shrblk to make this routine trivial at the cost of some space.
+ * We could make up for it by taking the hash value out of the shrhash at the cost of an extra R2A() and shrblk reference
+ * for each bucket comparison. For now the selected options seem reasonable.
+ */
+void mlk_shrhash_val_build(mlk_shrblk_ptr_t d, uint4 *total_len, hash128_state_t *hs)
+{
+ mlk_shrsub_ptr_t shrsub;
+
+ if (d->parent)
+ mlk_shrhash_val_build((mlk_shrblk_ptr_t)R2A(d->parent), total_len, hs);
+ shrsub = (mlk_shrsub_ptr_t)R2A(d->value);
+ *total_len += shrsub->length + 1;
+ gtmmrhash_128_ingest(hs, &shrsub->length, shrsub->length + 1);
+}
diff --git a/sr_port/mlk_shrblk_find.c b/sr_port/mlk_shrblk_find.c
index c8f603d..dfcfd4b 100755
--- a/sr_port/mlk_shrblk_find.c
+++ b/sr_port/mlk_shrblk_find.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001, 2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -58,6 +58,8 @@ boolean_t mlk_find_blocking_child_lock(mlk_pvtblk *p, mlk_shrblk_ptr_t child, UI
return blocked;
}
+mlk_shrblk_ptr_t mlk_shrhash_find(mlk_pvtblk *p, int subnum, unsigned char *subval, unsigned char sublen, mlk_shrblk_ptr_t parent);
+
boolean_t mlk_shrblk_find(mlk_pvtblk *p, mlk_shrblk_ptr_t *ret, UINTPTR_T auxown)
{
boolean_t blocked;
@@ -66,9 +68,12 @@ boolean_t mlk_shrblk_find(mlk_pvtblk *p, mlk_shrblk_ptr_t *ret, UINTPTR_T auxown
mlk_prcblk_ptr_t pr;
mlk_shrblk_ptr_t pnt, d, d0, d1, dhead;
mlk_shrsub_ptr_t dsub;
- ptroff_t *chld_of_pnt, *cop1;
+ ptroff_t *chld_of_pnt;
unsigned char *cp;
uint4 yield_pid;
+# ifdef DEBUG
+ mlk_shrblk_ptr_t dh;
+# endif
DCL_THREADGBL_ACCESS;
blocked = FALSE;
@@ -77,91 +82,81 @@ boolean_t mlk_shrblk_find(mlk_pvtblk *p, mlk_shrblk_ptr_t *ret, UINTPTR_T auxown
*/
*ret = 0;
SETUP_THREADGBL_ACCESS;
- for (pnt = 0 , chld_of_pnt = (ptroff_t *)&p->ctlptr->blkroot , i = p->subscript_cnt , cp = p->value ;
+ for (pnt = NULL , chld_of_pnt = (ptroff_t *)&p->ctlptr->blkroot , i = p->subscript_cnt , cp = p->value ;
i > 0 ; i-- , pnt = d , chld_of_pnt = (ptroff_t *)&d->children, cp += slen)
{
slen = *cp++;
if (!*chld_of_pnt)
{
+ assert(NULL == mlk_shrhash_find(p, p->subscript_cnt - i, cp, slen, pnt));
if (!(d = mlk_shrblk_create(p, cp, slen, pnt, chld_of_pnt, i)))
+ {
+ assert(NULL == mlk_shrhash_find(p, p->subscript_cnt - i, cp, slen, pnt));
return TRUE;
+ }
+ assert((dh = mlk_shrhash_find(p, p->subscript_cnt - i, cp, slen, pnt)) == d);
A2R(d->lsib, d);
A2R(d->rsib, d);
} else
{
- for (d = (mlk_shrblk_ptr_t)R2A(*chld_of_pnt), dhead = d , cop1 = 0; ; d = (mlk_shrblk_ptr_t)R2A(d->rsib))
- {
- dsub = (mlk_shrsub_ptr_t)R2A(d->value);
- j = memvcmp(cp, slen, dsub->data, dsub->length);
- if (!j)
- { /* We found the right node */
- if (d->owner)
- {
- if (d->owner != process_id || d->auxowner != auxown)
- { /* If owned and not owned by us check if owner is alive */
- if (is_proc_alive(d->owner, IMAGECNT(d->image_count)))
- { /* Signal that this lock request is blocked by this node */
- p->blocked = d;
- p->blk_sequence = d->sequence;
- TREF(mlk_yield_pid) = 0;
- blocked = TRUE;
- } else
- { /* Owner is dead so release this node */
- d->owner = 0;
- d->auxowner = 0;
- }
- }
- } else if ((MLK_FAIRNESS_DISABLED != TREF(mlk_yield_pid)) && d->pending)
- { /* If not owned by us, but there is another process waiting for it at the start of
- * the wait queue, then yield to it once. If we find the same process at the start
- * of the wait queue again, then dont yield anymore to avoid starvation. If we find
- * a different pid though, note it down and give it a fresh new chance. Since
- * additions to the wait queue happen at the end, we will eventually get our turn
- * this way (won't starve). Fairness algorithm will not kick in if it is disabled
- * which is indicated by setting TREF(mlk_yield_pid) to MLK_FAIRNESS_DISABLED.
- */
- pr = (mlk_prcblk_ptr_t)R2A(d->pending);
- yield_pid = TREF(mlk_yield_pid);
- assert(yield_pid != process_id);
- assert(pr->process_id);
- if ((pr->process_id != yield_pid) && (process_id != pr->process_id))
- {
+ d = mlk_shrhash_find(p, p->subscript_cnt - i, cp, slen, pnt);
+ if (NULL != d)
+ { /* We found the right node */
+ if (d->owner)
+ {
+ if (d->owner != process_id || d->auxowner != auxown)
+ { /* If owned and not owned by us check if owner is alive */
+ if (is_proc_alive(d->owner, IMAGECNT(d->image_count)))
+ { /* Signal that this lock request is blocked by this node */
p->blocked = d;
p->blk_sequence = d->sequence;
- TREF(mlk_yield_pid) = pr->process_id;
- blocked =TRUE;
- /* Give the first waiting process a nudge to wake up */
- ctl = p->ctlptr;
- mlk_wake_pending(ctl, d, p->region);
+ TREF(mlk_yield_pid) = 0;
+ blocked = TRUE;
+ } else
+ { /* Owner is dead so release this node */
+ d->owner = 0;
+ d->auxowner = 0;
}
}
- break;
+ } else if ((MLK_FAIRNESS_DISABLED != TREF(mlk_yield_pid)) && d->pending)
+ { /* If not owned by us, but there is another process waiting for it at the start of
+ * the wait queue, then yield to it once. If we find the same process at the start
+ * of the wait queue again, then dont yield anymore to avoid starvation. If we find
+ * a different pid though, note it down and give it a fresh new chance. Since
+ * additions to the wait queue happen at the end, we will eventually get our turn
+ * this way (won't starve). Fairness algorithm will not kick in if it is disabled
+ * which is indicated by setting TREF(mlk_yield_pid) to MLK_FAIRNESS_DISABLED.
+ */
+ pr = (mlk_prcblk_ptr_t)R2A(d->pending);
+ yield_pid = TREF(mlk_yield_pid);
+ assert(yield_pid != process_id);
+ assert(pr->process_id);
+ if ((pr->process_id != yield_pid) && (process_id != pr->process_id))
+ {
+ p->blocked = d;
+ p->blk_sequence = d->sequence;
+ TREF(mlk_yield_pid) = pr->process_id;
+ blocked =TRUE;
+ /* Give the first waiting process a nudge to wake up */
+ ctl = p->ctlptr;
+ mlk_wake_pending(ctl, d, p->region);
+ }
}
- if (j < 0)
- { /* Insert new sibling to left of existing sibling */
- if (d == dhead) /* New entry will be first in list */
- cop1 = chld_of_pnt;
- d0 = (mlk_shrblk_ptr_t)R2A(d->lsib);
- d1 = d;
- if (!(d = mlk_shrblk_create(p, cp, slen, pnt, cop1, i)))
- return TRUE; /* resource starve -- no room for new shrblk */
- A2R(d->lsib, d0);
- A2R(d->rsib, d1);
- A2R(d0->rsib, d);
- A2R(d1->lsib, d);
- break;
- } else if ((mlk_shrblk_ptr_t)R2A(d->rsib) == dhead)
- { /* Insert new sibling to right of existing sibling */
- d1 = (mlk_shrblk_ptr_t)R2A(d->rsib);
- d0 = d;
- if (!(d = mlk_shrblk_create(p, cp, slen, pnt, cop1, i)))
- return TRUE; /* resource starve -- no room for new shrblk */
- A2R(d->lsib, d0);
- A2R(d->rsib, d1);
- A2R(d0->rsib, d);
- A2R(d1->lsib, d);
- break;
+ } else
+ { /* Add a new shrblk node to the end of the list */
+ d = (mlk_shrblk_ptr_t)R2A(*chld_of_pnt);
+ d0 = d;
+ d1 = (mlk_shrblk_ptr_t)R2A(d->lsib);
+ if (!(d = mlk_shrblk_create(p, cp, slen, pnt, NULL, i)))
+ {
+ assert(NULL == mlk_shrhash_find(p, p->subscript_cnt - i, cp, slen, pnt));
+ return TRUE; /* resource starve -- no room for new shrblk */
}
+ assert((dh = mlk_shrhash_find(p, p->subscript_cnt - i, cp, slen, pnt)) == d);
+ A2R(d->rsib, d0);
+ A2R(d->lsib, d1);
+ A2R(d0->lsib, d);
+ A2R(d1->rsib, d);
}
}
/* When we get to the last "subscript", it's node is our lock target */
@@ -175,3 +170,39 @@ boolean_t mlk_shrblk_find(mlk_pvtblk *p, mlk_shrblk_ptr_t *ret, UINTPTR_T auxown
}
return blocked;
}
+
+mlk_shrblk_ptr_t mlk_shrhash_find(mlk_pvtblk *p, int subnum, unsigned char *subval, unsigned char sublen, mlk_shrblk_ptr_t parent)
+{
+ mlk_shrblk_ptr_t res = NULL, search_shrblk;
+ mlk_shrsub_ptr_t search_sub;
+ int bi, si;
+ uint4 hash, num_buckets, usedmap;
+ mlk_shrhash_ptr_t shrhash, bucket, search_bucket;
+
+ shrhash = (mlk_shrhash_ptr_t)R2A(p->ctlptr->blkhash);
+ num_buckets = p->ctlptr->num_blkhash;
+ hash = MLK_PVTBLK_SUBHASH(p, subnum);
+ bi = hash % num_buckets;
+ bucket = &shrhash[bi];
+ usedmap = bucket->usedmap;
+ for (si = bi ; 0 != usedmap ; (si = (si + 1) % num_buckets), (usedmap >>= 1))
+ {
+ if (0 == (usedmap & 1U))
+ continue;
+ search_bucket = &shrhash[si];
+ if (search_bucket->hash != hash)
+ continue;
+ assert(0 != search_bucket->shrblk);
+ search_shrblk = (mlk_shrblk_ptr_t)R2A(search_bucket->shrblk);
+ if ((!((NULL == parent) && (0 == search_shrblk->parent)))
+ && ((mlk_shrblk_ptr_t)R2A(search_shrblk->parent) != parent))
+ continue;
+ search_sub = (mlk_shrsub_ptr_t)R2A(search_shrblk->value);
+ if (0 != memvcmp(subval, sublen, search_sub->data, search_sub->length))
+ continue;
+ res = search_shrblk;
+ break;
+ }
+ return res;
+}
+
diff --git a/sr_port/mlk_shrblk_sort.c b/sr_port/mlk_shrblk_sort.c
new file mode 100644
index 0000000..151cabc
--- /dev/null
+++ b/sr_port/mlk_shrblk_sort.c
@@ -0,0 +1,136 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "mlkdef.h"
+#include "mmemory.h"
+
+mlk_shrblk_ptr_t mlk_shrblk_sort(mlk_shrblk_ptr_t head);
+
+void mlk_shrblk_split(mlk_shrblk_ptr_t head, mlk_shrblk_ptr_t *lhead, mlk_shrblk_ptr_t *rhead);
+mlk_shrblk_ptr_t mlk_shrblk_merge(mlk_shrblk_ptr_t lhead, mlk_shrblk_ptr_t rhead);
+
+/* Do an in-place sort of this level of shrblks, starting from head, returning the new first shrblk. */
+mlk_shrblk_ptr_t mlk_shrblk_sort(mlk_shrblk_ptr_t head)
+{
+ mlk_shrblk_ptr_t lhead, rhead;
+
+ if ((mlk_shrblk_ptr_t)R2A(head->rsib) == head)
+ {
+ assert((mlk_shrblk_ptr_t)R2A(head->lsib) == head);
+ return head;
+ }
+ assert((mlk_shrblk_ptr_t)R2A(head->lsib) != head);
+ mlk_shrblk_split(head, &lhead, &rhead);
+ lhead = mlk_shrblk_sort(lhead);
+ rhead = mlk_shrblk_sort(rhead);
+ return mlk_shrblk_merge(lhead, rhead);
+}
+
+void mlk_shrblk_split(mlk_shrblk_ptr_t head, mlk_shrblk_ptr_t *lhead, mlk_shrblk_ptr_t *rhead)
+{
+ mlk_shrblk_ptr_t cur, left = NULL, right = NULL;
+
+ cur = head;
+ while (TRUE)
+ {
+ if (NULL == left)
+ *lhead = cur;
+ else
+ {
+ A2R(left->rsib, cur);
+ A2R(cur->lsib, left);
+ }
+ left = cur;
+ cur = (mlk_shrblk_ptr_t)R2A(cur->rsib);
+ if (cur == head)
+ {
+ assert(NULL != right);
+ break;
+ }
+ if (NULL == right)
+ *rhead = cur;
+ else
+ {
+ A2R(right->rsib, cur);
+ A2R(cur->lsib, right);
+ }
+ right = cur;
+ cur = (mlk_shrblk_ptr_t)R2A(cur->rsib);
+ if (cur == head)
+ break;
+ }
+ A2R((*lhead)->lsib, left);
+ A2R((*rhead)->lsib, right);
+ A2R(left->rsib, *lhead);
+ A2R(right->rsib, *rhead);
+}
+
+mlk_shrblk_ptr_t mlk_shrblk_merge(mlk_shrblk_ptr_t lhead, mlk_shrblk_ptr_t rhead)
+{
+ mlk_shrblk_ptr_t left, right, ltail, rtail, head = NULL, tail;
+ mlk_shrsub_ptr_t lsub, rsub;
+
+ ltail = (mlk_shrblk_ptr_t)R2A(lhead->lsib);
+ rtail = (mlk_shrblk_ptr_t)R2A(rhead->lsib);
+ left = lhead;
+ lsub = (mlk_shrsub_ptr_t)R2A(left->value);
+ right = rhead;
+ rsub = (mlk_shrsub_ptr_t)R2A(right->value);
+ while (TRUE)
+ {
+ if (0 > memvcmp(lsub->data, lsub->length, rsub->data, rsub->length))
+ {
+ if (NULL == head)
+ head = left;
+ else
+ {
+ A2R(tail->rsib, left);
+ A2R(left->lsib, tail);
+ }
+ tail = left;
+ left = (mlk_shrblk_ptr_t)R2A(left->rsib);
+ if (left == lhead)
+ {
+ A2R(tail->rsib, right);
+ A2R(right->lsib, tail);
+ A2R(head->lsib, rtail);
+ A2R(rtail->rsib, head);
+ break;
+ }
+ lsub = (mlk_shrsub_ptr_t)R2A(left->value);
+ }
+ else
+ {
+ if (NULL == head)
+ head = right;
+ else
+ {
+ A2R(tail->rsib, right);
+ A2R(right->lsib, tail);
+ }
+ tail = right;
+ right = (mlk_shrblk_ptr_t)R2A(right->rsib);
+ if (right == rhead)
+ {
+ A2R(tail->rsib, left);
+ A2R(left->lsib, tail);
+ A2R(head->lsib, ltail);
+ A2R(ltail->rsib, head);
+ break;
+ }
+ rsub = (mlk_shrsub_ptr_t)R2A(right->value);
+ }
+ }
+ return head;
+}
diff --git a/sr_port/mlk_unlock.c b/sr_port/mlk_unlock.c
index de91d71..5699b59 100755
--- a/sr_port/mlk_unlock.c
+++ b/sr_port/mlk_unlock.c
@@ -92,6 +92,6 @@ void mlk_unlock(mlk_pvtblk *p)
csa->nl->lockspacefull_logged = FALSE; /* Allow syslog writes if enough free space is established. */
REL_LOCK_CRIT(csa, p->region, was_crit);
} else /* acc_meth == dba_usr */
- gvusr_unlock(p->total_length, &p->value[0], p->region);
+ gvusr_unlock(p->nref_length, &p->value[0], p->region);
return;
}
diff --git a/sr_port/mlk_wake_pending.c b/sr_port/mlk_wake_pending.c
index 350a921..d9e73f7 100755
--- a/sr_port/mlk_wake_pending.c
+++ b/sr_port/mlk_wake_pending.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -66,47 +67,17 @@ void mlk_wake_pending(mlk_ctldata_ptr_t ctl,
assert(!d->owner);
d->sequence = csa->hdr->trans_hist.lock_sequence++; /* This node is being awakened (GTCM) */
BG_TRACE_PRO_ANY(csa, mlock_wakeups); /* Record halted slumbers */
- if (reg->dyn.addr->acc_meth == dba_bg &&
- csa->hdr->clustered)
+ for (pr = (mlk_prcblk_ptr_t)R2A(d->pending), lcnt = ctl->max_prccnt; lcnt; lcnt--)
{
- remote_pid = FALSE;
- for (empty_slot = ctl->clus_pids,
- ctop = &ctl->clus_pids[NUM_CLST_LCKS-1];
- *empty_slot && empty_slot <= ctop; empty_slot++)
- ;
- for (pr = (mlk_prcblk_ptr_t)R2A(d->pending), lcnt = ctl->max_prccnt; lcnt; lcnt--)
- {
- next = (pr->next) ? (mlk_prcblk_ptr_t)R2A(pr->next) : 0; /* in case it's deleted */
- if ((pr->process_id & NODENUMBER) == (process_id & NODENUMBER))
- {
- DO_CRIT_WAKE;
- } else if (empty_slot <= ctop)
- {
- remote_pid = TRUE;
- *empty_slot = pr->process_id;
- empty_slot++;
- }
- if (next)
- pr = next;
- else
- break;
- }
- if (remote_pid)
- ccp_cluster_lock_wake(reg);
- } else
- {
- for (pr = (mlk_prcblk_ptr_t)R2A(d->pending), lcnt = ctl->max_prccnt; lcnt; lcnt--)
- {
- next = (pr->next) ? (mlk_prcblk_ptr_t)R2A(pr->next) : 0; /* in case it's deleted */
- DO_CRIT_WAKE;
+ next = (pr->next) ? (mlk_prcblk_ptr_t)R2A(pr->next) : 0; /* in case it's deleted */
+ DO_CRIT_WAKE;
- /* Wake one process to keep things orderly, if it loses its way, others
- * will jump in after a timout */
- if (GONE == crit_wake_res && next)
- pr = next;
- else
- break;
- }
+ /* Wake one process to keep things orderly, if it loses its way, others
+ * will jump in after a timout */
+ if (GONE == crit_wake_res && next)
+ pr = next;
+ else
+ break;
}
/* The assertpro is to safeguard us against cycles/loops in the "pending" linked list. This way we dont get into an
* infinite loop and yet get a core dump to see how we got ourselves into this out-of-design state.
diff --git a/sr_port/mlkdef.h b/sr_port/mlkdef.h
index 96a0050..bd637db 100755
--- a/sr_port/mlkdef.h
+++ b/sr_port/mlkdef.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001, 2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -28,7 +28,7 @@ typedef struct mlk_tp_struct
typedef struct /* One of these nodes is required for each process which is blocked on a lock */
{
- ptroff_t next; /* relative pointer to the next mlk_prcblk. If the entry is in the free
+ ptroff_t next; /* relative pointer to the next mlk_prcblk. If the entry is in the free
* list, then this is a relative pointer to the next free entry. */
uint4 process_id; /* the pid of the blocked process */
short ref_cnt; /* number of times process references prcblk */
@@ -55,16 +55,24 @@ typedef struct /* lock node. The member descriptions below are correct if th
* sequence numbers do not match, then we must assume that the
* lock was stolen from us by LKE or some other abnormal event. */
UINTPTR_T auxowner; /* For gt.cm, this contains information on the remote owner of the lock.*/
-# ifdef VMS
- int4 image_count; /* the number of image activiations since login */
- int4 login_time; /* the low-order 32 bits of the time that the process logged in. login_time
- * and image_count can be used together to determine whether the process has
- * abnormally terminated. */
-# endif
int4 auxpid; /* If non-zero auxowner, this is the pid of the client that is holding the lock */
unsigned char auxnode[16]; /* If non-zero auxowner, this is the nodename of the client that is holding the lock */
} mlk_shrblk;
+typedef struct
+{
+ ptroff_t shrblk; /* relative pointer to the shrblk referenced by this hash bucket, or zero for empty. */
+ uint4 hash; /* hash value associated with the shrblk referenced by this hash bucket
+ * Compare the hash value before comparing the pvtblk value against the
+ * shrblk/shrsub chain
+ */
+ uint4 usedmap; /* Bitmap representing the bucket neighborhood, with bit N set if (bucket+N) % nbuckets
+ * is an overflow from this bucket (or the bucket itself, for N=0.)
+ */
+} mlk_shrhash;
+
+#define MLK_SHRHASH_NEIGHBORS (SIZEOF(((mlk_shrhash *)0)->usedmap) * BITS_PER_UCHAR)
+
typedef struct /* the subscript value of a single node in a tree. Stored separately so that
* the mlk_shrblk's can all have fixed positions, and yet we can
* efficiently store variable length subscripts. Each entry is rounded to
@@ -77,8 +85,7 @@ typedef struct /* the subscript value of a single node in a tree. Stored sep
unsigned char data[1]; /* the data itself, actually data[length] */
} mlk_shrsub;
-/* WARNING: GT.CM and GT.CX rely on the fact that this structure is at the start of the lock space
- * and that the array of pids is at the top of this structure */
+/* WARNING: GT.CM relies on the fact that this structure is at the start of the lock space */
#define NUM_CLST_LCKS 64
typedef struct mlk_ctldata_struct /* this describes the entire shared lock section */
@@ -86,17 +93,18 @@ typedef struct mlk_ctldata_struct /* this describes the entire shared lock secti
ptroff_t prcfree; /* relative pointer to the first empty mlk_prcblk */
ptroff_t blkfree; /* relative pointer to the first free mlk_shrblk.
* if zero, the blkcnt must also equal zero */
+ ptroff_t blkhash; /* relative pointer to the first mlk_shrhash */
ptroff_t blkroot; /* relative pointer to the first name level mlk_shrblk.
* if zero, then there are no locks in this section */
ptroff_t subbase; /* relative pointer to the base of the mlk_shrsub area */
ptroff_t subfree; /* relative pointer to the first free cell in the shrsub area */
ptroff_t subtop; /* relative pointer to the top of the shrsub area */
uint4 max_prccnt; /* maximum number of entries in the prcfree chain */
- uint4 max_blkcnt; /* maximum number of entires in the blkfree chain */
+ uint4 max_blkcnt; /* maximum number of entries in the blkfree chain */
+ uint4 num_blkhash; /* number of hash buckets */
int4 prccnt; /* number of entries in the prcfree chain */
- int4 blkcnt; /* number of entires in the blkfree chain */
- uint4 clus_pids[NUM_CLST_LCKS]; /* Pids of processes on other machines in the cluster to be woken up */
- unsigned int wakeups; /* lock wakeup counter */
+ int4 blkcnt; /* number of entries in the blkfree chain */
+ unsigned int wakeups; /* lock wakeup counter */
} mlk_ctldata;
/* Define types for shared memory resident structures */
@@ -114,6 +122,7 @@ typedef mlk_prcblk *mlk_prcblk_ptr_t;
typedef mlk_shrblk *mlk_shrblk_ptr_t;
typedef mlk_shrsub *mlk_shrsub_ptr_t;
typedef mlk_ctldata *mlk_ctldata_ptr_t;
+typedef mlk_shrhash *mlk_shrhash_ptr_t;
#ifdef DB64
# ifdef __osf__
@@ -139,8 +148,7 @@ typedef struct mlk_pvtblk_struct /* one of these entries exists for each nref wh
uint4 sequence; /* shrblk sequence for nodptr node (node we want) */
uint4 blk_sequence; /* shrblk sequence for blocked node (node preventing our lock) */
mlk_tp *tp; /* pointer to saved tp information */
- uint4 total_length; /* the total length of the 'value' string. */
- uint4 total_len_padded; /* Length with padding to 4 bytes for each substring */
+ uint4 nref_length; /* the length of the nref portion of the 'value' string. */
unsigned short subscript_cnt; /* the number of subscripts (plus one for the name) in this nref */
unsigned level : 9; /* incremental lock level */
unsigned zalloc : 1; /* if true, there is a ZALLOC posted for this lock */
@@ -154,12 +162,27 @@ typedef struct mlk_pvtblk_struct /* one of these entries exists for each nref wh
unsigned char trans; /* boolean indicating whether already in list */
unsigned char translev; /* level for transaction (accounting for redundancy) */
unsigned char old; /* oldness boolean used for backing out zallocates */
- unsigned char filler[1]; /* Fill out to align data on word boundary */
-
- unsigned char value[1]; /* actually, an array unsigned char value[total_length]. This string
- * consists of the nref's subscripts each preceeded by the length of
- * the subscript, held as a single byte. For example, ^A(45), would be
- * represented as 02 5E 41 02 34 35, and total length would be 5. */
+ unsigned char filler[5]; /* Fill out to align data on word boundary */
+# ifdef DEBUG
+ size_t alloc_size;
+ uint4 alloc_nref_len;
+ uint4 alloc_sub_cnt;
+ uint4 alloc_aux_size;
+# endif
+ unsigned char value[1]; /* Actually, an array unsigned char value[N], where N is based on the
+ * nref_length, subscript_cnt, and possibly a client id. The initial
+ * portion consists of the nref's subscripts, each preceded by the length
+ * of the subscript, held as a single byte. For example, ^A(45), would be
+ * represented as 02 5E 41 02 34 35, and total length would be 5.
+ * Following that (aligned to uint4) is an array of subscript_cnt uint4
+ * hash values.
+ * For GT.CM servers, the hash values are followed by a client id length
+ * as a single byte followed by server-specific data of that length.
+ * The MLK_PVTBLK_SIZE() macro determines the total size of the block,
+ * excluding any GT.CM portion.
+ * The MLK_PVTBLK_TAIL() macro may be used by GT.CM servers to locate
+ * their client id information.
+ */
} mlk_pvtblk;
/* convert relative pointer to absolute pointer */
@@ -168,14 +191,74 @@ typedef struct mlk_pvtblk_struct /* one of these entries exists for each nref wh
/* store absolute pointer Y in X as a relative pointer */
#define A2R(X, Y) ((X) = (ptroff_t)(((sm_uc_ptr_t)(Y)) - ((sm_uc_ptr_t) &(X))))
-/* compute the true size of a mlk_pvtblk */
-#define MLK_PVTBLK_SIZE(DLEN, SCNT) (SIZEOF(mlk_pvtblk) - 1 + (DLEN) + (SCNT))
+/* compute the true size of a mlk_pvtblk, excluding any GT.CM id */
+#define MLK_PVTBLK_SIZE(NREF_LEN, SUBCNT) (ROUND_UP(SIZEOF(mlk_pvtblk) - 1 + (NREF_LEN), SIZEOF(uint4)) \
+ + SIZEOF(uint4) * (SUBCNT))
+
+#define MLK_PVTBLK_ALLOC(NREF_LEN, SUBCNT, AUX_LEN, RET) \
+MBSTART { \
+ mlk_pvtblk *ret; \
+ size_t alloc_size; \
+ uint4 alloc_nref_len = (NREF_LEN); \
+ uint4 alloc_sub_cnt = (SUBCNT); \
+ uint4 alloc_aux_size = (AUX_LEN); \
+ \
+ alloc_size = MLK_PVTBLK_SIZE(NREF_LEN, SUBCNT) + (AUX_LEN); \
+ ret = (mlk_pvtblk*)malloc(alloc_size); \
+ memset(ret, 0, SIZEOF(mlk_pvtblk) - 1); \
+ DEBUG_ONLY(ret->alloc_size = alloc_size); \
+ DEBUG_ONLY(ret->alloc_nref_len = alloc_nref_len); \
+ DEBUG_ONLY(ret->alloc_sub_cnt = alloc_sub_cnt); \
+ DEBUG_ONLY(ret->alloc_aux_size = alloc_aux_size); \
+ (RET) = ret; \
+} MBEND
+
+/* compute the location of the Nth subscript's hash */
+#define MLK_PVTBLK_SUBHASH(PVTBLK, N) (((uint4 *)&(PVTBLK)->value[ROUND_UP((PVTBLK)->nref_length, SIZEOF(uint4))])[N])
+
+/* populate hash data from nref data - keep in sync with the versions in mlk_pvtblk_create() and mlk_shrhash_delete() */
+#define MLK_PVTBLK_SUBHASH_GEN(PVTBLK) \
+MBSTART { \
+ unsigned char *cp; \
+ int hi; \
+ hash128_state_t accstate, tmpstate; \
+ gtm_uint16 hashres; \
+ \
+ HASH128_STATE_INIT(accstate, 0); \
+ for (cp = (PVTBLK)->value, hi = 0; hi < (PVTBLK)->subscript_cnt; hi++) \
+ { \
+ gtmmrhash_128_ingest(&accstate, cp, *cp + 1); \
+ cp += *cp + 1; \
+ tmpstate = accstate; \
+ gtmmrhash_128_result(&tmpstate, (cp - (PVTBLK)->value), &hashres); \
+ MLK_PVTBLK_SUBHASH(PVTBLK, hi) = (uint4)hashres.one; \
+ } \
+} MBEND
+
+/* compute the address immediately after the pvtblk */
+#define MLK_PVTBLK_TAIL(PVTBLK) ((unsigned char *)&MLK_PVTBLK_SUBHASH(PVTBLK, (PVTBLK)->subscript_cnt))
+
+#ifdef DEBUG
+#define MLK_PVTBLK_VALIDATE(PVTBLK) \
+MBSTART { \
+ unsigned char *tail = MLK_PVTBLK_TAIL(PVTBLK); \
+ \
+ assert((PVTBLK)->nref_length == (PVTBLK)->alloc_nref_len); \
+ assert((PVTBLK)->subscript_cnt == (PVTBLK)->alloc_sub_cnt); \
+ assert((PVTBLK)->alloc_size == (MLK_PVTBLK_SIZE((PVTBLK)->nref_length, (PVTBLK)->subscript_cnt) \
+ + (PVTBLK)->alloc_aux_size)); \
+ if(0 != (PVTBLK)->alloc_aux_size) \
+ assert(tail[0] + 1 == (PVTBLK)->alloc_aux_size); \
+} MBEND
+#else
+#define MLK_PVTBLK_VALIDATE(PVTBLK)
+#endif
/* compute the true size of a mlk_shrsub include stddef.h*/
#define MLK_SHRSUB_SIZE(X) (ROUND_UP(OFFSETOF(mlk_shrsub, data[0]) + (X)->length, SIZEOF(ptroff_t)))
/* SIZEOF(ptroff_t) - 1 is used for padding because mlk_shrblk_create() ROUND_UPs to SIZEOF(ptroff_t) aligned boundary */
#define MLK_PVTBLK_SHRSUB_SIZE(PVTBLK, SHRSUBNEED) \
-(SHRSUBNEED * (OFFSETOF(mlk_shrsub, data[0]) + SIZEOF(ptroff_t) - 1) + PVTBLK->total_length)
+(SHRSUBNEED * (OFFSETOF(mlk_shrsub, data[0]) + SIZEOF(ptroff_t) - 1) + PVTBLK->nref_length)
#define DEF_LOCK_SIZE OS_PAGELET_SIZE * 200
diff --git a/sr_port/mprof_funcs.c b/sr_port/mprof_funcs.c
index cdddbba..31f6e05 100644
--- a/sr_port/mprof_funcs.c
+++ b/sr_port/mprof_funcs.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -976,6 +976,8 @@ STATICFNDEF void parse_gvn(mval *gvn)
spt = &(TREF(mprof_ptr))->subsc[0];
spt->mvtype = MV_STR;
spt->str.addr = mpsp;
+ if (c_ref >= c_top)
+ RTS_ERROR_VIEWNOTFOUND("Invalid global name");
ch = *mpsp++ = *c_ref++;
if (!ISALPHA_ASCII(ch) && ('%' != ch))
RTS_ERROR_VIEWNOTFOUND("Invalid global name");
diff --git a/sr_port/mtables.c b/sr_port/mtables.c
index 69de5c8..b7dbf8b 100644
--- a/sr_port/mtables.c
+++ b/sr_port/mtables.c
@@ -277,6 +277,9 @@ LITDEF gtmImageName gtmImageNames[n_image_types] =
#undef IMAGE_TABLE_ENTRY
};
+#define DEFAULT_ETRAP "IF $ZJOBEXAM()"
+LITDEF mval default_etrap = DEFINE_MVAL_LITERAL(MV_STR, 0 , 0 , (SIZEOF(DEFAULT_ETRAP) - 1), DEFAULT_ETRAP , 0 , 0 );
+
LITDEF mname_entry null_mname_entry =
{
{UNIX_ONLY_COMMA(0) 0, NULL},
diff --git a/sr_port/mu_freeze_ch.c b/sr_port/mu_freeze_ch.c
old mode 100755
new mode 100644
index 4f28695..9ee8737
--- a/sr_port/mu_freeze_ch.c
+++ b/sr_port/mu_freeze_ch.c
@@ -26,11 +26,15 @@
#include "hashtab_int4.h" /* needed for tp.h */
#include "tp.h"
#include "interlock.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
+
GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_data *cs_data;
GBLREF tp_region *grlist;
GBLREF uint4 process_id;
+GBLREF jnlpool_addrs_ptr_t jnlpool; /* TP_CHANGE_REG */
CONDITION_HANDLER(mu_freeze_ch)
{
diff --git a/sr_port/mu_gv_cur_reg_init.c b/sr_port/mu_gv_cur_reg_init.c
index 45a9b89..80e01ea 100755
--- a/sr_port/mu_gv_cur_reg_init.c
+++ b/sr_port/mu_gv_cur_reg_init.c
@@ -24,6 +24,8 @@
GBLREF gd_region *gv_cur_region;
GBLREF gd_region *ftok_sem_reg;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF sgmnt_data *cs_data;
void mu_gv_cur_reg_init(void)
{
@@ -58,6 +60,8 @@ void mu_gv_cur_reg_free(void)
ftok_sem_reg = NULL;
}
gv_cur_region = NULL; /* Now that gv_cur_region is going to be freed, make it inaccessible before starting the free */
+ cs_addrs = NULL;
+ cs_data = NULL;
basedb_seg = basedb_reg->dyn.addr;
FILE_CNTL_FREE(basedb_seg);
statsdb_reg = basedb_reg + 1;
@@ -70,5 +74,11 @@ void mu_gv_cur_reg_free(void)
free(gdhdr->id);
gdhdr->id = NULL;
}
+ if (NULL != gdhdr->tab_ptr)
+ {
+ free_hashtab_mname(gdhdr->tab_ptr);
+ free(gdhdr->tab_ptr);
+ gdhdr->tab_ptr = NULL;
+ }
free(gdhdr);
}
diff --git a/sr_port/mu_int_err.c b/sr_port/mu_int_err.c
index e41ac59..2abb9a3 100755
--- a/sr_port/mu_int_err.c
+++ b/sr_port/mu_int_err.c
@@ -74,7 +74,7 @@ void mu_int_err(
unsigned char temp_bot;
unsigned char key_buffer[MAX_KEY_SZ];
unsigned char *temp;
- gv_key *tmp_gvkey = NULL;
+
if (!mu_int_errknt)
util_out_print("!/Block:Offset Level", TRUE);
mu_int_errknt++;
@@ -96,27 +96,6 @@ void mu_int_err(
if (sndata->sn_type)
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(5) err, 3, LEN_AND_STR((char*)util_buff),
(SPAN_NODE == sndata->sn_type) ? (sndata->span_prev_blk + 2) : (sndata->span_blk_cnt));
- else if (null_coll_type_err)
- {
- if (null_coll_type)
- gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) err, 6, rec_num, blk_id,
- LEN_AND_STR(GTM_NULL_TEXT), LEN_AND_STR(STD_NULL_TEXT));
- else
- gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) err, 6, rec_num, blk_id,
- LEN_AND_STR(STD_NULL_TEXT), LEN_AND_STR(GTM_NULL_TEXT));
- } else if (nct_err_type)
- {
- assert(NULL == tmp_gvkey);
- GVKEY_INIT(tmp_gvkey, DBKEYSIZE(MAX_KEY_SZ));
- memcpy(tmp_gvkey->base, bot, rec_len);
- tmp_gvkey->end = rec_len - 1;
- temp = (unsigned char*)format_targ_key(key_buffer,
- MAX_ZWR_KEY_SZ, tmp_gvkey, TRUE);
- fmtd_key_len = (int)(temp - key_buffer);
- key_buffer[fmtd_key_len] = '\0';
- gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) err, 2, LEN_AND_STR(key_buffer));
- GVKEY_FREE_IF_NEEDED(tmp_gvkey);
- }
else
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) err, 2, LEN_AND_STR((char*)util_buff));
if (do_path)
diff --git a/sr_port/mu_int_reg.c b/sr_port/mu_int_reg.c
index 19f4c3d..916a5fd 100644
--- a/sr_port/mu_int_reg.c
+++ b/sr_port/mu_int_reg.c
@@ -88,7 +88,7 @@ void mu_int_reg(gd_region *reg, boolean_t *return_value, boolean_t return_after_
mu_int_skipreg_cnt++;
return;
}
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
if (gv_cur_region->was_open)
{ /* already open under another name */
gv_cur_region->open = FALSE;
@@ -190,7 +190,7 @@ void mu_int_reg(gd_region *reg, boolean_t *return_value, boolean_t return_after_
ss_release(&csa->ss_ctx);
ointeg_this_reg = FALSE; /* Turn off ONLINE INTEG for this region */
assert(process_id != cnl->in_crit); /* Ensure ss_initiate released the crit before returning */
- assert(!FROZEN_HARD(csd)); /* Ensure region is unfrozen before returning from ss_initiate */
+ assert(!FROZEN_HARD(csa)); /* Ensure region is unfrozen before returning from ss_initiate */
assert(INTRPT_IN_SS_INITIATE != intrpt_ok_state); /* Ensure ss_initiate released intrpt_ok_state */
return;
}
diff --git a/sr_port/mu_reorg_upgrd_dwngrd.c b/sr_port/mu_reorg_upgrd_dwngrd.c
old mode 100755
new mode 100644
index 2327129..6991087
--- a/sr_port/mu_reorg_upgrd_dwngrd.c
+++ b/sr_port/mu_reorg_upgrd_dwngrd.c
@@ -51,6 +51,8 @@
#include "targ_alloc.h"
#include "util.h" /* for util_out_print prototype */
#include "wcs_flu.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
#define REORG_CONTINUE 1
#define REORG_BREAK 2
@@ -198,7 +200,7 @@ void mu_reorg_upgrd_dwngrd(void)
continue;
}
mu_reorg_process = TRUE; /* gvcst_init will use this value to use gtm_poollimit settings. */
- gvcst_init(reg);
+ gvcst_init(reg, NULL);
mu_reorg_process = FALSE;
assert(update_array != NULL);
/* access method stored in global directory and database file header might be different in which case
@@ -372,7 +374,7 @@ void mu_reorg_upgrd_dwngrd(void)
if (NULL == bml_lcl_buff)
bml_lcl_buff = malloc(BM_SIZE(BLKS_PER_LMAP));
memcpy(bml_lcl_buff, (blk_hdr_ptr_t)bml_sm_buff, BM_SIZE(BLKS_PER_LMAP));
- if (FALSE == cert_blk(reg, curbmp, (blk_hdr_ptr_t)bml_lcl_buff, 0, FALSE, NULL))
+ if (FALSE == cert_blk(reg, curbmp, (blk_hdr_ptr_t)bml_lcl_buff, 0, RTS_ERROR_ON_CERT_FAIL, NULL))
{ /* certify the block while holding crit as cert_blk uses fields from file-header (shared memory) */
assert(FALSE); /* in pro, skip ugprading/downgarding all blks in this unreliable local bitmap */
rel_crit(reg);
diff --git a/sr_port/mubclnup.c b/sr_port/mubclnup.c
index cab7428..d5bbf06 100755
--- a/sr_port/mubclnup.c
+++ b/sr_port/mubclnup.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -42,16 +42,16 @@
#include "gtmsource.h"
#include "gtmio.h"
-GBLREF spdesc stringpool;
-GBLREF tp_region *grlist;
-GBLREF tp_region *halt_ptr;
-GBLREF bool online;
-GBLREF bool error_mupip;
-GBLREF boolean_t backup_interrupted;
+GBLREF spdesc stringpool;
+GBLREF tp_region *grlist;
+GBLREF tp_region *halt_ptr;
+GBLREF bool online;
+GBLREF bool error_mupip;
+GBLREF boolean_t backup_interrupted;
-GBLREF backup_reg_list *mu_repl_inst_reg_list;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF boolean_t jnlpool_init_needed;
+GBLREF backup_reg_list *mu_repl_inst_reg_list;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF boolean_t jnlpool_init_needed;
error_def(ERR_FORCEDHALT);
@@ -152,15 +152,16 @@ void mubclnup(backup_reg_list *curr_ptr, clnup_stage stage)
break; /* NOTREACHED */
}
/* Release FTOK lock on the replication instance file if holding it */
- assert((NULL == jnlpool.jnlpool_dummy_reg) || (NULL != mu_repl_inst_reg_list) || jnlpool_init_needed);
- if ((NULL != mu_repl_inst_reg_list) && (NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open)
+ assert((NULL == jnlpool) || (NULL == jnlpool->jnlpool_dummy_reg) || (NULL != mu_repl_inst_reg_list) || jnlpool_init_needed);
+ if ((NULL != mu_repl_inst_reg_list) && (NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg)
+ && jnlpool->jnlpool_dummy_reg->open)
{
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(NULL != udi);
if (NULL != udi)
{ /* See gv_rundown.c comment for why ftok_sem_release 2nd parameter is FALSE below */
if (udi->grabbed_ftok_sem)
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, FALSE, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, FALSE, TRUE);
assert(!udi->grabbed_ftok_sem);
}
}
diff --git a/sr_port/mucregini.c b/sr_port/mucregini.c
index 52473fb..516d893 100644
--- a/sr_port/mucregini.c
+++ b/sr_port/mucregini.c
@@ -264,6 +264,7 @@ void mucregini(int4 blk_init_size)
NUM_CRIT_ENTRY(csd) = seg->mutex_slots;
csd->wcs_phase2_commit_wait_spincnt = WCS_PHASE2_COMMIT_DEFAULT_SPINCNT;
csd->defer_allocate = seg->defer_allocate;
+ csd->read_only = seg->read_only;
time(&ctime);
assert(SIZEOF(ctime) >= SIZEOF(int4));
csd->creation_time4 = (int4)ctime; /* Need only lower order 4-bytes of current time (in case system time is 8-bytes) */
diff --git a/sr_port/mumps.hlp b/sr_port/mumps.hlp
index 4b03711..c058457 100755
--- a/sr_port/mumps.hlp
+++ b/sr_port/mumps.hlp
@@ -58,7 +58,13 @@
In the GT.M programming environment, source routines are generated and
stored as standard UNIX files. They are created and edited with standard
- UNIX text editors.
+ UNIX text editors. GT.M accepts source lines of up to 8192 bytes. When
+ GT.M encounters a line with a length greater than 8192 bytes in a source
+ file, it emits a %GTM-W-LSEXPECTED warning. This warning identifies cases
+ where a line greater than 8192 bytes is split into multiple lines, which
+ causes statements beyond the character prior to the limit to execute
+ irrespective of any starting IF, ELSE or FOR commands. The 8192 byte limit
+ applies to XECUTE command arguments and Direct Mode input as well.
GT.M is designed to work with the operating system utilities and enhances
them when beneficial. The following sections describe the process of
@@ -2789,7 +2795,9 @@
defined above. If, at run-time, the pattern codes come into use and no
pattern definitions are available, GT.M issues a run-time error
(PATNOTFOUND). GT.M does not currently implement a mechanism for Y and Z
- patterns and continues to treat those as compile-time syntax errors.
+ patterns and continues to treat those as compile-time syntax errors. GT.M
+ defers literal optimizations involving patterns within an XECUTE as well
+ as evaluations that encounter issues with the pattern table.
Example:
@@ -2883,16 +2891,17 @@
M provides timeouts as a tool to retain program control over commands of
indefinite duration. A timeout consists of a colon (:) delimiter on an
argument, followed by a numeric expression specifying the number of
- seconds for M to attempt to execute the command. When the timeout is zero
- (0), M makes a single attempt to complete the command.
-
- GT.M has been designed to allow large timeout values, and to protect
- against arithmetic overflow when converting large timeout values to
- internal representations. When a command has a timeout, M maintains the
- $TEST intrinsic special variable as the command completes. If the command
- completes successfully, M sets $TEST to TRUE (1). If the command times out
- before successful completion, M sets $TEST to FALSE (0). When a command
- argument does not specify a timeout, M does not maintain $TEST.
+ seconds to millisecond (three decimal place) precision for M to attempt to
+ execute the command. When the timeout is zero (0), M makes a single
+ attempt to complete the command.
+
+ GT.M caps the maximum timeout to 999,999.999 seconds (about 11.5 days),
+ and converts values greater than the maximum timeout to that cap. When a
+ command has a timeout, M maintains the $TEST intrinsic special variable as
+ the command completes. If the command completes successfully, M sets $TEST
+ to TRUE (1). If the command times out before successful completion, M sets
+ $TEST to FALSE (0). When a command argument does not specify a timeout, M
+ does not maintain $TEST.
o LOCK
o JOB
@@ -3039,9 +3048,9 @@
**Note**
- While most commands and functions that use entryrefs permit argument
- indirection, M does not accept indirection that resolves to a combination
- of label and offset or offset and routine name.
+ GT.M accepts an offset without a label (for example +3^RTN) for an
+ entryref argument to DO, GOTO and ZGOTO but prohibits the same during
+ paramter passing with the JOB command.
Offsets provide an extremely useful tool for debugging. However, avoid
their use in production code because they generally produce maintenance
@@ -3587,6 +3596,8 @@
SET ^ID(NEXT)=RECORD,^XID(ZIP,NEXT)=""
TCOMMIT
+ %GTM-I-TPRESTART, Database /gbls/dtx/dtx.dat; code: L; blk: 0x00BA13DD in glbl: ^DTX; pvtmods: 0, blkmods: 1, blklvl: 1, type: 4, readset: 3, writeset: 1, local_tn: 0x00000000000002D0, zpos: LABEL+108^ROUTINENAME
+
* pvtmods - Is always less than or equal to blkmods. This means it can
be 1 only if "blkmods" is also 1. If it is 1, it means that process P1
was planning to UPDATE (not just READ) the block number (indicated as
@@ -3605,8 +3616,8 @@
* type - A value of 0,1,2,4 shows the restart occurred in the TP
transaction BEFORE executing TCOMMIT; whether it is a 0 or 1 or 2 or 4
should not matter to the user. These values would typically be used
- for debugging by Fidelity. A value of 3 shows the restart occurred at
- TCOMMIT time.
+ for debugging by your GT.M support channel. A value of 3 shows the
+ restart occurred at TCOMMIT time.
* readset - The number of GDS blocks that accessed as part of this TP
transaction in the region containing the global ("glbl: ..." in the
TPRESTART message).
@@ -3621,6 +3632,20 @@
number of TP transactions done by that process in the time interval
between the two messages.
+ **Note**
+
+ o Use VIEW [NO]LOGT[PRESTART][=intexpr] to enable or disable the logging
+ of TPRESTART messages. Note that you can use the
+ gtm_tprestart_log_delta and gtm_tprestart_log_first environment
+ variables to set the frequency of TPRESTART messages.
+ o Use VIEW [NO]LOGN[ONTP][=intexpr] to enable or disable the logging of
+ NONTPRESTART messages. This facility is the analog of TPRESTART
+ tracking, but for non-TP mini-transacstions. Note that you can use the
+ gtm_nontprestart_log_delta and gtm_nontprestart_log_first environment
+ variables to set the frequency of the NONTPRESTART messages.
+ o For more information, refer to "Key Words" and the Environment
+ Variables section of GT.M Administration and Operations Guide.
+
1 Commands
Commands
@@ -4292,6 +4317,14 @@
L[OCK][:tvexpr] [[-|+]nref|(nref[,...])[:numexpr] [,...]]
+ Currently, LOCK of an argument within a parenthetical list where the
+ argument includes an extrinsic function that performs LOCK, ZALLOCATE or
+ ZDEALLOCATE actions produces a BADLOCKNEST error except where there is
+ only one such argument, it is the first argument in the list and the
+ LOCK'ng as a consequence of the extrinsic function(s) is simple. Note that
+ this pattern may still produce some unintended outcomes, so FIS recommends
+ against its use.
+
2 Merge
Merge
@@ -6638,6 +6671,9 @@
S: displays the GT.M invocation stack
+ T: displays the cross-region summary (total) lines associated with G and L
+ codes
+
V: displays local and alias variables
* displays all possible types of ZSHOW information
@@ -7053,15 +7089,21 @@
Example:
- GTM>ZSYSTEM "ls *.m"
+ GTM>zsystem "ls *.m"
This uses ZSYSTEM to fork a process that then performs the ls command with
*.m as an argument to ls. Once the command completes, the forked process
terminates.
+ GTM>zsystem "echo 'hello world'"
+ hello world
+
+ This examples show a possible use of quoting with ZSYSTEM to run the echo
+ command.
+
Example:
- GTM>ZSYSTEM
+ GTM>zsystem
$
This ZSYSTEM has no argument so the forked process prompts for input.
@@ -8658,16 +8700,14 @@
| | | that the global directory defines |
| | | no additional regions. |
|-------------------+--------------+-------------------------------------|
- | | | When |
- | | | |
- | | | read-only processes are the active |
- | | | in a database, they cannot update |
- | | | the database including the file |
- | "GVSTAT" | region | header where GVSTATS are stored. |
- | | | Therefore their counts are only |
- | | | stored in associated shared memory |
- | | | and must be flushed to the file |
- | | | header by a process with write |
+ | | | When read-only processes are the |
+ | | | active in a database, they cannot |
+ | | | update the database including the |
+ | | | file header where GVSTATS are |
+ | "GVSTAT" | region | stored. Therefore their counts are |
+ | | | only stored in associated shared |
+ | | | memory and must be flushed to the |
+ | | | file header by a process with write |
| | | access, which might be a MUPIP |
| | | RUNDOWN. |
|-------------------+--------------+-------------------------------------|
@@ -9494,7 +9534,7 @@
2 $ZDATA()
$ZDATA()
- Extends $DATA() to reflects the current alias state of the lvn or name
+ Extends $DATA() to reflect the current alias state of the lvn or name
argument to identify alias and alias container variables. It treats
variables joined through pass-by-reference as well as TP RESTART variables
within a transaction as alias variables. However, it does not distinguish
@@ -12396,9 +12436,9 @@
When the environment variable gtmroutines is defined, GT.M initializes
$ZROUTINES to the value of gtmroutines. Otherwise, GT.M initializes
- $ZROUTINES to a null value. When $ZROUTINES is null, GT.M attempts to
- locate all source and object files in the current working directory.
- $ZROUTINES="" is equivalent to $ZROUTINES=".".
+ $ZROUTINES to ".". When $ZROUTINES is ".", GT.M attempts to locate all
+ source and object files in the current working directory. $ZROUTINES="" is
+ equivalent to $ZROUTINES=".".
Commands or functions such as DO, GOTO, ZGOTO, ZBREAK, ZPRINT, and $TEXT
may auto-ZLINK and thereby indirectly use $ZROUTINES. If their argument
@@ -12846,6 +12886,21 @@
This example sets $ZSTEP to code that displays the contents of the next
line to execute, and then enters Direct Mode.
+2 $ZSTRPllim
+ $ZSTRPllim
+
+ $ZSTRP[LLIM] provides a way for a process to limit its process private
+ memory used for local variable and scratch storage. When the value is 0 or
+ negative, the default, there is no limit. A positive value specifies a
+ byte limit. When a request for additional memory exceeds the limit, GT.M
+ does the expansion and then produces an STPCRIT error. By default, a later
+ request for memory produces an STPOFLOW, unless subsequent to STPCRIT ,
+ $ZSTRPLLIM has been set to the same or higher limit. Note that GT.M
+ allocates memory in large blocks so the interaction of $ZSTRPLLIM with
+ memory growth is not exact. When the gtm_string_pool_limit environment
+ variable specifies a positive value, GT.M uses it for the initial value of
+ $ZSTRPLLIM.
+
2 $ZSYstem
$ZSYstem
@@ -14285,7 +14340,7 @@
open a:(command="nestin":independent)::"PIPE"
use a
set key=$KEY
- write "Show ntestin still running after CLOSE of a",!
+ write "Show nestin still running after CLOSE of a",!
write "The parent process of 1 shows the parent shell has exited after CLOSE of a"
read line1,line2
use $principal
@@ -14303,9 +14358,9 @@
close c
quit
- This demonstrates that the created process nestin keeps running as an
+ This demonstrates that the created sub process nestin keeps running as an
INDEPENDENT process after the GT.M process CLOSEs the pipe. This GT.M
- process uses another PIPE device to return the process id of ntestin and
+ process uses another PIPE device to return the process id of nestin and
READ it into pid so that it may be killed by this or another process,
should that be appropriate.
@@ -14393,70 +14448,7 @@
Example:
- sh> mumps -run pipexample induceEAGAIN
- The active device is pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEAGAIN^pipexample" STDERR="piperr"
- $ZSTATUS="11,pipexample+9^pipexample,%SYSTEM-E-ENO11, Resource temporarily unavailable"
-
- sh> mumps -run retry^pipexample induceEAGAIN
- Try 0 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEAGAIN^pipexample 0" STDERR="piperr"
- ...Failed to perform non-blocked writes... Retrying write # 54
- ...Failed to perform non-blocked writes... Retrying write # 63
- ...Failed to perform non-blocked writes... Retrying write # 69
- ...Failed to perform non-blocked writes... Retrying write # 78
- Writes completed
-
-
- This example demonstrates handling WRITE errors, like ENO11 or EAGAIN,
- that do not terminate the PIPE device. The PIPE device does non-blocking
- writes. If a process tries to WRITE to a full PIPE and the WRITE would
- block, the device implicitly tries to complete the operation up to a
- default of 10 times. GT.M sleeps 100 micro seconds between each retry.
- When dealing with programs that can take a while to process input, it's a
- good idea to either schedule a delay between WRITEs or come up with a
- mechanism to back off the WRITEs when the buffer fills up.
-
- sh> mumps -run pipexample induceEPIPE
- The active device is pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample" STDERR="piperr"
- stdout:My PID is 12808
- stderr:%GTM-F-FORCEDHALT, Image HALTed by MUPIP STOP
- $ZSTATUS="32,pipexample+9^pipexample,%SYSTEM-E-ENO32, Broken pipe"
-
- sh> mumps -run retry^pipexample induceEPIPE
- Try 0 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample 0" STDERR="piperr"
- ...Caught on try 0, write 49... 32,retry+13^pipexample,%SYSTEM-E-ENO32, Broken pipe
- stdout:My PID is 16252
- stderr:%GTM-F-FORCEDHALT, Image HALTed by MUPIP STOP
- Try 1 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample 1" STDERR="piperr"
- ...Caught on try 1, write 697... 32,retry+13^pipexample,%SYSTEM-E-ENO32, Broken pipe
- stdout:My PID is 16403
- stdout:$ZSTATUS="150373210,induceEPIPE+5^pipexample,%GTM-E-DIVZERO, Attempt to divide by zero"
- Try 2 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample 2" STDERR="piperr"
- Writes completed
-
-
- This example demonstrates how to create a separate STDERR pipe device from
- which to read the STDERR output of the program(s) inside the pipe. Reading
- the STDERR is important when dealing with failures from Unix programs. It
- is possible to read the errors without creating a STDERR pipe device,
- however the error messages are commingled with the output of the programs
- inside the pipe which could make diagnosis of the underlying problem
- harder. Notice that GT.M writes fatal errors, GTM-F types, to STDERR, but
- all others go to STDOUT.
-
- Additionally, this example demonstrates handling errors that terminate the
- PIPE device. In this example, the PIPE device is terminated when a program
- inside the pipe terminates before reading all of the driving MUMPS
- program's output causing an EPIPE or ENO32, a broken pipe. In such a
- situation the MUMPS program must capture the error that caused the
- termination and respond accordingly. The program may need to call out to
- other programs to determine the status of a service it is using or to
- alert the operator of an error with an external program or service. To
- operate successfully, the program must recreate the pipe and retry the
- operation.
-
- Example:
-
- ; Example program that starts another program in a pipe and traps the errors. The called
+ ; Example program that starts another program in a pipe and traps the errors. The called
; programs intentionally induce errors
pipexample
set $etrap="do readfrompipe(.pipe,.piperr) use $p zwrite $zstatus zhalt 99"
@@ -14560,6 +14552,69 @@
This example demonstrates how to handle PIPE device errors, whether with
the device itself or from programs inside the PIPE device.
+ Example:
+
+ sh> mumps -run pipexample induceEAGAIN
+ The active device is pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEAGAIN^pipexample" STDERR="piperr"
+ $ZSTATUS="11,pipexample+9^pipexample,%SYSTEM-E-ENO11, Resource temporarily unavailable"
+
+ sh> mumps -run retry^pipexample induceEAGAIN
+ Try 0 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEAGAIN^pipexample 0" STDERR="piperr"
+ ...Failed to perform non-blocked writes... Retrying write # 54
+ ...Failed to perform non-blocked writes... Retrying write # 63
+ ...Failed to perform non-blocked writes... Retrying write # 69
+ ...Failed to perform non-blocked writes... Retrying write # 78
+ Writes completed
+
+
+ This example demonstrates handling WRITE errors, like ENO11 or EAGAIN,
+ that do not terminate the PIPE device. The PIPE device does non-blocking
+ writes. If a process tries to WRITE to a full PIPE and the WRITE would
+ block, the device implicitly tries to complete the operation up to a
+ default of 10 times. GT.M sleeps 100 micro seconds between each retry.
+ When dealing with programs that can take a while to process input, it's a
+ good idea to either schedule a delay between WRITEs or come up with a
+ mechanism to back off the WRITEs when the buffer fills up.
+
+ sh> mumps -run pipexample induceEPIPE
+ The active device is pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample" STDERR="piperr"
+ stdout:My PID is 12808
+ stderr:%GTM-F-FORCEDHALT, Image HALTed by MUPIP STOP
+ $ZSTATUS="32,pipexample+9^pipexample,%SYSTEM-E-ENO32, Broken pipe"
+
+ sh> mumps -run retry^pipexample induceEPIPE
+ Try 0 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample 0" STDERR="piperr"
+ ...Caught on try 0, write 49... 32,retry+13^pipexample,%SYSTEM-E-ENO32, Broken pipe
+ stdout:My PID is 16252
+ stderr:%GTM-F-FORCEDHALT, Image HALTed by MUPIP STOP
+ Try 1 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample 1" STDERR="piperr"
+ ...Caught on try 1, write 697... 32,retry+13^pipexample,%SYSTEM-E-ENO32, Broken pipe
+ stdout:My PID is 16403
+ stdout:$ZSTATUS="150373210,induceEPIPE+5^pipexample,%GTM-E-DIVZERO, Attempt to divide by zero"
+ Try 2 pipe OPEN PIPE SHELL="/bin/bash" COMMAND="$gtm_dist/mumps -run induceEPIPE^pipexample 2" STDERR="piperr"
+ Writes completed
+
+
+ This example demonstrates how to create a separate STDERR pipe device from
+ which to read the STDERR output of the program(s) inside the pipe. Reading
+ the STDERR is important when dealing with failures from Unix programs. It
+ is possible to read the errors without creating a STDERR pipe device,
+ however the error messages are commingled with the output of the programs
+ inside the pipe which could make diagnosis of the underlying problem
+ harder. Notice that GT.M writes fatal errors, GTM-F types, to STDERR, but
+ all others go to STDOUT.
+
+ Additionally, this example demonstrates handling errors that terminate the
+ PIPE device. In this example, the PIPE device is terminated when a program
+ inside the pipe terminates before reading all of the driving MUMPS
+ program's output causing an EPIPE or ENO32, a broken pipe. In such a
+ situation the MUMPS program must capture the error that caused the
+ termination and respond accordingly. The program may need to call out to
+ other programs to determine the status of a service it is using or to
+ alert the operator of an error with an external program or service. To
+ operate successfully, the program must recreate the pipe and retry the
+ operation.
+
3 PIPE_Deviceparameter_Summary
PIPE Deviceparameter Summary
@@ -14915,11 +14970,11 @@
operations in either direction on the socket before issuing a CLOSE.
Note that the receiving process must establish desired deviceparameters
- (e.g., DELIMITER) either by ATTACHing it to a SOCKET device that provides
- the characteristic for all its sockets, or by a subsequent USE that
- specifies the appropriate deviceparameter(s). GT.M transfers only the
- socket connection itself, the socket handle, and buffered socket data (if
- any).
+ (e.g., DELIMITER) for a socket either by ATTACHing it to a SOCKET device
+ that provides the characteristic for all its sockets, or by a subsequent
+ USE that specifies the appropriate deviceparameter(s). GT.M transfers only
+ the socket connection itself, the socket handle, and buffered socket data
+ (if any).
WRITE /TLS(option[,[timeout][,tlsid[,cfg-file-options]])
@@ -14950,9 +15005,10 @@
specified by the gtmcrypt_config environment variable. If tlsid is not
specified with the "renegotiate" option and cfg-file-options are
specified, GT.M creates a virtual section by appending "-RENEGOTIATE"
- to the tlsid used to enable TLS on the socket. If no section named
- tlsid is present in the configuration file, GT.M creates a virtual
- section with that name for the life of the process.
+ to the tlsid used to enable TLS on the socket. For the renegotiate
+ option, if no section named tlsid is present in the configuration
+ file, GT.M creates a virtual section with that name for the life of
+ the process.
o cfg-file-options specifies configuration file options. Note
cfg-file-options override those options if they are already specified
in the configuration file except ssl-options and verify-level which
@@ -15013,36 +15069,76 @@
+------------------------------------------------------------------------+
+------------------------------------------------------------------------+
- | Format Deviceparameters |
+ | Socket Management Deviceparameters |
|------------------------------------------------------------------------|
| DEVICEPARAMETER | COMMAND | COMMENT |
|-------------------------+---------+------------------------------------|
- | | | strexpr specifies socket |
- | [NO]DELIMITER[=strexpr] | O/U | delimiter(s); use a colon (:) to |
- | | | separate a list. |
+ | | | With OPEN, ATTACH assigns expr as |
+ | | | the handle name to the newly |
+ | | | created socket |
+ | ATTACH=strexpr | O/U | |
+ | | | With USE, expr specifies the |
+ | | | handle of a socket in the |
+ | | | socketpool. |
|-------------------------+---------+------------------------------------|
- | [NO]FILTER[=strexpr] | U | strexpr specifies character |
- | | | filtering for socket output. |
+ | | | Creates a client connection with a |
+ | CONNECT | O/U | server, which is located by the |
+ | | | information provided by expr. |
|-------------------------+---------+------------------------------------|
- | LENGTH=intexpr or | | Sets virtual page length for |
- | | U | socket device. |
- | ZLENGTH=intexpr | | |
+ | | | Establishes or replaces the list |
+ | [NO]DELIMITER[=strexpr] | O/U | of delimiters used by the newly |
+ | | | created socket. |
|-------------------------+---------+------------------------------------|
- | ICHSET=strexpr | O/U/C | strexpr specifies input character |
- | | | set |
+ | | | Removes the socket identified by |
+ | | | expr from the current socket |
+ | DETACH | U | device, without affecting any |
+ | | | existing connection of that |
+ | | | socket, and places it in the |
+ | | | socketpool. |
|-------------------------+---------+------------------------------------|
- | OCHSET=strexpr | O/U/C | strexpr specifies output character |
- | | | set |
+ | LISTEN=expr | O/U | Allocate a new socket to listen |
+ | | | for a connection. |
|-------------------------+---------+------------------------------------|
- | [NO]WRAP | O/U | Controls handling of records |
- | | | longer than the device width. |
+ | | | The polling interval (in |
+ | MOREREADTIME=intexpr | O/U | milliseconds) that a SOCKET device |
+ | | | uses to check for arriving packet |
|-------------------------+---------+------------------------------------|
- | WIDTH=intexpr | U | Controls the maximum length of an |
- | | | output message. |
+ | | | Makes the socket specified by the |
+ | SOCKET=expr | U | handle named in expr the current |
+ | | | socket for the Socket device. |
|-------------------------+---------+------------------------------------|
- | | | Controls whether and what |
- | Z[NO]FF[=strexpr] | O/U | characters to send in response to |
- | | | a WRITE #. |
+ | | | Controls buffering of data packets |
+ | | | by the system TCP stack using the |
+ | Z[NO]DELAY | U | TCP_NODELAY option to the |
+ | | | setsockopt system call. ZNODELAY |
+ | | | must be fully spelled out. |
+ +------------------------------------------------------------------------+
+
+ +------------------------------------------------------------------------+
+ | Format Deviceparameters |
+ |------------------------------------------------------------------------|
+ | DEVICEPARAMETER | COMMAND | COMMENT |
+ |----------------------+---------+---------------------------------------|
+ | [NO]FILTER[=strexpr] | U | strexpr specifies character filtering |
+ | | | for socket output. |
+ |----------------------+---------+---------------------------------------|
+ | LENGTH=intexpr or | | Sets virtual page length for socket |
+ | | U | device. |
+ | ZLENGTH=intexpr | | |
+ |----------------------+---------+---------------------------------------|
+ | ICHSET=strexpr | O/U/C | strexpr specifies input character set |
+ |----------------------+---------+---------------------------------------|
+ | OCHSET=strexpr | O/U/C | strexpr specifies output character |
+ | | | set |
+ |----------------------+---------+---------------------------------------|
+ | [NO]WRAP | O/U | Controls handling of records longer |
+ | | | than the device width. |
+ |----------------------+---------+---------------------------------------|
+ | WIDTH=intexpr | U | Controls the maximum length of an |
+ | | | output message. |
+ |----------------------+---------+---------------------------------------|
+ | Z[NO]FF[=strexpr] | O/U | Controls whether and what characters |
+ | | | to send in response to a WRITE #. |
+------------------------------------------------------------------------+
+------------------------------------------------------------------------+
@@ -15060,7 +15156,7 @@
3 Socket_Device_Examples
Socket Device Examples
- The sockexamplemulti31.m routine shows the use of $KEY and $ZKEY in a
+ The sockexamplemulti32.m routine shows the use of $KEY and $ZKEY in a
basic socket I/O setup. It's functionality is atypical in order to
demonstrate a number of features. It launches two jobs: a server process
which opens a listening socket and a client process which makes five
@@ -15069,11 +15165,11 @@
send a response back to the server. Odd-numbered client sockets receive
the full message and respond to the server with the message "Ok.". The
server reads two characters (but the client sends three) and $ZKEY shows
- sockets with unread characters.Please click Download sockexamplemulti31.m
- to download the sockexamplemulti31.m program and follow instructions in
+ sockets with unread characters.Please click Download sockexamplemulti32.m
+ to download the sockexamplemulti32.m program and follow instructions in
the comments near the top of the program file. You can also download
- sockexamplemulti31.m from
- http://tinco.pair.com/bhaskar/gtm/doc/books/pg/UNIX_manual/sockexamplemulti31.m.
+ sockexamplemulti32.m from
+ http://tinco.pair.com/bhaskar/gtm/doc/books/pg/UNIX_manual/sockexamplemulti32.m.
You can start a GT.M process in response to a connection request made
using inetd/xinetd. The following example uses inetd/xinetd to implement a
@@ -16293,6 +16389,11 @@
as the argument to an explicit CLOSE command, the CLOSE of the PIPE device
implicitly closes the the STDERR device.
+ If the OPEN command does not specify STDERR, GT.M redirects the stderr
+ output of the co-process created by the COMMAND to the standard output of
+ the co-process. Specify STDERR when there is a need to read the standard
+ error of the COMMAND seperately.
+
5 STREAM
STREAM
@@ -20562,11 +20663,21 @@
control, the only implicit behavior is that as long as $ECODE'="" and
$ZTRAP'="" an attempt to QUIT from the level of the current error
causes that error to be reissued at the new stack level.
- * otherwise, if $ETRAP'="" GT.M performs a QUIT$QUIT "" QUIT and
+ * otherwise, if $ETRAP'="" GT.M performs a QUIT:$QUIT "" QUIT and
reissues the error at the new stack level.
* otherwise, $ZTRAP must contain code and GT.M retries the line of M on
which the error occurred.
+ GT.M checks the syntax of code assigned to $ETRAP, $ZSTEP, $ZTRAP, and
+ EXCEPTION at the time they are specified. Note that $ZTRAP and EXCEPTION
+ are subject to gtm_ztrap_form, and, if that specifies entryref or
+ adaptive, GT.M does not check the syntax. Also, the environment variables
+ $gtm_etrap, $gtm_trigger_etrap, and $gtm_zstep provide ways of setting
+ some of the ISVs, so their values are verified at process initiation.
+ Further, a SET $ETRAP uses a temporary default value of "IF $ZJOBEXAM"
+ when shifting from $ZTRAP to $ETRAP in case the specified value has
+ compilation errors.
+
3 Direct_Mode
Direct Mode
diff --git a/sr_port/mupip.hlp b/sr_port/mupip.hlp
index 5071e66..a00fdbf 100755
--- a/sr_port/mupip.hlp
+++ b/sr_port/mupip.hlp
@@ -259,7 +259,7 @@
confirms that gtm.dat is backed up correctly and is ready for archive.
* Determine an appropriate frequency, timing, and backup method
- (-BYTESTREAM or -COMPREHENSIVE) based on the situation.
+ (-BYTESTREAM or -DATABASE) based on the situation.
* Ensure the user issuing backup commands has appropriate permissions
before starting the backup. Backup files have the ownership of the
user running MUPIP BACKUP.
@@ -1220,6 +1220,8 @@
whether manual or automated, include provisions for removing the
FREEZE in all appropriate cases, including when errors disrupt the
normal flow.
+ o MUPIP FREEZE sends a DBFREEZEON/DBFREEZEOFF message to the system log
+ for each region whose freeze state is changed.
o A -RECOVER/-ROLLBACK for a database reverts to a prior database update
state. Therefore, a -RECOVER/-ROLLBACK immediately after a MUPIP
FREEZE -ON removes the freeze. However, -RECOVER/-ROLLBACK does not
@@ -2953,22 +2955,26 @@
-E[XTENSION_COUNT]=integer(no of blocks)
-F[LUSH_TIME]=integer
-G[LOBAL_BUFFERS]=integer
+ -H[ARD_SPIN_COUNT]=integer
-[NO]INST[_FREEZE_ON_ERROR]
-JN[LFILE]journal-file-name
-K[EY_SIZE]=bytes
-L[OCK_SPACE]=integer
-M[UTEX_SLOTS]=integer
+ -N[ULL_SUBSCRIPTS]=value
-[NO]LCK_SHARES_DB_CRIT
-PA[RTIAL_RECOV_BYPASS]
-[NO]Q[DBRUNDOWN]
+ -[NO]REA[D_ONLY]
-REC[ORD_SIZE]=bytes
-REG[ION] region-list
-REP[LICATION]={ON|OFF}
-RES[ERVED_BYTES]=integer]
- -SLEE[P_SPIN_COUNT]=integer
- -SPIN[_SLEEP_LIMIT]=nanoseconds
+ -SL[EEP_SPIN_COUNT]=integer
+ -SPIN_SLEEP_M[ASK]=hex_mask
-STAN[DALONENOT]
-[NO]STAT[S]
+ -NO]STD[NULLCOLL]
-V[ERSION]={V4|V6}
-W[AIT_DISK]=integer
@@ -3134,6 +3140,25 @@
On many UNIX systems, default kernel parameters may be inadequate for GT.M
global buffers, and may need to be adjusted by a system administrator.
+3 Hard_spin_count
+ Hard_spin_count
+
+ Specifies the maximum amount of time for processes to sleep while waiting
+ to obtain critical sections for shared resources, principally those
+ involving databases. The format of the -SPIN_SLEEP_MASK qualifier is:
+
+ -HARD_SPIN_COUNT=integer
+
+ The mutex hard spin count specifies the number of attempts to grab the
+ mutex lock before initiating a less CPU-intensive wait period. The format
+ of -HARD_SPIN_COUNT is:
+
+ o The default value is 128
+ o Except on the advice of your GT.M support channel, FIS recommends
+ leaving the default values unchanged in production environments, until
+ and unless, you have data from testing and benchmarking that
+ demonstrates a benefit from a change.
+
3 INST_freeze_on_error
INST_freeze_on_error
@@ -3181,7 +3206,7 @@
-L[OCK]_SPACE=integer
- o The maximum LOCK_SPACE is 65,536 pages.
+ o The maximum LOCK_SPACE is 262144 pages.
o The minimum LOCK_SPACE is 10 pages.
o The default LOCK_SPACE is 40 pages.
o
@@ -3202,6 +3227,21 @@
-M[UTEX_SLOTS]=integer
+3 Null_subscripts
+ Null_subscripts
+
+ Controls whether GT.M accepts null subscripts in database keys.
+
+ Usage:
+
+ -N[ULL_SUBSCRIPTS]=value
+
+ o value can either be T[RUE], F[ALSE], ALWAYS, NEVER, or EXISTING. See
+ GDE chapter for more information on these values of null_subscript.
+ o Prohibiting null subscripts can restrict access to existing data and
+ cause GT.M to report errors.
+ o The default value is never.
+
3 Lck_shares_db_crit
Lck_shares_db_crit
@@ -3258,6 +3298,20 @@
-PA[RTIAL_RECOV_BYPASS]
+3 Read_only
+ Read_only
+
+ Indicates whether GT.M should treat an MM access method segment as read
+ only for all users, including root. This designation augments UNIX
+ authorizations and prevents any state updates that normally might require
+ an operational action for a database with no current accessing (attached)
+ processes. MUPIP emits an error on attempts to set -READ_ONLY on databases
+ with the BG access method, or to set the access method to BG on databases
+ with -READ_ONLY set. The GT.M help databases have -READ_ONLY set by
+ default. The format of the READ_ONLY qualifier is:
+
+ -[NO]REA[D_ONLY]
+
3 RECord_size
RECord_size
@@ -3283,8 +3337,8 @@
depending on your platform. Realistic determinations of this amount
should leave room for at least one record of maximum size.
-3 SLEEp_spin_count
- SLEEp_spin_count
+3 SLeep_spin_count
+ SLeep_spin_count
Specifies the number of times a processes suspends its activity while
waiting to obtain critical sections for shared resources, principally
@@ -3303,19 +3357,17 @@
and unless, you have data from testing and benchmarking that
demonstrates a benefit from a change.
-3 SPIN_spin_limit
- SPIN_spin_limit
+3 Spin_sleep_mask
+ Spin_sleep_mask
- Specifies the maximum number nanoseconds for processes to sleep while
- waiting to obtain critical sections for shared resources, principally
- those involving databases. The format of the -SPIN_SLEEP_LIMIT qualifier
- is:
+ Specifies the maximum amount of time for processes to sleep while waiting
+ to obtain critical sections for shared resources, principally those
+ involving databases. The format of the -SPIN_SLEEP_MASK qualifier is:
- -SPIN_SLEEP_LIMIT=nanoseconds
+ -SPIN_SLEEP_MASK=hex_mask
- o nanoseconds is the maximum number of nanoseconds (in decimal form)
- rounded up to the nearest power of two. Internally, GT.M converts it
- to a hexadecimal mask.
+ o hex_mask is a hexidecimal mask that controls the maximum time (in
+ nanoseconds) the process sleeps on a sleep spin.
o The default is zero (0) which causes the process to return control to
the UNIX kernel to be rescheduled with no explicit delay. When the
value is non-zero, the process waits for a random value between zero
@@ -3328,12 +3380,22 @@
3 STATs
STATs
- Specifies specifies whether GT.M should permit statistics sharing for this
- region. This characteristic permits operational exclusion of statistics
- sharing for a region. The format of the STATS qualifier is:
+ Specifies whether GT.M should permit statistics sharing for this region.
+ This characteristic permits operational exclusion of statistics sharing
+ for a region. The format of the STATS qualifier is:
-[NO]STAT[S]
+3 STATs
+ STATs
+
+ Specifies whether GT.M uses standard MUMPS collation or GT.M collation for
+ null-subscripted keys. FIS strongly recommends that you use STDNULL and
+ against using this non-standard null collation, which is the default for
+ historical reasons. The format of the STDNULLCOLL qualifier is:
+
+ -[NO]STD[NULLCOLL]
+
3 Version
Version
@@ -3402,6 +3464,20 @@
This example enables custom errors in region REPTILES to cause an Instance
Freeze.
+3 Stdnullcoll
+ Stdnullcoll
+
+ Controls whether GT.M uses M standard collation order or GT.M collation
+ order for null subscripts.
+
+ Usage:
+
+ -[NO]STNULLCOLL
+
+ o Specifying this qualifier selects M standard null collation; negating
+ it specifies GT.M null collation.
+ o By default, GT.M uses the GT.M collation order for null subscripts.
+
2 SIZE
SIZE
@@ -4077,26 +4153,26 @@
the last valid journal record in an abnormally terminated journal file
(for example, system crash). To facilitate journal recovery in the
event of a system crash, the GT.M run-time system ensures that offsets
- in the journal file which are multiple of ALIGNSIZE (excepting offset
- 0 which houses the journal file header) is always the beginning of a
- valid journal record. In order to ensure this, GT.M run-time system
- writes padding data (if necessary) in the form of ALIGN journal
- records just before the ALIGNSIZE boundary. These ALIGN records also
- help in skipping past invalid records in the middle of a journal file
- allowing MUPIP JOURNAL -EXTRACT -FORWARD -FULL to extract as much data
- of a corrupt journal file as possible.
- o While a larger align size trade off crash recovery time in favor of
+ in the journal file at multiples of ALIGNSIZE (except at offset 0
+ which houses the journal file header) always have a valid journal
+ record. In order to ensure this, the GT.M run-time system, as needed,
+ writes padding data in the form of ALIGN journal records just before
+ the ALIGNSIZE boundary. These ALIGN records also help in skipping past
+ invalid records in the middle of a journal file allowing MUPIP JOURNAL
+ -EXTRACT -FORWARD -FULL to extract as much data from a corrupt journal
+ file as possible.
+ o While a larger align size trades off crash recovery time in favor of
increased journaling throughput, especially when before image
journaling is in use, there is marginal value in using an align size
larger than a few MB.
o The minimum ALIGNSIZE supported is always be greater than or equal to
the maximum journal record size, which in turn depends on the maximum
database block size.
- o Note that a large value of ALIGNSIZE implies less aligned boundaries
- for recovery to use and hence slows backward recovery down so
- drastically that, for example, the maximum value of 4194304 causes
- backward recovery (in case of a crash) to take as much time as forward
- recovery on that journal file.
+ o Note that a large value of ALIGNSIZE implies infrequent boundaries for
+ recovery to use, and hence slows backward recovery down so drastically
+ that, for example, the maximum value of 4194304 causes backward
+ recovery (in case of a crash) to take as much time as forward recovery
+ using the same journal file(s).
ALL[OCATION]=blocks
@@ -4181,7 +4257,7 @@
current journal-buffer-size as part of an online switch of the journal
files.
- The default value is 2308 blocks. The minimum BUFFER_SIZE is 2307 blocks.
+ The default value is 2312 blocks. The minimum BUFFER_SIZE is 2307 blocks.
The maximum BUFFER_SIZE is 32K blocks which means that the maximum buffer
you can set for your journal file output is 16MB.
@@ -4930,9 +5006,7 @@
Because MUPIP ROLLBACK -ONLINE can take a database backwards in state
space, please make sure that you understand what it is that you intend it
- to do when you invoke it. FIS developed it as a step towards a much larger
- project and anticipates that it will not be broadly useful in its current
- form.
+ to do when you invoke it.
By default, MUPIP JOURNAL -ROLLBACK -BACKWARD is -NOONLINE.
@@ -5001,12 +5075,12 @@
following is an example of SHOW=HEADER output:
-------------------------------------------------------------------------------
- SHOW output for journal file /home/jdoe/.fis-gtm/V6.0-000_x86/g/gtm.mjl
+ SHOW output for journal file /home/jdoe/.fis-gtm/V6.3-002_x86/g/gtm.mjl
-------------------------------------------------------------------------------
- Journal file name /home/jdoe/.fis-gtm/V6.0-000_x86/g/gtm.mjl
+ Journal file name /home/jdoe/.fis-gtm/V6.3-002_x86/g/gtm.mjl
Journal file label GDSJNL23
- Database file name /home/jdoe/.fis-gtm/V6.0-000_x86/g/gtm.dat
- Prev journal file name /home/jdoe/.fis-gtm/V6.0-000_x86/g/gtm.mjl_2012310190106
+ Database file name /home/jdoe/.fis-gtm/V6.3-002_x86/g/gtm.dat
+ Prev journal file name /home/jdoe/.fis-gtm/V6.3-002_x86/g/gtm.mjl_2012310190106
Next journal file name
Before-image journal ENABLED
Journal file header size 65536 [0x00010000]
@@ -5036,13 +5110,13 @@
Start Region Sequence Number 1 [0x0000000000000001]
End Region Sequence Number 1 [0x0000000000000001]
Process That Created the Journal File:
- PID NODE USER TERM JPV_TIME
- ---------------------------------------------------------
- 0000006706 jdoe-laptop jdoe 0 2012/11/06 17:30:33
+ PID NODE USER TERM JPV_TIME
+ ------------------------------------------------------------
+ 0000006706 jdoe-laptop jdoe 0 2012/11/06 17:30:33
Process That First Opened the Journal File:
- PID NODE USER TERM JPV_TIME
- ---------------------------------------------------------
- 0000006706 jdoe-laptop jdoe 0 2012/11/06 17:30:33
+ PID NODE USER TERM JPV_TIME
+ ------------------------------------------------------------
+ 0000006706 jdoe-laptop jdoe 0 2012/11/06 17:30:33
5. P[ROCESSES]
@@ -5056,7 +5130,7 @@
qualifiers.The following is an example of SHOW=STATISTICS output:
-------------------------------------------------------------------------------
- SHOW output for journal file /home/jdoe/.fis-gtm/V6.0-000_x86/g/gtm.mjl
+ SHOW output for journal file /home/jdoe/.fis-gtm/V6.3-002_x86/g/gtm.mjl
-------------------------------------------------------------------------------
Record type Count
----------------------
@@ -6355,10 +6429,6 @@
Qualifiers:
- -replicate
-
- Use this qualifier to access the replication subsystem.
-
-source
Identifies the Source Server.
@@ -6420,7 +6490,7 @@
filter stream passes to the replicating instance. If the filter program is
an M program with entry-ref OLD2NEW^FILTER, specify the following path:
- filter='"$gtm_dist/mumps -run OLD2NEW^FILTER"'
+ filter='"'$gtm_dist'/mumps -run OLD2NEW^FILTER"'
Write the filter as a UNIX process that takes its input from STDIN and
writes its output to STDOUT.
@@ -6436,17 +6506,16 @@
extfilter
; A command like mupip replic -source -start -buffsize=$gtm_buffsize
;-instsecondary=$secondary_instance -secondary=$IP_Address:$portno
- ;-filter='"$gtm_exe/mumps -run ^extfilter"' -log=$SRC_LOG_FILE
+ ;-filter='"'$gtm_dist'/mumps -run ^extfilter"' -log=$SRC_LOG_FILE
;deploys this filter on the Source Server.
set $ztrap="goto err"
set TSTART="08"
set TCOMMIT="09"
set EOT="99"
- set log=$ztrnlnm("filterlog") ; use the environment variable filterlog" (if defined)
- ;to specify which logfile to use
- if logersion="" set log="logcharout" char
+ set log=$ztrnlnm("filterlog") ; use the environment variable filterlog (if defined) to specify which logfile to use
+ set:log="" log="log.out"
set EOL=$C(10)
- open log:newve:sion
+ open log:newversion
use $principal:nowrap
for do
. use $principal
@@ -7721,346 +7790,625 @@
1 Summary
Summary
- +------------------------------------------------------------------------------+
- | COMMAND | OBJECTS | MAIN QUALIFIER |
- |-----------+--------------+---------------------------------------------------|
- | | |-BK[UPDBJNL]=DISABLE | OFF |
- | | |-B[YTESTREAM] -NET[TIMEOUT]=seconds |
- | | |-C[OMPREHENSIVE] |
- | | |-DA[TABASE] -REPLA[CE] |
- | | |-DBG |
- | | |-I[NCREMENTAL] |
- | |region-name |-[NO]J[OURNAL][=journal-options-list] |
- |B[ACKUP] | | |
- | |file-name |-NETTIMEOUT |
- | | |-[NO]NEWJNLFILES[=[NO]PREVLINK],[NO]S[YNC_IO] |
- | | |-O[NLINE] |
- | | |-RECORD |
- | | |-REPLI[NSTANCE]=OFF | ON |
- | | |-S[INCE]={DATABASE|BYTESTREAM|RECORD} |
- | | |-T[RANSACTION=hexa;transaction_number] |
- |-----------+--------------+---------------------------------------------------|
- |CR[EATE] |- |-R[EGION]=region-name |
- |-----------+--------------+---------------------------------------------------|
- |DO[WNGRADE]|file-name |-V[ERION]={V4|V5} |
- |-----------+--------------+---------------------------------------------------|
- |DU[MPFHEAD]|file-name or |- |
- | |region-list | |
- |-----------+--------------+---------------------------------------------------|
- | | |-OUTDB=<outdb-file> |
- |EN[DIANCVT]|file-name | |
- | | |-OV[ERRIDE] |
- |-----------+--------------+---------------------------------------------------|
- |EXI[T] |- |- |
- |-----------+--------------+---------------------------------------------------|
- |EXTE[ND] |region-name |-B[LOCKS]=blocks |
- |-----------+--------------+---------------------------------------------------|
- | | |-FO[RMAT]=GO|B[INARY]|Z[WR] |
- | | |-FR[EEZE] |
- | | |-LA[BEL]=text |
- |EXTR[ACT] |- |-[NO]L[OG] |
- | | |-S[ELECT]=global-name-list |
- | | |-O[CHSET]=character-set |
- | | |-R[EGION=region-list |
- |-----------+--------------+---------------------------------------------------|
- | | |-DBG |
- |F[REEZE] |region-list |-OF[F] [-OV[ERRIDE]] |
- | | |-ON [-[NO]ONL[INE] [-[NO]A[UTORELEASE]] |
- | | |[-R[ECORD]]] |
- |-----------+--------------+---------------------------------------------------|
- | | |-D[B] |
- |FT[OK] |File-name |-J[NLPOOL] |
- | | |-R[ECVPOOL] |
- |-----------+--------------+---------------------------------------------------|
- |H[ELP] |command-option|- |
- |-----------+--------------+---------------------------------------------------|
- | | |-A[DJACENCY]=integer] |
- | | |-BL[OCK]=hexa;block-number] |
- | | |-BR[IEF] |
- | | |-FA[ST] |
- | | |-FI[LE] |
- | | |-FU[LL] |
- | |File-name or |-NO]K[EYRANGES |
- |I[NTEG] |region-list | |
- | | |-[NO][MAP]=integer |
- | | |-[NO]MAXK[EYSIZE]=integer |
- | | |-R[EGION] |
- | | |-[NO]ST[ATS] |
- | | |-SU[BSCRIPT]=subscript |
- | | |-TN[_RESET] |
- | | |-[NO]TR[ANSACTION][=integer] |
- |-----------+--------------+---------------------------------------------------|
- | | |-EX[TRACT][=file-specification|-stdout] |
- | | |-REC[OVER] | -RO[LLBACK] |
- |J[OURNAL] |file-name |-SH[OW][=show-option-list] |
- | | |-[NO]V[ERIFY] |
- | | |-BA[CKWARD] | -FO[RWARD] |
- |-----------+--------------+---------------------------------------------------|
- | | |-BE[GIN]=integer |
- | | |-BLOCK_DENSITY |
- | | |-E[ND]=integer |
- |L[OAD] |file-name |-FI[LLFACTOR]=integer |
- | | |-FO[RMAT]=GO|B[INARY]|Z[WR] |
- | | |-S[TDIN] |
- | | |-O[NERROR] |
- |-----------+--------------+---------------------------------------------------|
- | | |-ENCR[YPT]=key |
- | | |-E[XCLUDE]=global-name-list |
- | | |-FI[LL_FACTOR]=integer |
- | | |-I[NDEX_FILL_FACTOR]=integer |
- | | |-REG[ION] |
- |REO[RG] | | |
- | | |-R[ESUME] |
- | | |-S[ELECT]=global-name-list |
- | | |-T[RUNCATE][=percentage] |
- | | |-UP[GRADE] |
- | | |-REG[ION] region-list |
- |-----------+--------------+---------------------------------------------------|
- | | |-E[DITINSTANCE] |
- | | |-I[NSTANCE_CREATE] |
- | | |-R[ECEIVER |
- |REP[LICATE]|file-name | |
- | | |-S[OURCE] |
- | | |-UPDA[TEPROC] |
- | | |-UPDH[ELPER] |
- |-----------+--------------+---------------------------------------------------|
- |RE[STORE] |file-name or |-[NO]E[XTEND] |
- | |file-list | |
- |-----------+--------------+---------------------------------------------------|
- | | |-F[ILE] |
- | |file-name or |-R[EGION] |
- |RU[NDOWN] |region-name | |
- | | |-RELINKCTL [dir] |
- | | |-OVERRIDE |
- |-----------+--------------+---------------------------------------------------|
- | | |SE[T] {-FI[LE] file-name|-JN[LFILE] |
- | | |journal-file-name|-REG[ION] |
- | | |region-list|-REP[LICATION]={ON|OFF}} |
- | | |-AC[CESS_METHOD]={BG|MM} |
- | | |-[NO]AS[YNCIO] |
- | | |-[NO]DE[FER_TIME][=seconds] |
- | | |-[NO]DEFER_ALLOCATE |
- | | |-E[XTENSION_COUNT]=integer(no of blocks) |
- | | |-F[LUSH_TIME]=integer |
- | | |-G[LOBAL_BUFFERS]=integer |
- | | |-[NO]INST[_FREEZE_ON_ERROR] |
- | | |-JN[LFILE]journal-file-name |
- | | |-K[EY_SIZE]=bytes |
- | | |-L[OCK_SPACE]=integer |
- | |file-name or | |
- |SE[T] |region-name |-M[UTEX_SLOTS]=integer |
- | | |-[NO]LCK_SHARES_DB_CRIT |
- | | |-PA[RTIAL_RECOV_BYPASS] |
- | | |-[NO]Q[DBRUNDOWN] |
- | | |-REC[ORD_SIZE]=bytes |
- | | |-REG[ION] region-list |
- | | |-REP[LICATION]={ON|OFF} |
- | | |-RES[ERVED_BYTES]=integer] |
- | | |-SLEE[P_SPIN_COUNT]=integer |
- | | |-SPIN[_SLEEP_LIMIT]=nanoseconds |
- | | |-STAN[DALONENOT] |
- | | |-[NO]STAT[S] |
- | | |-V[ERSION]={V4|V6} |
- | | |-W[AIT_DISK]=integer |
- |-----------+--------------+---------------------------------------------------|
- | | |-TRIG[GERFILE]=<trigger_definitions_file> |
- | | |-NOPR[OMPT] |
- |TRIGGER |- | |
- | | |-SELE[CT][=name-list|*][<select-output-file>] |
- | | |-UPGRADE |
- |-----------+--------------+---------------------------------------------------|
- |ST[OP] |process-id |process-id |
- |-----------+--------------+---------------------------------------------------|
- |UP[GRADE] |file-name |- |
- +------------------------------------------------------------------------------+
+ +-------------------------------------------------------------------------------------------+
+ | COMMAND | OBJECTS | MAIN QUALIFIER | GT.M |
+ | | | |version*|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |B[ACKUP] |region-name |-BK[UPDBJNL]=DISABLE | OFF | |
+ | |file-name | | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-B[YTESTREAM] -NET[TIMEOUT]=seconds | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-C[OMPREHENSIVE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-DA[TABASE] -REPLA[CE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-DBG | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-I[NCREMENTAL] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]J[OURNAL][=journal-options-list] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-NETTIMEOUT | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]NEWJNLFILES[=[NO]PREVLINK],[NO]S[YNC_IO] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-O[NLINE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-RECORD | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REPLI[NSTANCE]=OFF | ON | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-S[INCE]={DATABASE|BYTESTREAM|RECORD} | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-T[RANSACTION=hexa;transaction_number] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |CR[EATE] |- |-R[EGION]=region-name | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |DO[WNGRADE]|file-name |-V[ERION]={V4|V5} | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |DU[MPFHEAD]|file-name or |- |V6.3-001|
+ | |region-list | | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |EN[DIANCVT]|file-name |-OUTDB=<outdb-file> | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-OV[ERRIDE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |EXI[T] |- |- | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |EXTE[ND] |region-name |-B[LOCKS]=blocks | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |EXTR[ACT] |- |-FO[RMAT]=GO|B[INARY]|Z[WR] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FR[EEZE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-NU[LL_IV] |V6.3-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-LA[BEL]=text | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]L[OG] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-S[ELECT]=global-name-list | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-O[CHSET]=character-set | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[EGION=region-list | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |F[REEZE] |region-list |-DBG | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-OF[F] [-OV[ERRIDE]] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-ON [-[NO]ONL[INE] [-[NO]A[UTORELEASE]] [-R[ECORD]]] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |FT[OK] |File-name |-D[B] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-J[NLPOOL] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[ECVPOOL] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |H[ELP] |command-option |- | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |I[NTEG] |File-name or |-A[DJACENCY]=integer] | |
+ | |region-list | | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-BL[OCK]=hexa;block-number] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-BR[IEF] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FA[ST] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FI[LE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FU[LL] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-NO]K[EYRANGES | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO][MAP]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]MAXK[EYSIZE]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[EGION] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]ST[ATS] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-SU[BSCRIPT]=subscript | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-TN[_RESET] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]TR[ANSACTION][=integer] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |J[OURNAL] |file-name |-EX[TRACT][=file-specification| | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-stdout] |V5.5-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REG[ION] |V6.2-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REC[OVER] | -RO[LLBACK] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-SH[OW][=show-option-list] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]V[ERIFY] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-BA[CKWARD] | -FO[RWARD] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |L[OAD] |file-name |-BE[GIN]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-BLOCK_DENSITY | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-E[ND]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FI[LLFACTOR]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FO[RMAT]=GO|B[INARY]|Z[WR] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-S[TDIN] |V5.5-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-O[NERROR] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |REO[RG] | |-ENCR[YPT]=key |V6.3-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-E[XCLUDE]=global-name-list | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-FI[LL_FACTOR]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-I[NDEX_FILL_FACTOR]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REG[ION] |V5.5-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[ESUME] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-S[ELECT]=global-name-list | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-T[RUNCATE][=percentage] |V5.5-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-UP[GRADE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REG[ION] region-list | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |REP[LICATE]|file-name |-E[DITINSTANCE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-N[AME] |V5.5-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-I[NSTANCE_CREATE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[ECEIVER | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-S[OURCE] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-UPDA[TEPROC] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-UPDH[ELPER] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |RE[STORE] |file-name or |-[NO]E[XTEND] | |
+ | |file-list | | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |RU[NDOWN] |file-name or |-F[ILE] | |
+ | |region-name | | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[EGION] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-RELINKCTL [dir] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-OVERRIDE | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | |file-name or |SE[T] {-FI[LE] file-name|-JN[LFILE] | |
+ |SE[T] |region-name |journal-file-name|-REG[ION] | |
+ | | |region-list|-REP[LICATION]={ON|OFF}} | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-AC[CESS_METHOD]={BG|MM} | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]AS[YNCIO] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]DE[FER_TIME][=seconds] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]DEFER_ALLOCATE |V6.2-002|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]EP[OCHTAPER] |V6.2-001|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]ENCRYPTABLE |V6.3-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-E[XTENSION_COUNT]=integer(no of blocks) | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-F[LUSH_TIME]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-G[LOBAL_BUFFERS]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-H[ARD_SPIN_COUNT]=integer |V6.3-003|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]INST[_FREEZE_ON_ERROR] |V6.0-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-JN[LFILE]journal-file-name | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-K[EY_SIZE]=bytes | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-L[OCK_SPACE]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]LCK_SHARES_DB_CRIT | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-M[UTEX_SLOTS]=integer |V6.0-002|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-N[ULL_SUBSCRIPTS]=value |V6.3-003|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-PA[RTIAL_RECOV_BYPASS] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]Q[DBRUNDOWN] |V6.0-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]REA[D_ONLY] |V6.3-003|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REC[ORD_SIZE]=bytes | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REG[ION] region-list | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-REP[LICATION]={ON|OFF} | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-RES[ERVED_BYTES]=integer] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-SLEE[P_SPIN_COUNT]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-SPIN[_SLEEP_MASK]=hexa_mask |V6.3-003|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-SPIN[_SLEEP_LIMIT]=nanoseconds |V6.3-000|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-STAN[DALONENOT] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]STD[NULLSUBS] |V6.3-003|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-[NO]STAT[S] | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-V[ERSION]={V4|V6} | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-W[AIT_DISK]=integer | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |SI[ZE] |global-name-list|-H[EURISTIC]=estimation_technique |V6.0-001|
+ | |region-list | | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-S[ELECT]=global-name-list |V6.0-001|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-R[EGION]=region-list |V6.0-001|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |ST[OP] |process-id |process-id | |
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |TRIGGER |- |-TRIG[GERFILE]=<trigger_definitions_file> |V5.4-002|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-NOPR[OMPT] |V5.4-002|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-SELE[CT][=name-list|*][<select-output-file>] |V5.4-002|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ | | |-UPGRADE |V5.4-002|
+ |-----------+----------------+-----------------------------------------------------+--------|
+ |UP[GRADE] |file-name |- | |
+ +-------------------------------------------------------------------------------------------+
The following table summarizes the qualifiers.
- +------------------------------------------------------------------------------------------------------------+
- | Main Qualifier | MUPIP Command | Options/Qualifiers |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-CHANGE |
- | | |-DETAIL |
- | | |-OFFSET=hexa |
- |-EDITINSTANCE |REPLICATE |-VALUE=hexa |
- | | |-SIZE=hexa |
- | | |-VALUE=hexa |
- | | |-[NO]QDBRUNDOWN |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |ALWAYS |
- |-FENCES=<fence-options-list> |JOURNAL-RECOVER-ROLLBACK |NONE |
- | | |PROCESS |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-OVERRIDE |
- |-OFF |FREEZE | |
- | | |-RECORD |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-[NO]ONLINE |
- |-ON |FREEZE | |
- | | |-[NO]AUTORELEASE |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-NAME |
- | | |-NOREPLACE |
- |-INSTANCE_CREATE |REPLICATE | |
- | | |-SUPPLEMENTARY |
- | | |-[NO]QDBRUNDOWN |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |ALIGNSIZE=integer |
- | | |ALLOCATION=integer |
- | | |AUTOSWITCHLIMIT=integer |
- | | |BEFORE_IMAGES |
- | | |BUFFER_SIZE=integer |
- | | |DISABLE |
- | |BACKUP |ENABLE |
- |-JOURNAL=<journal-options-list> | | |
- | |SET |EPOCH_INTERVAL=integer |
- | | |EXTENSION=integer |
- | | |FILENAME=file_name |
- | | |OFF |
- | | |ON |
- | | |SYNC_IO |
- | | |YIELD_LIMIT=integer |
- |--------------------------------------+--------------------------+------------------------------------------|
- | |-RECOVER |TIME="time" |
- |-LOOKBACK_LIMIT=lookback-option-list | | |
- | |-ROLLBACK |OPERATIONS=integer |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-BUFFSIZE=integer |
- | | |-CHANGELOG |
- | | |-CHECKHEALTH |
- | | |-CMPLVL=integer |
- | | |-FILTER=filter_name |
- | | |-he[lpers]=[m[,n]] |
- | | |-INITIALIZE |
- | | |-CMPLVL=n |
- | | |-LISTENPORT=integer |
- | | |-LOG=logfile |
- | | |-LOG_INTERVAL=integer |
- |-RECEIVER |REPLICATE |-NORESYNC |
- | | |-RESUME=strm_num |
- | | |-REUSE=instname |
- | | |-SHOWBACKLOG |
- | | |-SHUTDOWN |
- | | |-START |
- | | |-STATSLOG=[ON|OFF] |
- | | |-STOPSOURCEFILTER |
- | | |TIMEOUT=seconds |
- | | |TLSID=label |
- | | |-UPDATEONLY |
- | | |-UPDATERESYNC=/path/to/bkup-orig-inst |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-AFTER=time |
- | | |-APPLY_AFTER_IMAGE |
- | | |-BACKWARD |
- | | |-BEFORE=time |
- | | |-BROKENTRANS=file |
- | | |-CHAIN |
- | | |-CHECKTN |
- | | |-[NO]ER[ROR_LIMIT][=integer] |
- | | |-FENCES=fence-option-list |
- | | |-FORWARD |
- |-RECOVER |JOURNAL | |
- | | |-FULL |
- | | |-GLOBAL=<global_list> |
- | | |-ID=<pid_list> |
- | | |-INTERACTIVE |
- | | |-LOOKBACK_LIMIT=<lookback_limit_options> |
- | | |-LOSTTRANS[=file] |
- | | |-RED[IRECT]=file-pair-list |
- | | |-SINCE=time |
- | | |-VERBOSE |
- | | |-VERIFY |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-AFTER=time |
- | | |-BEFORE=time |
- | | |-BROKENTRANS=file |
- | | |-CHAIN |
- | | |-CHECKTN |
- | | |-[NO]ER[ROR_LIMIT]=integer] |
- | | |-FENCES=fence-option-list |
- | | |-FULL |
- |-EXTRACT |JOURNAL |-GLOBAL=<global_list> |
- | | |-ID=<pid_list> |
- | | |-INTERACTIVE |
- | | |-LOOKBACK_LIMIT=<lookback_limit_options> |
- | | |-LOSTTRANS[=file] |
- | | |-REGION |
- | | |-SINCE=time |
- | | |-VERBOSE |
- | | |-VERIFY |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-APPLY_AFTER_IMAGE |
- | | |-BACKWARD |
- | | |-BEFORE=time |
- | | |-BROKENTRANS=file |
- | | |-[NO]ER[ROR_LIMIT][=integer] |
- | | |-FENCES=fence-option-list |
- |-ROLLBACK |JOURNAL | |
- | | |-FETCHRESYNC |
- | | |-LOOKBACK_LIMIT=<lookback_limit_options> |
- | | |-LOSTTRANS[=file] |
- | | |-RES[YNC]=hexa;journal_sequence_number |
- | | |-VERBOSE |
- | | |-VERIFY |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-ACTIVE_PROCESSES |
- | | |-ALL |
- | | |-BROKEN_TRANSACTIONS |
- | | |-HEADER |
- | | |-PROCESSES |
- | | |-STATISTICS |
- |-SHOW=<show-option-list> |JOURNAL |-AFTER=time |
- | | |-USER=user-list |
- | | |-TRANSACTION=[KILL|SET] |
- | | |-INTERACTIVE |
- | | |-GLOBAL=<global_list> |
- | | |-ID=<pid_list> |
- | | |-INTERACTIVE |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-BYTESTREAM |
- | | |-COMPREHENSIVE |
- |-SINCE |BACKUP |-DATABASE |
- | | |-INCREMENTAL |
- | | |-RECORD |
- |--------------------------------------+--------------------------+------------------------------------------|
- | | |-ACTIVATE |
- | | |-BUFFSIZE=Buffer_size |
- | | |-CHANGELOG |
- | | |-CHECKHEALTH |
- | | |-CMPLVL=integer |
- | | |-CONNECTPARAMS=connection_options |
- | | |-DEACTIVATE |
- | | |-DETAIL |
- | | |-FILTER=filter_name |
- | | |-FREEZE=on|off |
- | | |-[NO]COMMENT=string |
- | | |-INSTSECONDARY=secondary_instance name |
- | | |-NOJNLFILEONLY |
- | | |-JNLPOOL-LOG=log_file |
- | | |-LOG_INTERVAL=integer |
- | | |-LOSTTNCOMPLETE |
- |-SO[URCE] |REPLICATE |-NEEDRESTART |
- | | |-PASSIVE |
- | | |-[NO]PLAINTEXTFALLBACK |
- | | |-PROPAGATEPRIMARY |
- | | |-RENEGOTIATE_INTERVAL=minutes |
- | | |-ROOTPRIMARY |
- | | |-SECONDARY=secondary_instance_name |
- | | |-SHOWBACKLOG |
- | | |-SHUTDOWN |
- | | |-START |
- | | |-STATSLOG |
- | | |-STOPSOURCEFILTER |
- | | |-TIMEOUT=seconds |
- | | |-TLSID=label |
- | | |-UPDOK |
- | | |-UPDNOTOK |
- | | |-ZEROBACKLOG |
- |--------------------------------------+--------------------------+------------------------------------------|
- | |DOWNGRADE | |
- |-VERSION={V4|V5} | |file-name |
- | |UPGRADE | |
- +------------------------------------------------------------------------------------------------------------+
+ +-----------------------------------------------------------------------------------------------------------------------+
+ | Main Qualifier | MUPIP Command | Options/Qualifiers | GT.M |
+ | | | | Version* |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-EDITINSTANCE |REPLICATE |-CHANGE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-DETAIL | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-OFFSET=hexa | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VALUE=hexa | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SIZE=hexa | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VALUE=hexa | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]QDBRUNDOWN |V6.3-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-FENCES=<fence-options-list> |JOURNAL-RECOVER-ROLLBACK |ALWAYS | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |NONE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |PROCESS | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-OFF |FREEZE |-OVERRIDE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RECORD | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-ON |FREEZE |-[NO]ONLINE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]AUTORELEASE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-INSTANCE_CREATE |REPLICATE |-NAME | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-NOREPLACE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SUPPLEMENTARY |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]QDBRUNDOWN |V6.3-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | |BACKUP | | |
+ |-JOURNAL=<journal-options-list> | |ALIGNSIZE=integer | |
+ | |SET | | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |ALLOCATION=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |AUTOSWITCHLIMIT=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |BEFORE_IMAGES | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |BUFFER_SIZE=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |DISABLE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |ENABLE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |EPOCH_INTERVAL=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |EXTENSION=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |FILENAME=file_name | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |OFF | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |ON | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |SYNC_IO | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |YIELD_LIMIT=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | |-RECOVER | | |
+ |-LOOKBACK_LIMIT=lookback-option-list | |TIME="time" | |
+ | |-ROLLBACK | | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |OPERATIONS=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-RECEIVER |REPLICATE |-AUTOROLLBACK |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BUFFSIZE=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHANGELOG | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHECKHEALTH | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CMPLVL=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FILTER=filter_name | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-he[lpers]=[m[,n]] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INITIALIZE |V6.0-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CMPLVL=n | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LISTENPORT=integer [ | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-AUTOROLLBACK[=VERBOSE]] |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOG=logfile | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOG_INTERVAL=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-NORESYNC |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RESUME=strm_num |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-REUSE=instname |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RSYNC_STRM=strm_num |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SHOWBACKLOG | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SHUTDOWN | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-START | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-STATSLOG=[ON|OFF] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-STOPSOURCEFILTER | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-TIMEOUT=seconds | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |TLSID=label |V6.1-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-UPDATEONLY | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-UPDOK |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-UPDNOTOK |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-UPDATERESYNC=/path/to/bkup-orig-inst |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-RECOVER |JOURNAL |-AFTER=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-APPLY_AFTER_IMAGE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BACKWARD | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BEFORE=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BROKENTRANS=file | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHAIN | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHECKTN | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]ER[ROR_LIMIT][=integer] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FENCES=fence-option-list | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FORWARD | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FULL | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-GLOBAL=<global_list> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ID=<pid_list> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INTERACTIVE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOOKBACK_LIMIT=<lookback_limit_options> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOSTTRANS[=file] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-PARA[LLEL][=n] |V6.3-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RED[IRECT]=file-pair-list | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SINCE=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VERBOSE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VERIFY | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-EXTRACT |JOURNAL |-AFTER=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BEFORE=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BROKENTRANS=file | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHAIN | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHECKTN | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]ER[ROR_LIMIT]=integer] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FENCES=fence-option-list | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FULL | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-GLOBAL=<global_list> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ID=<pid_list> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INTERACTIVE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOOKBACK_LIMIT=<lookback_limit_options> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOSTTRANS[=file] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-REGION | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SINCE=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VERBOSE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VERIFY | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-ROLLBACK |JOURNAL |-APPLY_AFTER_IMAGE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BACKWARD | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BEFORE=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BROKENTRANS=file | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]ER[ROR_LIMIT][=integer] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FENCES=fence-option-list | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FETCHRESYNC | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOOKBACK_LIMIT=<lookback_limit_options> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOSTTRANS[=file] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ONLINE |V5.5-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-PARA[LLEL][=n] |V6.3-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RES[YNC]=hexa;journal_sequence_number | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VERBOSE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-VERIFY | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-SHOW=<show-option-list> |JOURNAL |-ACTIVE_PROCESSES | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ALL | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BROKEN_TRANSACTIONS | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-HEADER | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-PROCESSES | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-STATISTICS | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-AFTER=time | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-USER=user-list | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-TRANSACTION=[KILL|SET] | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INTERACTIVE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-GLOBAL=<global_list> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ID=<pid_list> | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INTERACTIVE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-PARA[LLEL][=n] |V6.3-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-SINCE |BACKUP |-BYTESTREAM | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-COMPREHENSIVE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-DATABASE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INCREMENTAL | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RECORD | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ |-SO[URCE] |REPLICATE |-ACTIVATE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-BUFFSIZE=Buffer_size | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHANGELOG | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CHECKHEALTH | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CMPLVL=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-CONNECTPARAMS=connection_options | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-DEACTIVATE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-DETAIL | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FILTER=filter_name | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-FREEZE=on|off |V6.0-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]COMMENT=string | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-INSTSECONDARY=secondary_instance name | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-NOJNLFILEONLY |V6.2-001 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-JNLPOOL-LOG=log_file | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOG_INTERVAL=integer | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-LOSTTNCOMPLETE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-NEEDRESTART | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-PASSIVE | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-[NO]PLAINTEXTFALLBACK |V6.1-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-PROPAGATEPRIMARY | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-RENEGOTIATE_INTERVAL=minutes | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ROOTPRIMARY | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SECONDARY=secondary_instance_name | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SHOWBACKLOG | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-SHUTDOWN | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-START | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-STATSLOG | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-STOPSOURCEFILTER | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-TIMEOUT=seconds | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-TLSID=label |V6.1-000 |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-UPDOK | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-UPDNOTOK | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | | |-ZEROBACKLOG | |
+ |--------------------------------------+--------------------------+------------------------------------------+----------|
+ | |DOWNGRADE | | |
+ |-VERSION={V4|V5} | |file-name | |
+ | |UPGRADE | | |
+ +-----------------------------------------------------------------------------------------------------------------------+
+
+ * Denotes the GT.M version in which the qualifier or command was first
+ introduced. This column is maintained for qualifiers and command
+ introduced in GT.M versions starting with GT.M V5.4-002.
1 Copyright
Copyright
@@ -8087,7 +8435,7 @@
**Note**
- This help file is a concise representation of revision V6.3-001 of the
+ This help file is a concise representation of revision V6.3-003 of the
UNIX Administration and Operations Guide. To obtain a copy of the current
revision, go to www.fis-gtm.com and then click on the User Documentation
tab.
diff --git a/sr_port/mupip_backup.c b/sr_port/mupip_backup.c
old mode 100755
new mode 100644
index 13037ae..9fcd782
--- a/sr_port/mupip_backup.c
+++ b/sr_port/mupip_backup.c
@@ -124,11 +124,11 @@ GBLREF int process_exiting; /* Process is on it's way out */
GBLREF boolean_t jnlpool_init_needed;
GBLREF backup_reg_list *mu_repl_inst_reg_list;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF uint4 mutex_per_process_init_pid;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
LITREF char gtm_release_name[];
LITREF int4 gtm_release_name_len;
@@ -162,6 +162,7 @@ error_def(ERR_NOTRNDMACC);
error_def(ERR_OFRZACTIVE);
error_def(ERR_PERMGENFAIL);
error_def(ERR_PREVJNLLINKCUT);
+error_def(ERR_REPLINSTUNDEF);
error_def(ERR_REPLJNLCNFLCT);
error_def(ERR_REPLPOOLINST);
error_def(ERR_REPLREQROLLBACK);
@@ -169,6 +170,7 @@ error_def(ERR_REPLSTATE);
error_def(ERR_REPLSTATEERR);
error_def(ERR_SYSCALL);
error_def(ERR_TEXT);
+error_def(ERR_FILENAMETOOLONG);
ZOS_ONLY(error_def(ERR_BADTAG);)
static char * const jnl_parms[] =
@@ -220,7 +222,7 @@ void mupip_backup(void)
char *tempfilename, *ptr;
uint4 status, ret, kip_count;
unsigned short s_len, length;
- int4 size, crit_counter, save_errno, rv;
+ int4 size, crit_counter, save_errno, rv, orig_buff_size;
uint4 ustatus, reg_count;
trans_num tn;
shmpool_buff_hdr_ptr_t sbufh_p;
@@ -245,21 +247,24 @@ void mupip_backup(void)
gd_region *r_save, *reg;
int sync_io_status;
boolean_t sync_io, sync_io_specified;
- boolean_t dummy_ftok_counter_halted, repl_inst_available;
+ boolean_t dummy_ftok_counter_halted;
+ void *repl_inst_available;
struct stat stat_buf;
int fstat_res, fclose_res, tmpfd;
gd_segment *seg;
- char instfilename[MAX_FN_LEN + 1], *errptr, scndry_msg[OUT_BUFF_SIZE];
+ char *errptr, scndry_msg[OUT_BUFF_SIZE];
unsigned int full_len;
unix_db_info *udi;
sgmnt_addrs *csa;
repl_inst_hdr repl_instance, *save_inst_hdr;
- unsigned char *cmdptr, command[MAX_FN_LEN * 2 + 5]; /* 5 == SIZEOF("cp") + 2 (space) + 1 (NULL) */
+ unsigned char *cmdptr;
+ unsigned char command[(GTM_PATH_MAX) * 2 + 5]; /*2 files in the cmd, 5 == SIZEOF("cp") + 2 (space) + 1 (NULL)*/
struct shmid_ds shm_buf;
struct semid_ds semstat;
union semun semarg;
int4 shm_id, sem_id;
replpool_identifier replpool_id;
+ DEBUG_ONLY(jnlpool_addrs_ptr_t jnlpool_save);
sm_uc_ptr_t start_addr;
int user_id;
int group_id;
@@ -491,6 +496,8 @@ void mupip_backup(void)
size = ROUND_UP(SIZEOF_FILE_HDR_MAX, DISK_BLOCK_SIZE);
ESTABLISH(mu_freeze_ch);
tempfilename = tempdir_full.addr = tempdir_full_buffer;
+ orig_buff_size = SIZEOF(tempdir_full_buffer);
+ tempdir_full.len = orig_buff_size;
if (TRUE == online)
{
tempdir_log.addr = GTM_BAK_TEMPDIR_LOG_NAME;
@@ -532,7 +539,7 @@ void mupip_backup(void)
continue;
}
gv_cur_region = rptr->reg;
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
if (gv_cur_region->was_open)
{
gv_cur_region->open = FALSE;
@@ -580,9 +587,19 @@ void mupip_backup(void)
ptr--;
if (ptr > rptr->backup_file.addr)
{
- memcpy(tempdir_trans_buffer, rptr->backup_file.addr,
- (tempdir_trans.len = INTCAST(ptr - rptr->backup_file.addr + 1)));
- tempdir_trans_buffer[tempdir_trans.len] = '\0';
+ tempdir_trans.len = INTCAST(ptr - rptr->backup_file.addr + 1);
+ if (SIZEOF(tempdir_trans_buffer) >= tempdir_trans.len)
+ {
+ memcpy(tempdir_trans_buffer, rptr->backup_file.addr, tempdir_trans.len);
+ tempdir_trans_buffer[tempdir_trans.len] = '\0';
+ }
+ else
+ {
+ gtm_putmsg_csa(CSA_ARG(cs_addrs) VARLSTCNT(4) ERR_FILEPARSE, 2,
+ rptr->backup_file.len, rptr->backup_file.addr);
+ mubclnup(rptr, need_to_del_tempfile);
+ mupip_exit(ERR_FILENAMETOOLONG);
+ }
} else
{
tempdir_trans_buffer[0] = '.';
@@ -590,6 +607,8 @@ void mupip_backup(void)
tempdir_trans.len = 1;
}
}
+ /* Reset length , since gtm_file_stat expects the full buffer length as input */
+ tempdir_full.len = orig_buff_size;
/* verify the accessibility of the tempdir */
if (FILE_STAT_ERROR == (fstat_res = gtm_file_stat(&tempdir_trans, NULL, &tempdir_full, FALSE, &ustatus)))
{
@@ -598,6 +617,14 @@ void mupip_backup(void)
mubclnup(rptr, need_to_del_tempfile);
mupip_exit(ustatus);
}
+ /*creating temp filename here , check if we have the required space*/
+ if (orig_buff_size <= (tempdir_full.len + strlen(tempnam_prefix) + SIZEOF(uint4)))
+ {
+ gtm_putmsg_csa(CSA_ARG(cs_addrs) VARLSTCNT(4) ERR_FILEPARSE, 2, tempdir_trans.len,
+ tempdir_trans.addr);
+ mubclnup(rptr, need_to_del_tempfile);
+ mupip_exit(ERR_FILENAMETOOLONG);
+ }
SPRINTF(tempfilename + tempdir_full.len,"/%s_XXXXXX",tempnam_prefix);
MKSTEMP(tempfilename, rptr->backup_fd);
if (FD_INVALID == rptr->backup_fd)
@@ -721,43 +748,51 @@ void mupip_backup(void)
/* Attach to jnlpool if backup of replication instance file is needed and "jnlpool_init" did not happen as part of
* "gvcst_init" (e.g. if CUSTOM_ERRORS_AVAILABLE is FALSE).
*/
- repl_inst_available = REPL_INST_AVAILABLE;
+ repl_inst_available = REPL_INST_AVAILABLE(NULL);
if (!pool_init && repl_inst_available)
- jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL); /* will set "pool_init" if successful */
+ jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL, NULL);
if (!pool_init)
- {
- if (NULL == jnlpool.jnlpool_dummy_reg)
+ { /* pool_init is only set if the source server has setup shared memory */
+ assert(NULL != jnlpool);
+ if (!repl_inst_available)
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_REPLINSTUNDEF);
+ if (!jnlpool)
+ { /* jnlpool_init should have provided but be safe */
+ jnlpool = malloc(SIZEOF(jnlpool_addrs));
+ memset((uchar_ptr_t)jnlpool, 0, SIZEOF(jnlpool_addrs));
+ assert(NULL == jnlpool_head);
+ }
+ if (NULL == jnlpool->jnlpool_dummy_reg)
{
r_save = gv_cur_region;
mu_gv_cur_reg_init();
- jnlpool.jnlpool_dummy_reg = reg = gv_cur_region;
+ jnlpool->jnlpool_dummy_reg = reg = gv_cur_region;
gv_cur_region = r_save;
ASSERT_IN_RANGE(MIN_RN_LEN, SIZEOF(JNLPOOL_DUMMY_REG_NAME) - 1, MAX_RN_LEN);
MEMCPY_LIT(reg->rname, JNLPOOL_DUMMY_REG_NAME);
reg->rname_len = STR_LIT_LEN(JNLPOOL_DUMMY_REG_NAME);
reg->rname[reg->rname_len] = '\0';
- assertpro(repl_inst_get_name(instfilename, &full_len, MAX_FN_LEN + 1, issue_rts_error));
- /* rts_error should have been issued by repl_inst_get_name in case of 0 return */
udi = FILE_INFO(reg);
seg = reg->dyn.addr;
- memcpy((char *)seg->fname, instfilename, full_len);
+ memcpy((char *)seg->fname, replpool_id.instfilename, full_len);
udi->fn = (char *)seg->fname;
seg->fname_len = full_len;
seg->fname[full_len] = '\0';
udi->ftok_semid = INVALID_SEMID;
} else
{ /* Possible if jnlpool_init did mu_gv_cur_reg_init but returned prematurely due to NOJNLPOOL */
- assert(!jnlpool.jnlpool_dummy_reg->open);
- reg = jnlpool.jnlpool_dummy_reg;
+ assert(!jnlpool->jnlpool_dummy_reg->open);
+ reg = jnlpool->jnlpool_dummy_reg;
/* Since mu_gv_cur_reg_init is already done, ensure that the reg->rname is correct */
assert(0 == MEMCMP_LIT(reg->rname, JNLPOOL_DUMMY_REG_NAME));
assert(reg->rname_len == STR_LIT_LEN(JNLPOOL_DUMMY_REG_NAME));
assert('\0' == reg->rname[reg->rname_len]);
udi = FILE_INFO(reg);
}
+ DEBUG_ONLY(jnlpool_save = jnlpool);
do
{
- if (!ftok_sem_get(jnlpool.jnlpool_dummy_reg, TRUE, REPLPOOL_ID, FALSE, &dummy_ftok_counter_halted))
+ if (!ftok_sem_get(jnlpool->jnlpool_dummy_reg, TRUE, REPLPOOL_ID, FALSE, &dummy_ftok_counter_halted))
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_JNLPOOLSETUP);
error_mupip = TRUE;
@@ -776,18 +811,19 @@ void mupip_backup(void)
* journal pool. Attach to it after releasing the ftok lock. We expect this situation to be
* rare that we keep retrying.
*/
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
- jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool_init(GTMRELAXED, (boolean_t)FALSE, (boolean_t *)NULL, NULL);
/* "jnlpool_init" will set "pool_init" if successful */
if (pool_init)
break;
+ assert(jnlpool_save == jnlpool); /* should be reusing incomplete structure */
} while (TRUE);
}
if (pool_init)
{
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(INVALID_SEMID != udi->ftok_semid);
- if (!ftok_sem_lock(jnlpool.jnlpool_dummy_reg, FALSE))
+ if (!ftok_sem_lock(jnlpool->jnlpool_dummy_reg, FALSE))
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_JNLPOOLSETUP);
error_mupip = TRUE;
@@ -795,14 +831,14 @@ void mupip_backup(void)
}
/* (Re-)read the instance file header now that we have the ftok lock */
repl_inst_read(udi->fn, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
- if (jnlpool_ctl->ftok_counter_halted)
+ if (jnlpool->jnlpool_ctl->ftok_counter_halted)
udi->counter_ftok_incremented = FALSE; /* so we do not inadvertently delete the ftok semaphore */
}
- assert(NULL != jnlpool.jnlpool_dummy_reg);
- assert(!pool_init || (NULL != jnlpool_ctl));
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
+ assert(!pool_init || ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl)));
shm_id = repl_instance.jnlpool_shmid;
sem_id = repl_instance.jnlpool_semid;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
if (INVALID_SEMID != sem_id)
{
assert(pool_init);
@@ -876,12 +912,12 @@ repl_inst_bkup_done1:
grab_crit(gv_cur_region);
DEBUG_ONLY(reg_count++);
}
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
{ /* While a FREEZE -ONLINE was in place, all processes exited, leaving the
* shared memory up. Either autorelease, if enabled, or error out.
*/
DO_CHILLED_AUTORELEASE(cs_addrs, cs_data);
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
{
gtm_putmsg_csa(CSA_ARG(cs_addrs) VARLSTCNT(4) ERR_OFRZACTIVE, 2, DB_LEN_STR(gv_cur_region));
rptr->not_this_time = give_up_before_create_tempfile;
@@ -990,9 +1026,10 @@ repl_inst_bkup_done1:
*/
goto repl_inst_bkup_done2;
}
- assert(udi == FILE_INFO(jnlpool.jnlpool_dummy_reg));
- seg = jnlpool.jnlpool_dummy_reg->dyn.addr; /* re-initialize (for pool_init == TRUE case) */
+ assert(udi == FILE_INFO(jnlpool->jnlpool_dummy_reg));
+ seg = jnlpool->jnlpool_dummy_reg->dyn.addr; /* re-initialize (for pool_init == TRUE case) */
cmdptr = &command[0];
+ assert(SIZEOF(command) >= (5 + seg->fname_len + mu_repl_inst_reg_list->backup_file.len));
memcpy(cmdptr, "cp ", 3);
cmdptr += 3;
memcpy(cmdptr, seg->fname, seg->fname_len);
@@ -1036,17 +1073,17 @@ repl_inst_bkup_done1:
*/
csa = &udi->s_addrs;
assert(csa->critical
- == (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl + JNLPOOL_CTL_SIZE));
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
- if (repl_instance.num_histinfo != jnlpool.repl_inst_filehdr->num_histinfo)
+ == (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl + JNLPOOL_CTL_SIZE));
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
+ if (repl_instance.num_histinfo != jnlpool->repl_inst_filehdr->num_histinfo)
{
- repl_instance = *jnlpool.repl_inst_filehdr;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ repl_instance = *jnlpool->repl_inst_filehdr;
+ rel_lock(jnlpool->jnlpool_dummy_reg);
continue; /* redo the "cp" */
}
- save_inst_hdr = jnlpool.repl_inst_filehdr;
- jnlpool.repl_inst_filehdr = &repl_instance;
+ save_inst_hdr = jnlpool->repl_inst_filehdr;
+ jnlpool->repl_inst_filehdr = &repl_instance;
assert(0 != jnl_seqno);
/* All the cleanup we want is exactly done by the "repl_inst_histinfo_truncate" function.
* But we don't want to clean the instance file. We want to instead clean the backed up
@@ -1060,13 +1097,13 @@ repl_inst_bkup_done1:
COPY_JCTL_STRMSEQNO_TO_INSTHDR_IF_NEEDED;
repl_inst_histinfo_truncate(jnl_seqno); /* Flush updated file header to
* backed up instance file */
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
udi->fn = (char *)seg->fname; /* Restore */
- /* Now that instance file truncate is done, restore jnlpool.repl_inst_filehdr to its
+ /* Now that instance file truncate is done, restore jnlpool->repl_inst_filehdr to its
* original value
*/
assert(NULL != save_inst_hdr);
- jnlpool.repl_inst_filehdr = save_inst_hdr;
+ jnlpool->repl_inst_filehdr = save_inst_hdr;
} else
{ /* We are guaranteed that NO one is actively accessing the instance file. So, no need to
* truncate the backed up instance file.
@@ -1085,7 +1122,7 @@ repl_inst_bkup_done2:
assertpro(SS_NORMAL == rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM));
}
if (udi->grabbed_ftok_sem)
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
}
if (!error_mupip)
{
diff --git a/sr_port/mupip_downgrade.c b/sr_port/mupip_downgrade.c
index 4684b3d..1375b58 100755
--- a/sr_port/mupip_downgrade.c
+++ b/sr_port/mupip_downgrade.c
@@ -82,7 +82,8 @@ error_def(ERR_TEXT);
void mupip_downgrade(void)
{
- char db_fn[MAX_FN_LEN + 1], ver_spec[MAX_VERSION_LEN], dwngrd_ver[MAX_VERSION_LEN + STR_LIT_LEN(GTM_VER_LIT)];
+ char db_fn[MAX_FN_LEN + 1], ver_spec[MAX_VERSION_LEN + 1],
+ dwngrd_ver[MAX_VERSION_LEN + STR_LIT_LEN(GTM_VER_LIT)];
unsigned short db_fn_len; /* cli_get_str expects short */
unsigned short ver_spec_len;
char *hdr_ptr;
@@ -113,8 +114,9 @@ void mupip_downgrade(void)
db_fn[db_fn_len] = '\0'; /* Null terminate */
if (cli_present("VERSION"))
{
- ver_spec_len = ARRAYSIZE(ver_spec);
+ ver_spec_len = ARRAYSIZE(ver_spec) - 1; /* Ensure spare for nul */
cli_get_str("VERSION", ver_spec, &ver_spec_len);
+ ver_spec[ver_spec_len] = '\0';
cli_strupper(ver_spec);
if (0 == memcmp(ver_spec, "V4", ver_spec_len))
{ /* Downgrade file header to V4 format and downgrade EOF block from GDS-block to 512-byte block */
diff --git a/sr_port/mupip_extend.c b/sr_port/mupip_extend.c
old mode 100755
new mode 100644
index 73613fd..c77c3a6
--- a/sr_port/mupip_extend.c
+++ b/sr_port/mupip_extend.c
@@ -112,7 +112,7 @@ void mupip_extend(void)
assert((FILE_INFO(gv_cur_region))->grabbed_access_sem); /* we should have standalone access */
}
# endif
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
if (gv_cur_region->was_open)
{ /* This should not happen as extend works on only one region at a time, but handle for safety */
gtm_putmsg_csa(CSA_ARG(REG2CSA(gv_cur_region)) VARLSTCNT(4) ERR_DBOPNERR, 2, DB_LEN_STR(gv_cur_region));
@@ -158,7 +158,7 @@ void mupip_extend(void)
case dba_bg:
case dba_mm:
grab_crit(gv_cur_region);
- GRAB_UNFROZEN_CRIT(gv_cur_region, cs_addrs, cs_data);
+ GRAB_UNFROZEN_CRIT(gv_cur_region, cs_addrs);
old_total = cs_addrs->ti->total_blks;
if ((uint4)NO_FREE_SPACE == (status = GDSFILEXT(blocks, old_total, TRANS_IN_PROG_FALSE)))
{
diff --git a/sr_port/mupip_freeze.c b/sr_port/mupip_freeze.c
old mode 100755
new mode 100644
index a3b71f3..e0bcaef
--- a/sr_port/mupip_freeze.c
+++ b/sr_port/mupip_freeze.c
@@ -159,7 +159,7 @@ void mupip_freeze(void)
continue;
}
gv_cur_region = rptr->reg;
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
if (gv_cur_region->was_open) /* Already open under another name. Region will not be marked open*/
{
gv_cur_region->open = FALSE;
@@ -190,14 +190,14 @@ void mupip_freeze(void)
util_out_print("WARNING: The region !AD to be frozen contains abandoned kills",
TRUE, REG_LEN_STR(gv_cur_region));
}
- if (freeze && FROZEN_CHILLED(cs_data))
+ if (freeze && FROZEN_CHILLED(cs_addrs))
{
util_out_print("FREEZE region !AD already has an online freeze", TRUE, REG_LEN_STR(rptr->reg));
PRINT_FREEZEERR;
cs_addrs->persistent_freeze = TRUE; /* Prevent removal of existing freeze */
continue;
}
- if (!cs_data->freeze && cs_data->freeze_online)
+ if (!cs_data->freeze && cs_addrs->nl->freeze_online)
{
util_out_print("WARNING: The region !AD had an online freeze, but it was autoreleased.",
TRUE, REG_LEN_STR(gv_cur_region));
diff --git a/sr_port/mupip_recover.c b/sr_port/mupip_recover.c
old mode 100755
new mode 100644
index 0e8e8ed..78830ef
--- a/sr_port/mupip_recover.c
+++ b/sr_port/mupip_recover.c
@@ -65,7 +65,7 @@ GBLREF jnl_gbls_t jgbl;
GBLREF mur_gbls_t murgbl;
GBLREF reg_ctl_list *mur_ctl;
GBLREF jnl_process_vector *prc_vec;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF repl_conn_info_t *this_side, *remote_side;
GBLREF int4 strm_index;
#ifdef GTM_TRIGGER
@@ -270,11 +270,11 @@ void mupip_recover(void)
*/
if (mur_options.rollback && !mur_options.forward && !intrrupted_recov_processing && all_gen_properly_closed)
{
- assert(NULL != jnlpool.repl_inst_filehdr);
- replinst_seqno = jnlpool.repl_inst_filehdr->jnl_seqno;
- if (!jnlpool.repl_inst_filehdr->crash && (0 != replinst_seqno) && (max_reg_seqno != replinst_seqno))
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
+ replinst_seqno = jnlpool->repl_inst_filehdr->jnl_seqno;
+ if (!jnlpool->repl_inst_filehdr->crash && (0 != replinst_seqno) && (max_reg_seqno != replinst_seqno))
{
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPLINSTDBMATCH, 4,
LEN_AND_STR(udi->fn), &replinst_seqno, &max_reg_seqno);
mupip_exit(ERR_MUNOACTION);
@@ -298,7 +298,7 @@ void mupip_recover(void)
/* Determine if any of the databases are taken back in time.
* If so we have to increment cycles in mur_close_files.
*/
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert(NULL != jnlpool->repl_inst_filehdr);
murgbl.incr_db_rlbkd_cycle = FALSE;
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_RLBKJNSEQ, 2,
&murgbl.consist_jnl_seqno, &murgbl.consist_jnl_seqno);
@@ -375,7 +375,7 @@ void mupip_recover(void)
{ /* -RESYNC=<strm_seqno> AND -RSYNC_STRM=<strm_num> were specified. Verify input stream is a valid #
* and input seqno is a valid strm_seqno in the current replication instance file. If not, issue errors.
*/
- if (!jnlpool.repl_inst_filehdr->is_supplementary)
+ if (!jnlpool->repl_inst_filehdr->is_supplementary)
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_RSYNCSTRMSUPPLONLY);
mupip_exit(ERR_MUNOACTION);
@@ -397,7 +397,7 @@ void mupip_recover(void)
assert(ERR_REPLINSTNOHIST == status);
SPRINTF(histdetail, "Stream Seqno "INT8_FMT" "INT8_FMTX" (Stream # %2d) ",
murgbl.resync_seqno - 1, murgbl.resync_seqno - 1, murgbl.resync_strm_index);
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPLINSTNOHIST, 4,
LEN_AND_STR(histdetail), LEN_AND_STR(udi->fn));
mupip_exit(ERR_MUNOACTION);
@@ -421,7 +421,7 @@ void mupip_recover(void)
* murgbl.resync_strm_seqno.
*/
assert(!remote_side->is_supplementary
- || (jnlpool.repl_inst_filehdr->is_supplementary && (0 == murgbl.resync_strm_index)));
+ || (jnlpool->repl_inst_filehdr->is_supplementary && (0 == murgbl.resync_strm_index)));
if ((INVALID_SUPPL_STRM != murgbl.resync_strm_index) && !remote_side->is_supplementary)
{
assert((0 <= murgbl.resync_strm_index) && (MAX_SUPPL_STRMS > murgbl.resync_strm_index));
@@ -550,10 +550,11 @@ void mupip_recover(void)
if (jgbl.onlnrlbk)
{
/* Determine if any of the databases are taken back in time. If so we have to increment cycles in mur_close_files */
- assert(NULL != jnlpool.repl_inst_filehdr);
- assert(!jnlpool.repl_inst_filehdr->jnl_seqno || (jnlpool.repl_inst_filehdr->jnl_seqno >= murgbl.consist_jnl_seqno));
- murgbl.incr_db_rlbkd_cycle = (jnlpool.repl_inst_filehdr->jnl_seqno)
- ? (jnlpool.repl_inst_filehdr->jnl_seqno != murgbl.consist_jnl_seqno)
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
+ assert(!jnlpool->repl_inst_filehdr->jnl_seqno
+ || (jnlpool->repl_inst_filehdr->jnl_seqno >= murgbl.consist_jnl_seqno));
+ murgbl.incr_db_rlbkd_cycle = (jnlpool->repl_inst_filehdr->jnl_seqno)
+ ? (jnlpool->repl_inst_filehdr->jnl_seqno != murgbl.consist_jnl_seqno)
: FALSE;
}
/* PHASE 7 : Close all files, rundown and exit */
diff --git a/sr_port/mupip_set.c b/sr_port/mupip_set.c
index 7cc8970..efd1fba 100644
--- a/sr_port/mupip_set.c
+++ b/sr_port/mupip_set.c
@@ -92,6 +92,7 @@ void mupip_set(void)
|| (CLI_PRESENT == cli_present("EXTENSION_COUNT"))
|| (CLI_PRESENT == cli_present("FLUSH_TIME"))
|| (CLI_PRESENT == cli_present("GLOBAL_BUFFERS"))
+ || (CLI_PRESENT == cli_present("HARD_SPIN_COUNT"))
|| (CLI_NEGATED == cli_present("INST_FREEZE_ON_ERROR"))
|| (CLI_PRESENT == cli_present("INST_FREEZE_ON_ERROR"))
|| (CLI_PRESENT == cli_present("KEY_SIZE"))
@@ -99,15 +100,20 @@ void mupip_set(void)
|| (CLI_NEGATED == cli_present("LCK_SHARES_DB_CRIT"))
|| (CLI_PRESENT == cli_present("LOCK_SPACE"))
|| (CLI_PRESENT == cli_present("MUTEX_SLOTS"))
+ || (CLI_PRESENT == cli_present("NULL_SUBSCRIPTS"))
|| (CLI_PRESENT == cli_present("PARTIAL_RECOV_BYPASS"))
|| (CLI_NEGATED == cli_present("QDBRUNDOWN"))
|| (CLI_PRESENT == cli_present("QDBRUNDOWN"))
+ || (CLI_PRESENT == cli_present("READ_ONLY"))
+ || (CLI_NEGATED == cli_present("READ_ONLY"))
|| (CLI_PRESENT == cli_present("RECORD_SIZE"))
|| (CLI_PRESENT == cli_present("RESERVED_BYTES"))
|| (CLI_PRESENT == cli_present("SLEEP_SPIN_COUNT"))
- || (CLI_PRESENT == cli_present("SPIN_SLEEP_LIMIT"))
+ || (CLI_PRESENT == cli_present("SPIN_SLEEP_MASK"))
|| (CLI_NEGATED == cli_present("STATS"))
|| (CLI_PRESENT == cli_present("STATS"))
+ || (CLI_PRESENT == cli_present("STDNULLCOLL"))
+ || (CLI_NEGATED == cli_present("STDNULLCOLL"))
|| (CLI_PRESENT == cli_present("VERSION"))
|| (CLI_PRESENT == cli_present("WAIT_DISK")))
{
diff --git a/sr_port/mupip_set_jnlfile_aux.c b/sr_port/mupip_set_jnlfile_aux.c
index f3ac031..c8adc26 100755
--- a/sr_port/mupip_set_jnlfile_aux.c
+++ b/sr_port/mupip_set_jnlfile_aux.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -47,13 +47,14 @@ error_def(ERR_JNLFILNOTCHG);
error_def(ERR_JNLFNF);
error_def(ERR_MUSTANDALONE);
error_def(ERR_PREVJNLLINKSET);
+error_def(ERR_FILENAMETOOLONG);
uint4 mupip_set_jnlfile_aux(jnl_file_header *header, char *jnl_fname)
{
unsigned short buf_len;
unsigned int full_buf_len, prev_buf_len, jnl_fn_len;
uint4 ustatus;
- char buf[JNL_NAME_SIZE], full_buf[JNL_NAME_SIZE], prev_buf[JNL_NAME_SIZE];
+ char buf[JNL_NAME_SIZE], full_buf[GTM_PATH_MAX], prev_buf[JNL_NAME_SIZE];
char jnl_fn[JNL_NAME_SIZE];
mstr jnlfile, jnldef;
@@ -108,6 +109,12 @@ uint4 mupip_set_jnlfile_aux(jnl_file_header *header, char *jnl_fname)
prev_buf_len = SIZEOF("NULL") - 1;
memcpy(prev_buf, "NULL", prev_buf_len);
}
+ if (full_buf_len > JNL_NAME_SIZE)
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_FILEPARSE, 2, full_buf_len,
+ full_buf, ERR_FILENAMETOOLONG);
+ return ((uint4)ERR_JNLFILNOTCHG);
+ }
header->prev_jnl_file_name_length = full_buf_len;
memcpy(header->prev_jnl_file_name, full_buf, full_buf_len);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_PREVJNLLINKSET, 4, prev_buf_len, prev_buf,
diff --git a/sr_port/mupip_set_journal.c b/sr_port/mupip_set_journal.c
old mode 100755
new mode 100644
index 7297d7b..a0471f0
--- a/sr_port/mupip_set_journal.c
+++ b/sr_port/mupip_set_journal.c
@@ -108,7 +108,7 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
set_jnl_options jnl_options;
boolean_t curr_jnl_present, /* for current state 2, is current journal present? */
jnl_points_to_db, keep_prev_link, safe_to_switch, newjnlfiles, jnlname_same,
- this_iter_prevlinkcut_error, do_prevlinkcut_error;
+ this_iter_prevlinkcut_error, do_prevlinkcut_error, ok_to_standalone;
enum jnl_state_codes jnl_curr_state;
enum repl_state_codes repl_curr_state;
mstr jnlfile, jnldef, tmpjnlfile;
@@ -200,7 +200,7 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
}
fc = seg->file_cntl;
/* open shared to see what's possible */
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
tp_change_reg();
assert(!gv_cur_region->was_open);
rptr->sd = csd = cs_data;
@@ -213,12 +213,12 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
continue;
}
grab_crit(gv_cur_region); /* corresponding rel_crit() is done in mupip_set_jnl_cleanup() */
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
{ /* While a FREEZE -ONLINE was in place, all processes exited, leaving the
* shared memory up. Either autorelease, if enabled, or error out.
*/
DO_CHILLED_AUTORELEASE(cs_addrs, cs_data);
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
{
gtm_putmsg_csa(CSA_ARG(cs_addrs) VARLSTCNT(4) ERR_OFRZACTIVE, 2, DB_LEN_STR(gv_cur_region));
exit_status |= EXIT_WRN;
@@ -266,6 +266,12 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
(repl_closed != repl_curr_state && repl_closed == rptr->repl_new_state) ||
(repl_closed == repl_curr_state && repl_open == rptr->repl_new_state))
{
+ /* If there was an online freeze and it was autoreleased, we need to keep shared memory up, but
+ * if we go into standalone then the mupip_set_jnl_cleanup() below will call db_ipcs_reset() and
+ * take it down. After gds_rundown() we don't have shared memory attached, so we don't have the
+ * opportunity to check later.
+ */
+ ok_to_standalone = !CHILLED_AUTORELEASE(REG2CSA(gv_cur_region));
/* Rundown the database file since we did "gvcst_init" and now will call "mu_rndwn_file".
* Since we are going to reuse the udi etc. that was allocated, use CLEANUP_UDI_FALSE.
*/
@@ -281,7 +287,7 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
assert(NULL != seg->file_cntl->file_info);
if (EXIT_NRM != gds_rundown_status) /* skip mu_rndwn_file (STANDALONE) */
continue;
- if (STANDALONE(gv_cur_region))
+ if (ok_to_standalone && STANDALONE(gv_cur_region))
{
rptr->exclusive = TRUE;
fc->op = FC_OPEN;
@@ -360,6 +366,7 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
cs_addrs = &FILE_INFO(gv_cur_region)->s_addrs;
assert(rptr->sd == cs_addrs->hdr);
cs_data = csd = rptr->sd;
+ assert((csd->read_only == 0) || (csd->read_only == 1));
jnl_curr_state = (enum jnl_state_codes)csd->jnl_state;
repl_curr_state = (enum repl_state_codes)csd->repl_state;
jnl_info.csd = csd;
@@ -530,6 +537,7 @@ uint4 mupip_set_journal(unsigned short db_fn_len, char *db_fn)
memcpy(jnl_info.jnl, tmpjnlfile.addr, tmpjnlfile.len);
jnl_info.jnl_len = tmpjnlfile.len; /* get_full_path() null terminates and limits tmpjnlfile to MAX_FN_LEN */
/* Note: At this point jnlfile should have expanded journal name with extension */
+ jnl_info.jnl[jnl_info.jnl_len] = 0;
jnlname_same = ((jnl_info.jnl_len == csd->jnl_file_len)
&& (0 == memcmp(jnl_info.jnl, csd->jnl_file_name, jnl_info.jnl_len))) ? TRUE : FALSE;
jnlfile.addr = (char *)csd->jnl_file_name;
diff --git a/sr_port/mupip_set_journal_fname.c b/sr_port/mupip_set_journal_fname.c
index d4cc95b..fd3aa2e 100755
--- a/sr_port/mupip_set_journal_fname.c
+++ b/sr_port/mupip_set_journal_fname.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -32,6 +33,7 @@
#include "cli.h"
#include "iosp.h"
#include "jnl.h"
+#include "min_max.h"
#define DOT '.'
#define UNDERSCORE '_'
@@ -80,13 +82,13 @@ void mupip_set_journal_fname(jnl_create_info *jnl_info)
#endif
if (0 == ext_name_len) /* file name ended with DOT */
jnl_info->jnl[jnl_info->jnl_len++] = UNDERSCORE;
- else if (0 != memcmp(ext_name, DEF_DB_EXT_NAME, ext_name_len))
+ else if (0 != STRNCMP_LIT_LEN(ext_name, DEF_DB_EXT_NAME, ext_name_len))
{
jnl_info->jnl[jnl_info->jnl_len++] = UNDERSCORE;
memcpy(jnl_info->jnl + jnl_info->jnl_len, ext_name, ext_name_len);
jnl_info->jnl_len += ext_name_len;
}
- memcpy(jnl_info->jnl + jnl_info->jnl_len, DEF_JNL_EXT_NAME, SIZEOF(DEF_JNL_EXT_NAME) - 1);
+ MEMCPY_LIT(jnl_info->jnl + jnl_info->jnl_len, DEF_JNL_EXT_NAME);
jnl_info->jnl_len = jnl_info->jnl_len + SIZEOF(DEF_JNL_EXT_NAME) - 1;
} else
{
diff --git a/sr_port/mur_apply_pblk.c b/sr_port/mur_apply_pblk.c
index 5f1ff9c..5f0d795 100755
--- a/sr_port/mur_apply_pblk.c
+++ b/sr_port/mur_apply_pblk.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2003-2016 Fidelity National Information *
+ * Copyright (c) 2003-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -50,13 +50,13 @@
#include "interlock.h"
#include "gtm_multi_proc.h"
-GBLREF volatile int4 db_fsync_in_prog; /* for DB_FSYNC macro usage */
-GBLREF boolean_t blocksig_initialized;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF reg_ctl_list *mur_ctl;
-GBLREF mur_gbls_t murgbl;
-GBLREF mur_opt_struct mur_options;
-GBLREF jnl_gbls_t jgbl;
+GBLREF volatile int4 db_fsync_in_prog; /* for DB_FSYNC macro usage */
+GBLREF boolean_t blocksig_initialized;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF reg_ctl_list *mur_ctl;
+GBLREF mur_gbls_t murgbl;
+GBLREF mur_opt_struct mur_options;
+GBLREF jnl_gbls_t jgbl;
error_def(ERR_DBFSYNCERR);
error_def(ERR_JNLBADRECFMT);
@@ -495,7 +495,7 @@ uint4 mur_output_pblk(reg_ctl_list *rctl)
if (!murgbl.incr_onln_rlbk_cycle)
{
murgbl.incr_onln_rlbk_cycle = TRUE;
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_ORLBKNOSTP);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_ORLBKNOSTP);
assert(blocksig_initialized); /* set to TRUE at process startup time */
diff --git a/sr_port/mur_back_process.c b/sr_port/mur_back_process.c
index f194bdd..120fbf7 100644
--- a/sr_port/mur_back_process.c
+++ b/sr_port/mur_back_process.c
@@ -508,22 +508,36 @@ uint4 mur_back_phase1(reg_ctl_list *rctl)
*/
if ((JRT_EOF != rectype) && (JRT_EPOCH != rectype) && (jnlrec->prefix.time < jgbl.mur_tp_resolve_time))
{
- rctl->jctl_error = jctl;
- /* Assert that the new about-to-be-set TP resolve time does not differ by more than
- * twice the idle-EPOCH interval (which is defined by TIM_DEFER_DBSYNC). Twice is not a magic
- * number, but just to allow for some relaxation. The only exception is if this is an
- * interrupted recovery in which case the difference could be significant. One reason we
- * know why this could happen is because mur_close_files calls gds_rundown on all regions
- * AFTER resetting csd->intrpt_recov_tp_resolve_time to 0. So, if we get killed at
- * right AFTER doing gds_rundown on one region, but BEFORE doing gds_rundown on other
- * regions, then a subsequent ROLLBACK finds a higher TP resolve time on one region and
- * sets the value to jgbl.mur_tp_resolve_time but later finds other regions with records
- * having timestamps less than jgbl.mur_tp_resolve_time. See GTM-7204 for more details.
- */
- assert(((TIM_DEFER_DBSYNC * 2) >= (jgbl.mur_tp_resolve_time - jnlrec->prefix.time))
- || ((WBTEST_CRASH_SHUTDOWN_EXPECTED == gtm_white_box_test_case_number)
- && murgbl.intrpt_recovery));
- return ERR_CHNGTPRSLVTM;
+ for ( ; JRT_PFIN == rectype; )
+ { /* Skip over PFIN records at the end of the journal */
+ if (SS_NORMAL != (status = mur_prev(jctl, 0)))
+ break;
+ jnlrec = mur_desc->jnlrec; /* keep jnlrec uptodate */
+ jctl->rec_offset -= mur_desc->jreclen;
+ assert(jctl->rec_offset >= mur_desc->cur_buff->dskaddr);
+ assert(JNL_HDR_LEN <= jctl->rec_offset);
+ rectype = (enum jnl_record_type)jnlrec->prefix.jrec_type;
+ }
+ assertpro(JRT_EOF != rectype); /* Cannot find an EOF anywhere but the last record of the journal */
+ if (JRT_EPOCH != rectype)
+ {
+ rctl->jctl_error = jctl;
+ /* Assert that the new about-to-be-set TP resolve time does not differ by more than
+ * twice the idle-EPOCH interval (which is defined by TIM_DEFER_DBSYNC). Twice is not a magic
+ * number, but just to allow for some relaxation. The only exception is if this is an
+ * interrupted recovery in which case the difference could be significant. One reason we
+ * know why this could happen is because mur_close_files calls gds_rundown on all regions
+ * AFTER resetting csd->intrpt_recov_tp_resolve_time to 0. So, if we get killed at
+ * right AFTER doing gds_rundown on one region, but BEFORE doing gds_rundown on other
+ * regions, then a subsequent ROLLBACK finds a higher TP resolve time on one region and
+ * sets the value to jgbl.mur_tp_resolve_time but later finds other regions with records
+ * having timestamps less than jgbl.mur_tp_resolve_time. See GTM-7204 for more details.
+ */
+ assert(((TIM_DEFER_DBSYNC * 2) >= (jgbl.mur_tp_resolve_time - jnlrec->prefix.time))
+ || ((WBTEST_CRASH_SHUTDOWN_EXPECTED == gtm_white_box_test_case_number)
+ && murgbl.intrpt_recovery));
+ return ERR_CHNGTPRSLVTM;
+ }
}
}
/* Do intializations before invoking "mur_back_processing_one_region" function */
diff --git a/sr_port/mur_close_file_extfmt.c b/sr_port/mur_close_file_extfmt.c
old mode 100755
new mode 100644
index d7764f3..2a0d4e3
--- a/sr_port/mur_close_file_extfmt.c
+++ b/sr_port/mur_close_file_extfmt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2003-2015 Fidelity National Information *
+ * Copyright (c) 2003-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -78,7 +78,7 @@ void mur_close_file_extfmt(boolean_t in_mur_close_files)
extr_file_created = FALSE;
for (rctl = mur_ctl, rctl_top = mur_ctl + murgbl.reg_total; rctl < rctl_top; rctl++)
{
- this_reg_file_created = rctl->extr_file_created[recstat];
+ this_reg_file_created = rctl->extr_file_created[recstat] && (NULL != rctl->file_info[recstat]);
if (this_reg_file_created)
extr_file_created = TRUE;
if (!in_mur_close_files)
diff --git a/sr_port/mur_close_files.c b/sr_port/mur_close_files.c
index 289776f..fe8d5b5 100644
--- a/sr_port/mur_close_files.c
+++ b/sr_port/mur_close_files.c
@@ -84,8 +84,8 @@ GBLREF char *repl_state_lit[];
GBLREF gd_region *gv_cur_region;
GBLREF int4 forced_exit_err;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF recvpool_addrs recvpool;
GBLREF mur_gbls_t murgbl;
GBLREF mur_opt_struct mur_options;
GBLREF reg_ctl_list *mur_ctl;
@@ -176,7 +176,7 @@ boolean_t mur_close_files(void)
strm_seqno_nonzero = FALSE;
}
anticipatory_freeze_available = INST_FREEZE_ON_ERROR_POLICY;
- inst_hdr = jnlpool.repl_inst_filehdr;
+ inst_hdr = jnlpool ? jnlpool->repl_inst_filehdr : NULL;
if (jgbl.onlnrlbk)
{
/* Note that murgbl.consist_jnl_seqno is maintained even if the only thing done by rollback was
@@ -201,16 +201,15 @@ boolean_t mur_close_files(void)
if (murgbl.incr_db_rlbkd_cycle)
murgbl.incr_onln_rlbk_cycle = TRUE;
}
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
# if 0
/* disable assertion until we make jnlpool_init conditional on anticipatory freeze available */
assert(jgbl.onlnrlbk || (NULL == jnlpool_ctl));
# endif
- assert((NULL == jnlpool_ctl) || (TRUE == inst_hdr->crash));
- assert((NULL == jnlpool_ctl) || jgbl.onlnrlbk || anticipatory_freeze_available);
- if (NULL != jnlpool_ctl)
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl)) || (TRUE == inst_hdr->crash));
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl)) || jgbl.onlnrlbk || anticipatory_freeze_available);
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
ASSERT_VALID_JNLPOOL(csa);
}
for (rctl = mur_ctl, rctl_top = mur_ctl + murgbl.reg_full_total; rctl < rctl_top; rctl++)
@@ -286,9 +285,9 @@ boolean_t mur_close_files(void)
csa->root_search_cycle = csa->nl->root_search_cycle;
csa->onln_rlbk_cycle = csa->nl->onln_rlbk_cycle;
csa->db_onln_rlbkd_cycle = csa->nl->db_onln_rlbkd_cycle;
- if (incr_jnlpool_rlbk_cycle && (NULL != jnlpool_ctl) && murgbl.incr_onln_rlbk_cycle)
+ if (incr_jnlpool_rlbk_cycle && (jnlpool && jnlpool->jnlpool_ctl) && murgbl.incr_onln_rlbk_cycle)
{
- jnlpool.jnlpool_ctl->onln_rlbk_cycle++;
+ jnlpool->jnlpool_ctl->onln_rlbk_cycle++;
incr_jnlpool_rlbk_cycle = FALSE;
}
}
@@ -625,7 +624,12 @@ boolean_t mur_close_files(void)
assert(!mur_options.forward); /* or else murgbl.repl_standalone won't be TRUE
* (needed to get in this "if" block)
*/
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool);
+ reg = jnlpool->jnlpool_dummy_reg;
+ if (NULL == reg)
+ reg = recvpool.recvpool_dummy_reg; /* in case jnlpool not fully setup */
+ assert(NULL != reg);
+ udi = FILE_INFO(reg);
csa = &udi->s_addrs;
ASSERT_HOLD_REPLPOOL_SEMS;
if (murgbl.clean_exit && !mur_options.rollback_losttnonly && murgbl.consist_jnl_seqno)
@@ -670,39 +674,42 @@ boolean_t mur_close_files(void)
* (a) ONLINE ROLLBACK
* (b) Regular ROLLBACK with Anticipatory Freeze scheme
*/
- if ((NULL != jnlpool_ctl) && !(was_crit = csa->now_crit)) /* note: assignment */
+ if (jnlpool->jnlpool_ctl && !(was_crit = csa->now_crit)) /* note: assignment */
{
assert(!jgbl.onlnrlbk);
+ assert(NULL != jnlpool);
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
assert(anticipatory_freeze_available);
assert(!csa->hold_onto_crit);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
}
last_histinfo_seqno = repl_inst_histinfo_truncate(murgbl.consist_jnl_seqno);
- if ((NULL != jnlpool_ctl) && !was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ if ((NULL != jnlpool->jnlpool_ctl) && !was_crit)
+ rel_lock(jnlpool->jnlpool_dummy_reg);
/* The above also updates "repl_inst_filehdr->jnl_seqno". If regular rollback, it also
* updates "repl_inst_filehdr->crash" to FALSE. For online rollback, we have to update
* the crash field ONLY if there is NO journal pool and that is done below.
*/
- if ((NULL != jnlpool_ctl) && jgbl.onlnrlbk)
+ if ((NULL != jnlpool->jnlpool_ctl) && jgbl.onlnrlbk)
{ /* journal pool still exists and some backward and forward processing happened. More
* importantly, the database was taken to a prior logical state. Refresh the journal
* pool fields to reflect the new state.
*/
assert(csa->now_crit && csa->hold_onto_crit);
- jnlpool_ctl->last_histinfo_seqno = last_histinfo_seqno;
- jnlpool_ctl->jnl_seqno = murgbl.consist_jnl_seqno;
- jnlpool_ctl->start_jnl_seqno = murgbl.consist_jnl_seqno;
- jnlpool_ctl->rsrv_write_addr = jnlpool_ctl->write_addr = 0;
- jnlpool_ctl->rsrv_write_addr = 0;
- assert(jnlpool_ctl->phase2_commit_index1 == jnlpool_ctl->phase2_commit_index2);
- jnlpool_ctl->lastwrite_len = 0;
- jnlpool_ctl->max_zqgblmod_seqno = max_zqgblmod_seqno;
+ jnlpool->jnlpool_ctl->last_histinfo_seqno = last_histinfo_seqno;
+ jnlpool->jnlpool_ctl->jnl_seqno = murgbl.consist_jnl_seqno;
+ jnlpool->jnlpool_ctl->start_jnl_seqno = murgbl.consist_jnl_seqno;
+ jnlpool->jnlpool_ctl->rsrv_write_addr = jnlpool->jnlpool_ctl->write_addr = 0;
+ jnlpool->jnlpool_ctl->rsrv_write_addr = 0;
+ assert(jnlpool->jnlpool_ctl->phase2_commit_index1
+ == jnlpool->jnlpool_ctl->phase2_commit_index2);
+ jnlpool->jnlpool_ctl->lastwrite_len = 0;
+ jnlpool->jnlpool_ctl->max_zqgblmod_seqno = max_zqgblmod_seqno;
/* Keep strm_seqno in journal pool in sync with the one in instance file header */
- assert(SIZEOF(jnlpool_ctl->strm_seqno) == SIZEOF(inst_hdr->strm_seqno));
- memcpy(jnlpool_ctl->strm_seqno, inst_hdr->strm_seqno,
+ assert(SIZEOF(jnlpool->jnlpool_ctl->strm_seqno) == SIZEOF(inst_hdr->strm_seqno));
+ memcpy(jnlpool->jnlpool_ctl->strm_seqno, inst_hdr->strm_seqno,
MAX_SUPPL_STRMS * SIZEOF(seq_num));
- if (!jnlpool_ctl->upd_disabled)
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{ /* Simulate a fresh instance startup by writing a new history record with
* the rollback'ed sequence number. This is required as otherwise the source
* server startup will NOT realize that receiver server needs to rollback or
@@ -718,16 +725,16 @@ boolean_t mur_close_files(void)
{ /* database was updated, but the logical state is unchanged. We need to make sure
* the jnlpool structures have sane and expected values
*/
- if (NULL != jnlpool_ctl)
+ if (NULL != jnlpool->jnlpool_ctl)
{ /* journal pool exists */
- assert(jnlpool_ctl->jnl_seqno == murgbl.consist_jnl_seqno);
- assert(jnlpool_ctl->start_jnl_seqno <= murgbl.consist_jnl_seqno);
- assert(jnlpool_ctl->max_zqgblmod_seqno == max_zqgblmod_seqno);
+ assert(jnlpool->jnlpool_ctl->jnl_seqno == murgbl.consist_jnl_seqno);
+ assert(jnlpool->jnlpool_ctl->start_jnl_seqno <= murgbl.consist_jnl_seqno);
+ assert(jnlpool->jnlpool_ctl->max_zqgblmod_seqno == max_zqgblmod_seqno);
if (inst_hdr->is_supplementary)
{
for (idx = 0; MAX_SUPPL_STRMS > idx; idx++)
- assert((NULL != jnlpool_ctl)
- || (jnlpool_ctl->strm_seqno[idx]
+ assert((NULL != jnlpool->jnlpool_ctl)
+ || (jnlpool->jnlpool_ctl->strm_seqno[idx]
== inst_hdr->strm_seqno[idx]));
}
}
@@ -748,16 +755,16 @@ boolean_t mur_close_files(void)
}
repl_inst_write(udi->fn, (off_t)REPL_INST_HDR_SIZE, (sm_uc_ptr_t)gtmsrc_lcl_array, GTMSRC_LCL_SIZE);
}
- if ((NULL != jnlpool_ctl) && jgbl.onlnrlbk)
+ if (((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl)) && jgbl.onlnrlbk)
{ /* Remove any locks that we acquired in mur_open_files.
* Needs to be done even if this is NOT a clean exit.
*/
- assert(0 != jnlpool_ctl->onln_rlbk_pid || !murgbl.clean_exit);
+ assert(0 != jnlpool->jnlpool_ctl->onln_rlbk_pid || !murgbl.clean_exit);
assert((csa->now_crit && csa->hold_onto_crit) || !murgbl.clean_exit);
- jnlpool_ctl->onln_rlbk_pid = 0;
+ jnlpool->jnlpool_ctl->onln_rlbk_pid = 0;
if (csa->now_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for (idx = 0; NUM_GTMSRC_LCL > idx; idx++, gtmsourcelocal_ptr++)
{
latch = >msourcelocal_ptr->gtmsource_srv_latch;
@@ -796,7 +803,7 @@ boolean_t mur_close_files(void)
* timeout with a SEQNUMSEARCHTIMEOUT error (if no GT.M processes have any flush timers active and
* if online rollback does not do the flush either) so it is actually necessary.
*/
- assert(!FROZEN_CHILLED(cs_data));
+ assert(!FROZEN_CHILLED(cs_addrs));
wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_WRITE_EPOCH | WCSFLU_SYNC_EPOCH);
}
/* Note: udi/csa is used a little later after the "gds_rundown" call to determine if "db_ipcs_reset"
@@ -827,13 +834,14 @@ boolean_t mur_close_files(void)
if (mur_options.rollback && murgbl.repl_standalone)
{
assert(!mur_options.forward); /* or else murgbl.repl_standalone won't be TRUE (needed to get in this "if" block) */
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (jnlpool->jnlpool_dummy_reg));
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
ASSERT_HOLD_REPLPOOL_SEMS;
/* repl_inst_read and mu_replpool_release_sem expects that the caller holds the ftok semaphore as it is about to
* read the replication instance file and assumes there are no concurrent writers. However, ROLLBACK grabs all the
* access control semaphores of both jnlpool and receiver pool as well as the replication locks in mur_open_files.
* This means -
- * (a) No replication servers can starup as they cannot go beyond obtaining ftok lock in jnlpool_init or
+ * (a) No replication servers can startup as they cannot go beyond obtaining ftok lock in jnlpool_init or
* recvpool_init as they will be hung waiting for the access control semaphores to be released by ROLLBACK
* (b) The already running replication servers will also be hung waiting for critical section to be released
* by rollback.
@@ -846,7 +854,7 @@ boolean_t mur_close_files(void)
*/
repl_inst_read(udi->fn, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
repl_instance.file_corrupt = inst_hdr->file_corrupt;
- if (NULL == jnlpool_ctl)
+ if ((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl))
repl_instance.crash = inst_hdr->crash = FALSE;
else
{ /* Online Rollback OR Anticipatory Freeze is in effect. Detach from the journal pool as all the database
@@ -913,7 +921,8 @@ boolean_t mur_close_files(void)
* disk reads/writes.
*/
repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
- got_ftok = ftok_sem_lock(jnlpool.jnlpool_dummy_reg, TRUE); /* immediate=TRUE */
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg));
+ got_ftok = ftok_sem_lock(jnlpool->jnlpool_dummy_reg, TRUE); /* immediate=TRUE */
/* Note: The decision to remove the Journal Pool Access Control Semaphores should be based on two things:
* 1. If we have the ftok on the instance file
* AND
@@ -924,7 +933,7 @@ boolean_t mur_close_files(void)
mu_replpool_release_sem(&repl_instance, JNLPOOL_SEGMENT, got_ftok && !repl_instance.crash);
mu_replpool_release_sem(&repl_instance, RECVPOOL_SEGMENT, got_ftok);
if (got_ftok)
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, FALSE, TRUE); /* immediate=TRUE */
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, FALSE, TRUE); /* immediate=TRUE */
ASSERT_DONOT_HOLD_REPLPOOL_SEMS;
assert(jgbl.onlnrlbk || inst_frozen ||
((INVALID_SEMID == repl_instance.jnlpool_semid) && (0 == repl_instance.jnlpool_semid_ctime)));
@@ -937,13 +946,14 @@ boolean_t mur_close_files(void)
* to error out because the semaphore should still exist in the system
*/
assert(udi->counter_ftok_incremented || jgbl.onlnrlbk || anticipatory_freeze_available);
- if (!ftok_sem_lock(jnlpool.jnlpool_dummy_reg, FALSE)
- || !ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, FALSE))
+ if (!ftok_sem_lock(jnlpool->jnlpool_dummy_reg, FALSE)
+ || !ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, FALSE))
wrn_count++;
}
if (jgbl.onlnrlbk)
{ /* Signal completion */
- assert(((NULL != inst_hdr) && (udi == FILE_INFO(jnlpool.jnlpool_dummy_reg))) || !murgbl.clean_exit);
+ assert(NULL != jnlpool);
+ assert(((NULL != inst_hdr) && (udi == FILE_INFO(jnlpool->jnlpool_dummy_reg))) || !murgbl.clean_exit);
finish_err_code = murgbl.clean_exit ? ERR_ORLBKCMPLT : ERR_ORLBKTERMNTD;
assert(!murgbl.repl_standalone || ((NULL != inst_hdr) && (NULL != udi)));
if (murgbl.repl_standalone)
diff --git a/sr_port/mur_db_files_from_jnllist.c b/sr_port/mur_db_files_from_jnllist.c
index e49dcc6..477e169 100755
--- a/sr_port/mur_db_files_from_jnllist.c
+++ b/sr_port/mur_db_files_from_jnllist.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2003-2016 Fidelity National Information *
+ * Copyright (c) 2003-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -59,7 +59,7 @@ gld_dbname_list *mur_db_files_from_jnllist(char *jnl_file_list, unsigned short j
unsigned int db_fname_len;
uint4 ustatus;
gld_dbname_list head, *tdblist, *dblist = &head;
- char *cptr, *ctop, *cptr_last, db_fname[MAX_FN_LEN + 1];
+ char *cptr, *ctop, *cptr_last, db_fname[GTM_PATH_MAX];
jnl_ctl_list jctl_temp, *jctl = &jctl_temp;
jnl_file_header *jfh;
#if defined(VMS)
@@ -87,12 +87,12 @@ gld_dbname_list *mur_db_files_from_jnllist(char *jnl_file_list, unsigned short j
{
seg = reg->dyn.addr;
if (!get_full_path((char *)seg->fname, (unsigned int)seg->fname_len,
- (char *)&db_fname[0], &db_fname_len, MAX_FN_LEN, &ustatus))
+ (char *)&db_fname[0], &db_fname_len, GTM_PATH_MAX, &ustatus))
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_FILEPARSE, 2, seg->fname_len, seg->fname, ustatus);
return NULL;
}
- assert(db_fname_len);
+ assert(db_fname_len && (db_fname_len < MAX_FN_LEN + 1));
seg->fname_len = db_fname_len;
memcpy(seg->fname, &db_fname[0], db_fname_len);
/* This code is lifted from the tail of "mu_gv_cur_reg_init". Any changes here need to be reflected there */
diff --git a/sr_port/mur_do_wildcard.c b/sr_port/mur_do_wildcard.c
index 6bec2fa..978cecc 100755
--- a/sr_port/mur_do_wildcard.c
+++ b/sr_port/mur_do_wildcard.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2004 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -43,8 +44,8 @@ boolean_t mur_do_wildcard(char *jnl_str, char *pat_str, int jnl_len, int pat_len
}
while ((jnl_counter < jnl_len) && (pat_counter < pat_len)) /* main loop */
{
- while (( *(pat_str + pat_counter) != '*') && ( *(pat_str + pat_counter) != '%') &&
- (jnl_counter < jnl_len) && (pat_counter < pat_len))
+ while ((jnl_counter < jnl_len) && (pat_counter < pat_len)
+ && (*(pat_str + pat_counter) != '*') && ( *(pat_str + pat_counter) != '%'))
{
asterisk_not_seen = TRUE;
if ( *(jnl_str + jnl_counter) != *(pat_str + pat_counter) )
@@ -56,24 +57,26 @@ boolean_t mur_do_wildcard(char *jnl_str, char *pat_str, int jnl_len, int pat_len
}
}
/* break out of loop if wildcard seen */
- if (( *(pat_str + pat_counter) == '%') && (pat_counter < pat_len) && (jnl_counter < jnl_len))
+ if ((pat_counter < pat_len) && (jnl_counter < jnl_len) && (*(pat_str + pat_counter) == '%'))
{ /* simple case of percent: increment pointers and continue */
jnl_counter++;
pat_counter++;
- } else if ( *(pat_str + pat_counter) == '*') /* gets rough ,fasten seat belts */
+ } else if ((pat_counter < pat_len) && (*(pat_str + pat_counter) == '*')) /* gets rough ,fasten seat belts */
{
pat_counter++;
i = pat_counter;
- while ((asterisk_not_seen) && (i < pat_len)) /* find the next occurrence of asterisk to memcmp */
+ while (asterisk_not_seen && (i < pat_len)) /* find the next occurrence of asterisk to memcmp */
{
if (*(pat_str + i) == '*')
- asterisk_not_seen= FALSE;
+ asterisk_not_seen = FALSE;
else
i++;
}
if (i == pat_len) /* no asterisk found after the current one */
{
- if (!memcmp(jnl_str + (jnl_len - (i - pat_counter)),pat_str + pat_counter,i - pat_counter))
+ if ((i - pat_counter) > jnl_len)
+ return(FALSE);
+ if (!memcmp(jnl_str + (jnl_len - (i - pat_counter)), pat_str + pat_counter, i - pat_counter))
return(TRUE);
else /* maybe they do not match or else it contains percent character */
{
@@ -101,14 +104,14 @@ boolean_t mur_do_wildcard(char *jnl_str, char *pat_str, int jnl_len, int pat_len
} else if (i < pat_len) /* another asterisk seen before end of string */
{
sav_jnl = jnl_counter;
- while (memcmp(jnl_str + jnl_counter, pat_str + pat_counter, i - pat_counter)
- && (jnl_counter < jnl_len))
+ while ((jnl_counter < jnl_len)
+ && memcmp(jnl_str + jnl_counter, pat_str + pat_counter, i - pat_counter))
jnl_counter++;
if (jnl_counter == jnl_len)
{
jcount = i - pat_counter;
index2 = pat_counter;
- while (index2 <= (jnl_len - jcount)+1)
+ while (index2 <= (jnl_len - jcount) + 1)
{
if (( *(pat_str + pat_counter) == '%') ||
( *(pat_str + pat_counter) == *(jnl_str + sav_jnl)))
@@ -130,10 +133,11 @@ boolean_t mur_do_wildcard(char *jnl_str, char *pat_str, int jnl_len, int pat_len
return(FALSE);
}
/* synchronize the character pointers after processing an asterisk */
- if (i < (pat_len-1))
+ if (i < (pat_len - 1))
pat_counter = i + 1;
- while ((* (jnl_str + jnl_counter) != *(pat_str + pat_counter)) &&
- (jnl_counter < jnl_len) && (*(pat_str + pat_counter) != '%'))
+ while ((jnl_counter < jnl_len)
+ && (*(jnl_str + jnl_counter) != *(pat_str + pat_counter))
+ && (*(pat_str + pat_counter) != '%'))
jnl_counter++;
if (jnl_counter == jnl_len) /* if unable to synchronize */
return(FALSE);
diff --git a/sr_port/mur_get_options.c b/sr_port/mur_get_options.c
index b226ddb..4b1f3d0 100755
--- a/sr_port/mur_get_options.c
+++ b/sr_port/mur_get_options.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2003-2015 Fidelity National Information *
+ * Copyright (c) 2003-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -260,7 +260,7 @@ void mur_get_options(void)
if (cli_present("REDIRECT") == CLI_PRESENT)
{
file_name_specified = (char *)malloc(MAX_FN_LEN + 1);
- file_name_expanded = (char *)malloc(MAX_FN_LEN + 1);
+ file_name_expanded = (char *)malloc(GTM_PATH_MAX);
length = MAX_LINE;
if (!CLI_GET_STR_ALL("REDIRECT", qual_buffer, &length))
mupip_exit(ERR_MUPCLIERR);
@@ -297,10 +297,16 @@ void mur_get_options(void)
rl_ptr->next = rl_ptr1;
rl_ptr = rl_ptr1;
file_name_specified_len = (unsigned int)(cptr - entry_ptr);
+ if (file_name_specified_len > (MAX_FN_LEN + 1))
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_INVREDIRQUAL, 2,
+ LEN_AND_LIT("Redirect DB filename too long: greater than 255"));
+ mupip_exit(ERR_MUPCLIERR);
+ }
memcpy(file_name_specified, entry, file_name_specified_len);
*(file_name_specified + file_name_specified_len)= '\0';
if (!get_full_path(file_name_specified, file_name_specified_len, file_name_expanded,
- &file_name_expanded_len, MAX_FN_LEN, &ustatus))
+ &file_name_expanded_len, GTM_PATH_MAX, &ustatus))
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_INVREDIRQUAL, 2,
LEN_AND_LIT("Unable to find full pathname"));
@@ -324,6 +330,12 @@ void mur_get_options(void)
rl_ptr->org_name[rl_ptr->org_name_len] = '\0';
entry_ptr = cptr + 1; /* skip the = */
file_name_specified_len = length - file_name_specified_len - 1; /* the rest of the entry);*/
+ if (file_name_specified_len > (MAX_FN_LEN + 1))
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_INVREDIRQUAL, 2,
+ LEN_AND_LIT("Redirect DB filename too long: greater than 255"));
+ mupip_exit(ERR_MUPCLIERR);
+ }
memcpy(file_name_specified, entry_ptr, file_name_specified_len);
*(file_name_specified + file_name_specified_len)= '\0';
if (!get_full_path(file_name_specified, file_name_specified_len, file_name_expanded,
diff --git a/sr_port/mur_open_files.c b/sr_port/mur_open_files.c
index 5733b63..b0e3ce4 100644
--- a/sr_port/mur_open_files.c
+++ b/sr_port/mur_open_files.c
@@ -128,7 +128,7 @@
GBLREF gd_addr *gd_header;
GBLREF gd_region *gv_cur_region;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF mur_opt_struct mur_options;
GBLREF mur_gbls_t murgbl;
GBLREF reg_ctl_list *mur_ctl;
@@ -137,7 +137,6 @@ GBLREF boolean_t jnlpool_init_needed;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
GBLREF int4 strm_index;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF uint4 process_id;
@@ -267,27 +266,26 @@ boolean_t mur_open_files()
* instance file nor do we look at jnlpool/recvpool during forward rollback so we skip this step.
*/
if (!repl_inst_get_name((char *)replpool_id.instfilename, &full_len, SIZEOF(replpool_id.instfilename),
- issue_gtm_putmsg))
+ issue_gtm_putmsg, NULL))
{ /* appropriate gtm_putmsg would have already been issued by repl_inst_get_name */
return FALSE;
}
assert((int)NUM_SRC_SEMS == (int)NUM_RECV_SEMS);
ASSERT_DONOT_HOLD_REPLPOOL_SEMS;
- assert(NULL == jnlpool.repl_inst_filehdr);
+ assert((NULL == jnlpool) || (NULL == jnlpool->repl_inst_filehdr));
if (!mu_rndwn_repl_instance(&replpool_id, FALSE, TRUE, &jnlpool_sem_created))
return FALSE; /* mu_rndwn_repl_instance will have printed appropriate message in case of error */
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
- assert(jgbl.onlnrlbk || INST_FREEZE_ON_ERROR_POLICY || (NULL == jnlpool_ctl));
+ assert(jgbl.onlnrlbk || INST_FREEZE_ON_ERROR_POLICY || ((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl)));
ASSERT_HOLD_REPLPOOL_SEMS;
- assert(NULL != jnlpool.repl_inst_filehdr);
- assert(INVALID_SEMID != jnlpool.repl_inst_filehdr->jnlpool_semid);
- assert(INVALID_SEMID != jnlpool.repl_inst_filehdr->recvpool_semid);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
+ assert(INVALID_SEMID != jnlpool->repl_inst_filehdr->jnlpool_semid);
+ assert(INVALID_SEMID != jnlpool->repl_inst_filehdr->recvpool_semid);
murgbl.repl_standalone = TRUE;
/* Since rollback would not have necessarily done a jnlpool_init, it might not have initialized strm_index
* to the correct value in case of a supplementary instance. So do it now. This code is similar to that in
* jnlpool_init. Keep the two in sync (i.e. fix the other similarly if one changes).
*/
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{
assert((INVALID_SUPPL_STRM == strm_index) || (0 == strm_index));
strm_index = 0;
@@ -352,7 +350,7 @@ boolean_t mur_open_files()
}
if (mur_options.update || mur_options.extr[GOOD_TN])
{
- gvcst_init(rctl->gd);
+ gvcst_init(rctl->gd, NULL);
TP_CHANGE_REG(rctl->gd);
if (jgbl.onlnrlbk)
{
@@ -384,30 +382,30 @@ boolean_t mur_open_files()
}
assert(murgbl.reg_full_total == max_reg_total);
DEBUG_ONLY(curr = gld_db_files;)
- assert(!jgbl.onlnrlbk || (0 != max_epoch_interval) || (NULL == jnlpool_ctl));
+ assert(!jgbl.onlnrlbk || (0 != max_epoch_interval) || (NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl));
if (jgbl.onlnrlbk)
{
inst_requires_rlbk = FALSE;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_ORLBKSTART, 4,
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname), LEN_AND_STR(udi->fn));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname), LEN_AND_STR(udi->fn));
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_ORLBKSTART, 4,
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname), LEN_AND_STR(udi->fn));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname), LEN_AND_STR(udi->fn));
/* Need to get the gtmsource_srv_latch BEFORE grab_crit to avoid deadlocks */
- if (NULL != jnlpool_ctl)
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{
- assert(udi == FILE_INFO(jnlpool.jnlpool_dummy_reg));
+ assert(udi == FILE_INFO(jnlpool->jnlpool_dummy_reg));
csa = &udi->s_addrs;
ASSERT_VALID_JNLPOOL(csa);
- assert(INVALID_SEMID != jnlpool.repl_inst_filehdr->jnlpool_semid);
- assert(INVALID_SEMID != jnlpool.repl_inst_filehdr->recvpool_semid);
- assert(INVALID_SEMID != jnlpool.repl_inst_filehdr->jnlpool_shmid);
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ assert(INVALID_SEMID != jnlpool->repl_inst_filehdr->jnlpool_semid);
+ assert(INVALID_SEMID != jnlpool->repl_inst_filehdr->recvpool_semid);
+ assert(INVALID_SEMID != jnlpool->repl_inst_filehdr->jnlpool_shmid);
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for (idx = 0; NUM_GTMSRC_LCL > idx; idx++, gtmsourcelocal_ptr++)
{ /* Get hold of all the gtmsource_srv_latch in all the source server slots in the journal pool. Hold
* onto it until the end (in mur_close_files).
*/
- jnlpool.gtmsource_local = gtmsourcelocal_ptr;
+ jnlpool->gtmsource_local = gtmsourcelocal_ptr;
if (!grab_gtmsource_srv_latch(>msourcelocal_ptr->gtmsource_srv_latch,
2 * max_reg_total * max_epoch_interval, GRAB_GTMSOURCE_SRV_LATCH_ONLY))
assertpro(FALSE); /* should not reach here due to rts_error in the above function */
@@ -484,23 +482,24 @@ boolean_t mur_open_files()
* pool and set the field in the journal pool indicating that online rollback is in progress and other
* processes need to back off.
*/
- if (NULL != jnlpool_ctl)
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{ /* Validate the journal pool is accessible and the offsets of various structures within it are intact */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
csa->hold_onto_crit = TRUE; /* No more unconditional rel_lock() */
- assert(jnlpool.repl_inst_filehdr->crash); /* since we haven't removed the journal pool */
+ assert(jnlpool->repl_inst_filehdr->crash); /* since we haven't removed the journal pool */
/* Wait for any pending phase2 commits in jnlpool to finish */
- while (jnlpool_ctl->phase2_commit_index1 != jnlpool_ctl->phase2_commit_index2)
+ while (jnlpool->jnlpool_ctl->phase2_commit_index1 != jnlpool->jnlpool_ctl->phase2_commit_index2)
{
- repl_phase2_cleanup(&jnlpool);
- if (jnlpool_ctl->phase2_commit_index1 == jnlpool_ctl->phase2_commit_index2)
+ repl_phase2_cleanup(jnlpool);
+ if (jnlpool->jnlpool_ctl->phase2_commit_index1 == jnlpool->jnlpool_ctl->phase2_commit_index2)
break;
- JPL_TRACE_PRO(jnlpool_ctl, jnl_pool_write_sleep);
+ JPL_TRACE_PRO(jnlpool->jnlpool_ctl, jnl_pool_write_sleep);
SLEEP_USEC(1, FALSE);
}
repl_inst_flush_jnlpool(FALSE, FALSE);
- assert((0 == jnlpool_ctl->onln_rlbk_pid) || !is_proc_alive(jnlpool_ctl->onln_rlbk_pid, 0));
- jnlpool_ctl->onln_rlbk_pid = process_id;
+ assert((0 == jnlpool->jnlpool_ctl->onln_rlbk_pid)
+ || !is_proc_alive(jnlpool->jnlpool_ctl->onln_rlbk_pid, 0));
+ jnlpool->jnlpool_ctl->onln_rlbk_pid = process_id;
}
replinst_file_corrupt = TRUE;
/* Indicate to all other processes that ONLINE ROLLBACK is now in progress */
@@ -825,7 +824,7 @@ boolean_t mur_open_files()
} /* End rctl->db_present */
} /* End for */
if (jgbl.mur_rollback && !mur_options.forward)
- jnlpool.repl_inst_filehdr->file_corrupt = replinst_file_corrupt;
+ jnlpool->repl_inst_filehdr->file_corrupt = replinst_file_corrupt;
/* At this point mur_ctl[] has been created from the current global directory database file names
* or from the journal file header's database names.
* For star_specified == TRUE implicitly only current generation journal files are specified and already opened
diff --git a/sr_port/mur_process_intrpt_recov.c b/sr_port/mur_process_intrpt_recov.c
index 8dddf33..a5ed6d3 100644
--- a/sr_port/mur_process_intrpt_recov.c
+++ b/sr_port/mur_process_intrpt_recov.c
@@ -207,7 +207,7 @@ uint4 mur_process_intrpt_recov()
csd->save_strm_reg_seqno[idx] = csd->strm_reg_seqno[idx];
csd->strm_reg_seqno[idx] = jnlrec->jrec_epoch.strm_seqno[idx];
}
- assert(!FROZEN_CHILLED(csd));
+ assert(!FROZEN_CHILLED(csa));
wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_FSYNC_DB);
assert(csa->ti->curr_tn == jctl->turn_around_tn);
if (jgbl.onlnrlbk)
diff --git a/sr_port/mur_process_seqno_table.c b/sr_port/mur_process_seqno_table.c
index bdf90ce..37367f6 100755
--- a/sr_port/mur_process_seqno_table.c
+++ b/sr_port/mur_process_seqno_table.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2003-2016 Fidelity National Information *
+ * Copyright (c) 2003-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -49,7 +49,7 @@ DEBUG_ONLY(GBLREF mur_opt_struct mur_options;)
*/
void mur_process_seqno_table(seq_num *min_broken_seqno, seq_num *losttn_seqno)
{
- size_t seq_arr_size, index, seqno_span, byte, offset;
+ size_t seq_arr_size, seq_arr_alloc_size, index, seqno_span, byte, offset;
jnl_tm_t min_time;
seq_num min_brkn_seqno, min_resolve_seqno, max_resolve_seqno, lcl_losttn_seqno, stop_rlbk_seqno;
unsigned char *seq_arr, bit;
@@ -103,11 +103,12 @@ void mur_process_seqno_table(seq_num *min_broken_seqno, seq_num *losttn_seqno)
&& (max_resolve_seqno >= min_resolve_seqno))
{ /* Update losttn_seqno to the first seqno gap from min_resolve_seqno to max_resolve_seqno */
seqno_span = (max_resolve_seqno - min_resolve_seqno + 1);
- seq_arr_size = DIVIDE_ROUND_UP(seqno_span, 8); /* Need only an 8th of the actual memory since we use bit-array */
- seq_arr = (uchar_ptr_t) malloc(seq_arr_size);
+ seq_arr_size = DIVIDE_ROUND_UP(seqno_span, 8); /* Need only an 8th of the actual memory since we use bit-array */
+ seq_arr_alloc_size = ROUND_UP(seq_arr_size, SIZEOF(NATIVE_PTR_TYPE)); /* Pad to native word size */
+ seq_arr = (uchar_ptr_t) malloc(seq_arr_alloc_size);
ptr = (NATIVE_PTR_TYPE *)(seq_arr);
- ptr_top = ptr + seq_arr_size;
- memset(seq_arr, 0, seq_arr_size);
+ ptr_top = (NATIVE_PTR_TYPE *)(seq_arr + seq_arr_alloc_size);
+ memset(seq_arr, 0, seq_arr_alloc_size);
/* The below for-loop sets the BIT corresponding to a sequence number (as an offset from the min_resolve_seqno) */
for (curent = murgbl.token_table.base, topent = murgbl.token_table.top; curent < topent; curent++)
{
diff --git a/sr_port/mur_tp_resolve_time.c b/sr_port/mur_tp_resolve_time.c
index 63f8a10..7fa8e5b 100755
--- a/sr_port/mur_tp_resolve_time.c
+++ b/sr_port/mur_tp_resolve_time.c
@@ -101,7 +101,9 @@ void mur_tp_resolve_time(jnl_tm_t max_lvrec_time)
* tp_resolve_time for this region as the last valid record timestamp in this journal file.
*/
if (!jctl->properly_closed)
- reg_tp_resolve_time = max_lvrec_time - jctl->jfh->epoch_interval - MAX_EPOCH_DELAY;
+ reg_tp_resolve_time = max_lvrec_time - jctl->jfh->epoch_interval -
+ DEBUG_ONLY((WBTEST_ENABLED(WBTEST_LOWERED_JNLEPOCH))? gtm_wbox_input_test_case_count : )
+ MAX_EPOCH_DELAY;
else if (jctl->jfh->is_not_latest_jnl)
reg_tp_resolve_time = rctl->lvrec_time;
else
diff --git a/sr_port/mur_write_header_extfmt.c b/sr_port/mur_write_header_extfmt.c
index 5085bc1..1dc6972 100644
--- a/sr_port/mur_write_header_extfmt.c
+++ b/sr_port/mur_write_header_extfmt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2015 Fidelity National Information *
+ * Copyright (c) 2015-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -34,9 +34,9 @@
#include "gtmio.h"
#include "eintr_wrappers.h"
-GBLREF mur_gbls_t murgbl;
-GBLREF mur_opt_struct mur_options;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF mur_gbls_t murgbl;
+GBLREF mur_opt_struct mur_options;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
/* If "fp" is NULL, use "op_write" else use "GTM_FWRITE".
* "fname" is used only if "fp" is non-NULL.
@@ -88,8 +88,8 @@ void mur_write_header_extfmt(jnl_ctl_list *jctl, FILE *fp, char *fname, int recs
if (!mur_options.forward)
{
murgbl.extr_buff[extrlen++] = ' ';
- assert(NULL != jnlpool.repl_inst_filehdr);
- ptr = (char *)&jnlpool.repl_inst_filehdr->inst_info.this_instname[0];
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
+ ptr = (char *)&jnlpool->repl_inst_filehdr->inst_info.this_instname[0];
tmplen = STRLEN(ptr);
memcpy(&murgbl.extr_buff[extrlen], ptr, tmplen);
extrlen += tmplen;
diff --git a/sr_port/mutex_deadlock_check.c b/sr_port/mutex_deadlock_check.c
index bc7a126..ba68fed 100755
--- a/sr_port/mutex_deadlock_check.c
+++ b/sr_port/mutex_deadlock_check.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -59,7 +59,7 @@ GBLREF tp_region *tp_reg_list; /* Chained list of regions used in this transac
GBLREF uint4 crit_deadlock_check_cycle;
GBLREF boolean_t is_replicator;
GBLREF boolean_t mu_reorg_process;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF volatile boolean_t in_mutex_deadlock_check;
@@ -119,8 +119,9 @@ void mutex_deadlock_check(mutex_struct_ptr_t criticalPtr, sgmnt_addrs *csa)
if (is_replicator || mu_reorg_process)
{
++crit_deadlock_check_cycle;
- repl_csa = (NULL != jnlpool.jnlpool_dummy_reg) ? &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs : NULL;
- assert((NULL == jnlpool.jnlpool_dummy_reg) || jnlpool.jnlpool_dummy_reg->open
+ repl_csa = ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open)
+ ? &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs : NULL;
+ assert(!jnlpool || !jnlpool->jnlpool_dummy_reg || jnlpool->jnlpool_dummy_reg->open
|| (repl_csa->critical != criticalPtr));
if (!dollar_tlevel)
{
diff --git a/sr_port/mval2fao.c b/sr_port/mval2fao.c
index 4a81af0..f6b2ba9 100755
--- a/sr_port/mval2fao.c
+++ b/sr_port/mval2fao.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -45,7 +46,7 @@ int mval2fao(
{
MV_FORCE_DEFINED(fao);
while (*message != '!')
- message++;
+ DBG_ASSERT(*message) message++;
/* A length for the fao parameter (consisting of digits). */
for (n = 0; (*++message > 47) && (*message < 58); n++)
;
diff --git a/sr_port/objlabel.h b/sr_port/objlabel.h
index ccf495d..284cf8e 100755
--- a/sr_port/objlabel.h
+++ b/sr_port/objlabel.h
@@ -32,7 +32,7 @@
* If the 32bit platform limit would be exceeded, start bumping the OBJ_PLATFORM_LABEL value - but only for 32 bit Linux.
*/
-#define OBJ_UNIX_LABEL 33
+#define OBJ_UNIX_LABEL 34
#define OBJ_PLATFORM_LABEL 0
#ifdef USHBIN_SUPPORTED
diff --git a/sr_port/op.h b/sr_port/op.h
index 0f22037..82bf345 100644
--- a/sr_port/op.h
+++ b/sr_port/op.h
@@ -153,7 +153,6 @@ void op_gvrectarg(mval *v);
void op_gvsavtarg(mval *v);
void op_gvzwithdraw(void);
void op_gvzwrite(UNIX_ONLY_COMMA(int4 count) int4 pat, ...);
-void op_halt(void);
void op_hang(mval *num);
void op_hardret(void);
void op_horolog(mval *s);
@@ -271,7 +270,7 @@ void op_zg1(int4 level);
void op_zgoto(mval *rtnname, mval *lblname, int offset, int level);
void op_zrupdate(int argcnt, ...);
void op_ztrigger(void);
-void op_zhalt(mval *returncode);
+void op_zhalt(boolean_t is_zhalt, int4 retcode);
void op_zhelp_xfr(mval *subject, mval *lib);
void op_zhorolog(mval *s);
void op_zlink(mval *v, mval *quals);
diff --git a/sr_port/op_bindparm.c b/sr_port/op_bindparm.c
index df8ea72..3f5191d 100644
--- a/sr_port/op_bindparm.c
+++ b/sr_port/op_bindparm.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -75,16 +76,16 @@ void op_bindparm(UNIX_ONLY_COMMA(int frmc) int frmp_arg, ...)
* op_bindparm happen without a push_parm in between, do not attempt to use a previously utilized
* parameter set.
*/
- if ((PARM_ACT_FRAME(curr_slot, prev_count) != frame_pointer) || (SAFE_TO_OVWRT <= prev_count))
+ if ((0 == (TREF(parm_pool_ptr))->start_idx) || (SAFE_TO_OVWRT <= prev_count)
+ || (DBG_ASSERT(2 <= (TREF(parm_pool_ptr))->start_idx)
+ (PARM_ACT_FRAME(curr_slot, prev_count) != frame_pointer)))
actc = 0;
else
{ /* Acquire mask, actual count, and pointer to actual list from the parameter pool. */
+ assert(1 <= (TREF(parm_pool_ptr))->start_idx);
mask = (*(curr_slot - 1)).mask_and_cnt.mask;
actc = prev_count;
- if (0 == (TREF(parm_pool_ptr))->start_idx)
- actp = &((*(TREF(parm_pool_ptr))->parms).actuallist);
- else
- actp = &((*(curr_slot - SLOTS_NEEDED_FOR_SET(actc))).actuallist);
+ actp = &((*(curr_slot - SLOTS_NEEDED_FOR_SET(actc))).actuallist);
}
} else
/* If the parameter pool is uninitialized, there are no parameters we can bind. */
diff --git a/sr_port/op_dmode.c b/sr_port/op_dmode.c
index f66c0d6..7f5a7d8 100644
--- a/sr_port/op_dmode.c
+++ b/sr_port/op_dmode.c
@@ -88,7 +88,7 @@ void op_dmode(void)
}
io_curr_device = io_std_device;
if ((TRUE == io_curr_device.in->dollar.zeof) || kill)
- op_halt();
+ op_zhalt(ERR_NOPRINCIO, FALSE); /* op_zhalt doesn't restrict this because it's a halt with a return code */
/* The following code avoids an infinite loop on UNIX systems when there is an error in writing to the principal device
* resulting in a call to the condition handler and an eventual return to this location
*/
diff --git a/sr_port/op_fnname.c b/sr_port/op_fnname.c
index bb0429f..3dc18a4 100644
--- a/sr_port/op_fnname.c
+++ b/sr_port/op_fnname.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -27,10 +28,12 @@
#include "op.h"
#include "gvsub2str.h"
#include "mvalconv.h"
+#include "get_reference.h" /* for get_reference() prototype */
GBLREF gv_key *gv_currkey;
-GBLREF spdesc stringpool;
+GBLREF mstr extnam_str;
GBLREF mv_stent *mv_chain;
+GBLREF spdesc stringpool;
GBLREF unsigned char *msp, *stackwarn, *stacktop;
error_def(ERR_MAXSTRLEN);
@@ -96,16 +99,13 @@ error_def(ERR_STACKCRIT);
*/
void op_fnname(UNIX_ONLY_COMMA(int sub_count) mval *finaldst, ...)
{
- int space_needed;
- int depth_count, fnname_type;
- mval *dst, *arg, *depth;
- VMS_ONLY(int sub_count;)
+ int depth_count, fnname_type, len, space_needed;;
+ mval *arg, *depth, *dst;
mstr format_out, opstr;
va_list var;
- unsigned char *sptr, *key_ptr, *key_top;
+ unsigned char *key_ptr, *key_top, *sptr;
VAR_START(var, finaldst);
- VMS_ONLY(va_count(sub_count);)
assert(3 <= sub_count);
fnname_type = va_arg(var, int);
depth = va_arg(var, mval *); /* if second arg to $NAME not specified, compiler sets depth_count to MAXPOSINT4 */
@@ -141,21 +141,24 @@ void op_fnname(UNIX_ONLY_COMMA(int sub_count) mval *finaldst, ...)
/* Reserve enough space for naked reference. Include space for ^() and a maximum of sub_count ',' separators for
* subscripts specified as arguments to $NAME() in addition to those in the naked reference
*/
- space_needed = (int)((STR_LIT_LEN("^()") + ZWR_EXP_RATIO(MAX_KEY_SZ) + sub_count));
+ space_needed = MAX_ZWR_KEY_SZ + (!extnam_str.len ? 0 : ((extnam_str.len * 2) + SIZEOF("^|\"\"|")));
TEST_FAKE_STRINGPOOL_FULL;
ENSURE_STP_FREE_SPACE(space_needed);
sptr = stringpool.free;
- *sptr++ = '^';
- key_ptr = (unsigned char *)&gv_currkey->base[0];
- key_top = (unsigned char *)&gv_currkey->base[gv_currkey->prev];
- for ( ; (*sptr = *key_ptr++); sptr++)
+ get_reference(dst); /*this handles any extended reference */
+ assert(dst->str.len); /* should have caused GVNAKED error above */
+ assert(dst->str.addr == (char *)sptr);
+ for (len = dst->str.len; ('(' != *sptr++) && len--;) /* step past the name returned */
;
+ assert(0 < len); /* otherwise GVNAKED error above */
if (0 != depth_count)
- {
- *sptr++ = '(';
- if (key_ptr < key_top)
+ { /* the return from get_reference already has text, but this needs to count subscripts */
+ key_top = (unsigned char *)&gv_currkey->base[gv_currkey->prev];
+ for (key_ptr = (unsigned char *)&gv_currkey->base[0]; *key_ptr; key_ptr++) /* step past name in key */
+ ;
+ if (++key_ptr < key_top)
{
- for ( ; ; )
+ do
{
opstr.addr = (char *)sptr;
opstr.len = space_needed;
@@ -168,13 +171,12 @@ void op_fnname(UNIX_ONLY_COMMA(int sub_count) mval *finaldst, ...)
if (0 == depth_count /* fewer subscripts requested than in naked reference */
|| key_ptr >= key_top) /* more subscripts requested than in naked reference */
break;
- }
+ } while (depth_count);
}
/* Naked reference copied, now copy remaining subscripts. From this point on, maintain dst to protect
* against potential string shuffling by mval_lex->stp_gcol
*/
- dst->str.len = INTCAST(sptr - stringpool.free);
- dst->str.addr = (char *)stringpool.free;
+ dst->str.len = INTCAST((char *)sptr - dst->str.addr);
assert(dst->str.len < space_needed);
stringpool.free = sptr;
depth_count = ((sub_count < depth_count) ? sub_count : depth_count);
@@ -188,10 +190,10 @@ void op_fnname(UNIX_ONLY_COMMA(int sub_count) mval *finaldst, ...)
}
*stringpool.free++ = ')';
dst->str.len++;
+ assert((unsigned char *)(dst->str.addr + dst->str.len) == stringpool.free);
} else
{ /* naked reference, zero depth => result is just the global name */
- dst->str.len = INTCAST(sptr - stringpool.free);
- dst->str.addr = (char *)stringpool.free;
+ dst->str.len = INTCAST((char *)sptr - dst->str.addr - 1);
assert(dst->str.len < space_needed);
stringpool.free = sptr;
}
diff --git a/sr_port/op_fnquery.c b/sr_port/op_fnquery.c
index 173df12..08c0ca4 100644
--- a/sr_port/op_fnquery.c
+++ b/sr_port/op_fnquery.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -34,11 +35,11 @@ GBLREF unsigned char *msp, *stackwarn, *stacktop;
LITREF mval literal_null;
+error_def(ERR_LVNULLSUBS);
error_def(ERR_STACKOFLOW);
error_def(ERR_STACKCRIT);
-error_def(ERR_LVNULLSUBS);
-void op_fnquery(UNIX_ONLY_COMMA(int sbscnt) mval *dst, ...)
+void op_fnquery(int sbscnt, mval *dst, ...)
{
int length;
mval tmp_sbs;
@@ -51,14 +52,12 @@ void op_fnquery(UNIX_ONLY_COMMA(int sbscnt) mval *dst, ...)
lvTreeNode **h1, **h2, *history[MAX_LVSUBSCRIPTS], *parent, *node, *nullsubsnode, *nullsubsparent;
lvTree *lvt;
int i, j;
- VMS_ONLY(int sbscnt;)
boolean_t found, is_num, last_sub_null, nullify_term, is_str;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
VAR_START(var, dst);
- VMS_ONLY(va_count(sbscnt));
- assert(3 <= sbscnt);
+ assert(3 <= sbscnt);
sbscnt -= 3;
varname = va_arg(var, mval *);
v = va_arg(var, lv_val *);
@@ -331,6 +330,7 @@ void op_fnquery(UNIX_ONLY_COMMA(int sbscnt) mval *dst, ...)
* not yet initialized with current subscript (in the M-stack).
*/
v2->mvtype = MV_STR;
+ assert(MAX_STRLEN >= v2->str.len); /* check in op_putindx should assure this */
mval_lex(v2, &format_out);
if (format_out.addr != (char *)stringpool.free) /* BYPASSOK */
{ /* We must put the string on the string pool ourself - mval_lex didn't do it
diff --git a/sr_port/op_fntranslate.c b/sr_port/op_fntranslate.c
index 1315f6d..0ff6d40 100755
--- a/sr_port/op_fntranslate.c
+++ b/sr_port/op_fntranslate.c
@@ -209,6 +209,7 @@ void op_fntranslate(mval *src, mval *in_str, mval *out_str, mval *dst)
++char_len;
}
}
+ assert(MAX_STRLEN >= dstlen);
MV_INIT_STRING(dst, dstlen, (char *)dstbase);
assert(dst->str.len <= size);
dst->mvtype |= MV_UTF_LEN; /* set character length since we know it */
diff --git a/sr_port/op_fnview.c b/sr_port/op_fnview.c
old mode 100755
new mode 100644
index a866b23..a3f1271
--- a/sr_port/op_fnview.c
+++ b/sr_port/op_fnview.c
@@ -25,6 +25,8 @@
#include "dpgbldir.h"
#include "filestruct.h"
#include "jnl.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
#include "view.h"
#include "stringpool.h"
#include "cmd_qlf.h"
@@ -48,14 +50,10 @@
#include "gvnh_spanreg.h"
#include "targ_alloc.h"
#include "change_reg.h"
-#ifdef UNIX
# include "gtmlink.h"
-#endif
#include "gtm_ctype.h" /* for ISDIGIT_ASCII macro */
#include "gvn2gds.h"
#include "io.h"
-#include "repl_msg.h"
-#include "gtmsource.h"
#include "interlock.h"
GBLREF spdesc stringpool;
@@ -68,6 +66,7 @@ GBLREF gd_region *gv_cur_region;
GBLREF gv_namehead *gv_target;
GBLREF gv_namehead *reset_gv_target;
GBLREF jnl_fence_control jnl_fence_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF bool undef_inhibit;
GBLREF int4 break_message_mask;
GBLREF command_qualifier cmd_qlf;
@@ -80,9 +79,9 @@ GBLREF int gv_fillfactor;
GBLREF int4 gtm_max_sockets;
GBLREF gv_key *gv_currkey;
GBLREF boolean_t is_gtm_chset_utf8;
-GBLREF jnlpool_addrs jnlpool;
GBLREF uint4 process_id;
-UNIX_ONLY(GBLREF boolean_t dmterm_default;)
+GBLREF mstr extnam_str;
+GBLREF boolean_t dmterm_default;
error_def(ERR_COLLATIONUNDEF);
error_def(ERR_GBLNOMAPTOREG);
@@ -114,9 +113,8 @@ LITREF mval literal_one;
assert(stringpool.free <= stringpool.top); \
}
-void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
+void op_fnview(int numarg, mval *dst, ...)
{
- VMS_ONLY(int numarg;)
boolean_t save_transform;
gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
unsigned char *key;
@@ -224,7 +222,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
assert(gd_header);
assert(parmblk.gv_ptr);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
assert(parmblk.gv_ptr->open);
switch (REG_ACC_METH(parmblk.gv_ptr))
{
@@ -279,7 +277,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
assert(gd_header);
assert(parmblk.gv_ptr);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
tmpstr.addr = (char *)parmblk.gv_ptr->dyn.addr->fname;
tmpstr.len = parmblk.gv_ptr->dyn.addr->fname_len;
s2pool(&tmpstr);
@@ -317,7 +315,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
if (parmblk.gv_ptr)
{
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
csa = &FILE_INFO(parmblk.gv_ptr)->s_addrs;
if (NULL != csa->hdr)
n = csa->hdr->jnl_state;
@@ -331,7 +329,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
if (parmblk.gv_ptr)
{
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
csa = &FILE_INFO(parmblk.gv_ptr)->s_addrs;
if (NULL != csa->hdr)
view_jnlfile(dst, parmblk.gv_ptr);
@@ -340,6 +338,21 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
} else
dst->str.len = 0;
break;
+ case VTK_JNLPOOL:
+ if (jnlpool)
+ {
+ reg = jnlpool->jnlpool_dummy_reg;
+ if (reg && reg->dyn.addr)
+ {
+ tmpstr.addr = (char *)reg->dyn.addr->fname;
+ tmpstr.len = reg->dyn.addr->fname_len;
+ s2pool(&tmpstr);
+ dst->str = tmpstr;
+ } else
+ dst->str.len = 0;
+ } else
+ dst->str.len = 0;
+ break;
case VTK_JNLTRANSACTION:
n = jnl_fence_ctl.level;
break;
@@ -364,7 +377,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
assert(NULL != gd_header); /* view_arg_convert would have done this for VTK_POOLLIMIT */
reg = parmblk.gv_ptr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
csa = &FILE_INFO(reg)->s_addrs;
n = csa->gbuff_limit;
break;
@@ -381,7 +394,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_RELJNLQIO:
reg = parmblk.gv_ptr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
csa = &FILE_INFO(reg)->s_addrs;
if (NULL != csa->hdr)
{
@@ -390,18 +403,30 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
else if (VTK_RELCRIT == vtp->keycode)
rel_crit(reg);
else if (VTK_GRABLOCK == vtp->keycode)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- else if (VTK_RELLOCK == vtp->keycode)
- rel_lock(jnlpool.jnlpool_dummy_reg);
- else if (VTK_GRABJNLPH2 == vtp->keycode)
+ {
+ assert(NULL != jnlpool);
+ if (jnlpool)
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ } else if (VTK_RELLOCK == vtp->keycode)
+ {
+ assert(NULL != jnlpool);
+ if (jnlpool)
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ } else if (VTK_GRABJNLPH2 == vtp->keycode)
grab_latch(&csa->jnl->jnl_buff->phase2_commit_latch, GRAB_LATCH_INDEFINITE_WAIT);
else if (VTK_RELJNLPH2 == vtp->keycode)
rel_latch(&csa->jnl->jnl_buff->phase2_commit_latch);
else if (VTK_GRABJNLPOOLPH2 == vtp->keycode)
- grab_latch(&jnlpool.jnlpool_ctl->phase2_commit_latch, GRAB_LATCH_INDEFINITE_WAIT);
- else if (VTK_RELJNLPOOLPH2 == vtp->keycode)
- rel_latch(&jnlpool.jnlpool_ctl->phase2_commit_latch);
- else if (VTK_GRABJNLQIO == vtp->keycode)
+ {
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl));
+ if (jnlpool && jnlpool->jnlpool_ctl)
+ grab_latch(&jnlpool->jnlpool_ctl->phase2_commit_latch, GRAB_LATCH_INDEFINITE_WAIT);
+ } else if (VTK_RELJNLPOOLPH2 == vtp->keycode)
+ {
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl));
+ if (jnlpool && jnlpool->jnlpool_ctl)
+ rel_latch(&jnlpool->jnlpool_ctl->phase2_commit_latch);
+ } else if (VTK_GRABJNLQIO == vtp->keycode)
{
while (!GET_SWAPLOCK(&csa->jnl->jnl_buff->io_in_prog_latch))
SHORT_SLEEP(1);
@@ -414,17 +439,16 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
assert(NULL != gd_header); /* view_arg_convert would have done this for VTK_POOLLIMIT */
reg = parmblk.gv_ptr;
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
csa = &FILE_INFO(reg)->s_addrs;
if (NULL != csa->hdr)
{
- UNIX_ONLY(csa->crit_probe = TRUE);
+ csa->crit_probe = TRUE;
grab_crit(reg);
- UNIX_ONLY(csa->crit_probe = FALSE);
+ csa->crit_probe = FALSE;
if (!WBTEST_ENABLED(WBTEST_HOLD_CRIT_ENABLED))
rel_crit(reg);
dst->str.len = 0;
-# ifdef UNIX
ENSURE_STP_FREE_SPACE(n_probecrit_rec_types * (STATS_MAX_DIGITS + STATS_KEYWD_SIZE));
dst->str.addr = (char *)stringpool.free;
/* initialize csa->proberit_rec.p_crit_success field from cnl->gvstats_rec */
@@ -435,7 +459,6 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
assert(stringpool.free < stringpool.top);
/* subtract one to remove extra trailing comma delimiter */
dst->str.len = INTCAST((char *)stringpool.free - dst->str.addr - 1);
-# endif
}
break;
case VTK_REGION:
@@ -505,7 +528,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_BLFREE:
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
csa = &FILE_INFO(parmblk.gv_ptr)->s_addrs;
if (NULL != csa->hdr)
n = csa->hdr->trans_hist.free_blocks;
@@ -515,7 +538,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_BLTOTAL:
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
csa = &FILE_INFO(parmblk.gv_ptr)->s_addrs;
if (NULL != csa->hdr)
{
@@ -527,7 +550,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_FREEZE:
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
csa = &FILE_INFO(parmblk.gv_ptr)->s_addrs;
if (NULL != csa->hdr)
n = csa->hdr->freeze;
@@ -537,7 +560,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_GVSTATS:
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
csa = &FILE_INFO(parmblk.gv_ptr)->s_addrs;
if (NULL != csa->hdr)
{
@@ -627,7 +650,9 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
}
break;
case VTK_YDIRTREE:
+ n = extnam_str.len; /* internal use of op_gvname should not disturb extended reference */
op_gvname(VARLSTCNT(1) parmblk.value);
+ extnam_str.len = n;
if (NULL != arg2)
{
view_arg_convert(vtp, VTP_DBREGION, arg2, &parmblk2, IS_DOLLAR_VIEW_TRUE);
@@ -677,7 +702,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
n = 0;
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
reg = parmblk.gv_ptr;
if (dba_cm == REG_ACC_METH(reg))
n = ((link_info *)reg->dyn.addr->cm_blk->usr)->buffer_size;
@@ -686,7 +711,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
n = 0;
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
reg = parmblk.gv_ptr;
if (dba_cm == REG_ACC_METH(reg))
n = ((link_info *)reg->dyn.addr->cm_blk->usr)->buffered_count;
@@ -695,7 +720,7 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
n = 0;
assert(gd_header);
if (!parmblk.gv_ptr->open)
- gv_init_reg(parmblk.gv_ptr);
+ gv_init_reg(parmblk.gv_ptr, NULL);
reg = parmblk.gv_ptr;
if (dba_cm == REG_ACC_METH(reg))
n = ((link_info *)reg->dyn.addr->cm_blk->usr)->buffer_used;
@@ -732,7 +757,6 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_LOGNONTP:
n = TREF(nontprestart_log_delta);
break;
-# ifdef UNIX
case VTK_JNLERROR:
n = TREF(error_on_jnl_file_lost);
break;
@@ -744,7 +768,6 @@ void op_fnview(UNIX_ONLY_COMMA(int numarg) mval *dst, ...)
case VTK_DMTERM:
n = dmterm_default;
break;
-# endif
case VTK_STATSHARE:
n = TREF(statshare_opted_in) ? TRUE : FALSE;
break;
diff --git a/sr_port/op_fnztrigger.c b/sr_port/op_fnztrigger.c
index d2ae0af..5fc27e6 100644
--- a/sr_port/op_fnztrigger.c
+++ b/sr_port/op_fnztrigger.c
@@ -42,31 +42,35 @@
#include "xfer_enum.h"
#include "code_address_type.h"
#include "fix_xfer_entry.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
-GBLREF sgmnt_data_ptr_t cs_data;
-GBLREF uint4 dollar_tlevel;
-GBLREF gd_addr *gd_header;
-GBLREF gd_region *gv_cur_region;
-GBLREF gv_key *gv_currkey;
-GBLREF gv_namehead *gv_target;
-GBLREF boolean_t dollar_ztrigger_invoked;
-GBLREF int4 gtm_trigger_depth;
-GBLREF mstr *dollar_ztname;
+GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF uint4 dollar_tlevel;
+GBLREF gd_addr *gd_header;
+GBLREF gd_region *gv_cur_region;
+GBLREF gv_key *gv_currkey;
+GBLREF gv_namehead *gv_target;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF boolean_t dollar_ztrigger_invoked;
+GBLREF int4 gtm_trigger_depth;
+GBLREF mstr *dollar_ztname;
#ifdef DEBUG
-GBLREF boolean_t donot_INVOKE_MUMTSTART;
+GBLREF boolean_t donot_INVOKE_MUMTSTART;
#endif
LITREF mval literal_zero;
LITREF mval literal_one;
-STATICDEF gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
-STATICDEF gd_addr *save_gd_header;
-STATICDEF gv_key *save_gv_currkey;
-STATICDEF gv_namehead *save_gv_target;
-STATICDEF gd_region *save_gv_cur_region;
-STATICDEF boolean_t save_gv_last_subsc_null, save_gv_some_subsc_null;
+STATICDEF gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
+STATICDEF gd_addr *save_gd_header;
+STATICDEF gv_key *save_gv_currkey;
+STATICDEF gv_namehead *save_gv_target;
+STATICDEF gd_region *save_gv_cur_region;
+STATICDEF boolean_t save_gv_last_subsc_null, save_gv_some_subsc_null;
+STATICDEF jnlpool_addrs_ptr_t save_jnlpool;
#ifdef DEBUG
-STATICDEF boolean_t in_op_fnztrigger;
+STATICDEF boolean_t in_op_fnztrigger;
#endif
error_def(ERR_DZTRIGINTRIG);
@@ -115,6 +119,7 @@ LITDEF enum ztrprms ztrprm_data[] =
TP_CHANGE_REG(gv_cur_region); \
} \
gv_target = save_gv_target; \
+ jnlpool = save_jnlpool; \
if (NULL != save_gv_currkey) \
{ /* gv_currkey->top could have changed if we opened a database with bigger keysize \
* inside the trigger* functions above. Therefore take care not to overwrite that \
@@ -187,6 +192,7 @@ void op_fnztrigger(mval *func, mval *arg1, mval *arg2, mval *dst)
save_gd_header = gd_header;
save_gv_target = gv_target;
save_gv_cur_region = gv_cur_region;
+ save_jnlpool = jnlpool;
if (NULL != gv_currkey)
{
save_gv_currkey = (gv_key *)&save_currkey[0];
diff --git a/sr_port/op_gvorder.c b/sr_port/op_gvorder.c
old mode 100755
new mode 100644
index a5e5978..969a829
--- a/sr_port/op_gvorder.c
+++ b/sr_port/op_gvorder.c
@@ -32,19 +32,23 @@
#include "mvalconv.h"
#include "gdscc.h" /* needed for tp.h */
#include "gdskill.h" /* needed for tp.h */
-#include "buddy_list.h" /* needed for tp.h */
+#include "buddy_list.h" /* needed for tp.h */
#include "hashtab_int4.h" /* needed for tp.h */
-#include "filestruct.h" /* needed for jnl.h */
+#include "filestruct.h" /* needed for jnl.h */
#include "jnl.h" /* needed for tp.h */
#include "tp.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
-GBLREF gd_region *gv_cur_region;
-GBLREF gv_key *gv_altkey, *gv_currkey;
-GBLREF gv_namehead *gv_target;
-GBLREF sgmnt_addrs *cs_addrs;
-GBLREF sgmnt_data_ptr_t cs_data;
-GBLREF sgm_info *sgm_info_ptr;
-GBLREF spdesc stringpool;
+
+GBLREF gd_region *gv_cur_region;
+GBLREF gv_key *gv_altkey, *gv_currkey;
+GBLREF gv_namehead *gv_target;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF sgm_info *sgm_info_ptr;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF spdesc stringpool;
/* op_zprevious should generally be maintained in parallel */
@@ -65,6 +69,7 @@ void op_gvorder(mval *v)
mstr opstr;
mval tmpmval, *datamval;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -149,7 +154,7 @@ void op_gvorder(mval *v)
assert(gv_currkey->end < (MAX_MIDENT_LEN + 3)); /* until names are not in midents */
assert(KEY_DELIMITER == gv_currkey->base[gv_currkey->end]);
assert(KEY_DELIMITER == gv_currkey->base[gv_currkey->end - 1]);
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
if (STR_SUB_ESCAPE == save_currkey->base[gv_currkey->end - 2])
save_currkey->base[gv_currkey->end - 2] = KEY_DELIMITER; /* strip the byte added to get past curr */
gd_targ = TREF(gd_targ_addr);
@@ -166,7 +171,7 @@ void op_gvorder(mval *v)
if (IS_BASEDB_REGNAME(gv_cur_region))
{ /* Non-statsDB region */
if (!gv_cur_region->open)
- gv_init_reg(gv_cur_region);
+ gv_init_reg(gv_cur_region, NULL);
change_reg();
/* Entries in directory tree of region could have empty GVT in which case move on to next entry */
acc_meth = REG_ACC_METH(gv_cur_region);
@@ -283,7 +288,7 @@ void op_gvorder(mval *v)
} else
v->str.len = 0;
v->mvtype = MV_STR; /* initialize mvtype now that mval has been otherwise completely set up */
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
}
return;
}
diff --git a/sr_port/op_gvrectarg.c b/sr_port/op_gvrectarg.c
old mode 100755
new mode 100644
index 5c96b0c..c4f8b00
--- a/sr_port/op_gvrectarg.c
+++ b/sr_port/op_gvrectarg.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -27,6 +28,8 @@
#include "hashtab_int4.h" /* needed for tp.h */
#include "tp.h"
#include "op.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
#define DIR_ROOT 1
diff --git a/sr_port/op_halt.c b/sr_port/op_halt.c
deleted file mode 100755
index 7dcb92e..0000000
--- a/sr_port/op_halt.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************
- * *
- * Copyright (c) 2001-2015 Fidelity National Information *
- * Services, Inc. and/or its subsidiaries. All rights reserved. *
- * *
- * This source code contains the intellectual property *
- * of its copyright holder(s), and is made available *
- * under a license. If you do not know the terms of *
- * the license, please stop and do not read further. *
- * *
- ****************************************************************/
-
-#include "mdef.h"
-
-#include "gtm_stdlib.h" /* for EXIT() */
-#include "gtm_string.h"
-
-#include "gtmimagename.h"
-#include "send_msg.h"
-#include "getzposition.h"
-
-#include "op.h"
-
-LITREF gtmImageName gtmImageNames[];
-
-error_def(ERR_PROCTERM);
-
-void op_halt(void)
-{
-# ifdef GTM_TRIGGER
- mval zposition;
-
- /* If HALT is done from a non-runtime trigger, send a warning message to oplog to record the fact
- * of this uncommon process termination method.
- */
- if (!IS_GTM_IMAGE)
- {
- zposition.mvtype = 0; /* It's not an mval yet till getzposition fills it in */
- getzposition(&zposition);
- assert(MV_IS_STRING(&zposition) && (0 < zposition.str.len));
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_PROCTERM, 7, GTMIMAGENAMETXT(image_type), RTS_ERROR_TEXT("HALT"),
- 0, zposition.str.len, zposition.str.addr);
- }
-# endif
- EXIT(EXIT_SUCCESS);
-}
diff --git a/sr_port/op_lock2.c b/sr_port/op_lock2.c
index 83acc68..f51294b 100644
--- a/sr_port/op_lock2.c
+++ b/sr_port/op_lock2.c
@@ -29,7 +29,7 @@
#include "mlk_unlock.h"
#include "mlk_unpend.h"
#include "outofband.h"
-#include "lk_check_own.h"
+#include "mlk_check_own.h"
#include "lock_str_to_buff.h"
#include "gvcmx.h"
#include "gvcmz.h"
@@ -60,6 +60,7 @@
#include "lockdefs.h"
#include "is_proc_alive.h"
#include "mvalconv.h"
+#include "min_max.h"
#ifdef DEBUG
#include "have_crit.h" /* for the TPNOTACID_CHECK macro */
#endif
@@ -286,7 +287,7 @@ int op_lock2(mval *timeout, unsigned char laflag) /* timeout is in milliseconds
{
if (out_of_time || outofband)
{ /* if time expired || control-c, tptimeout, or jobinterrupt encountered */
- if (outofband || !lk_check_own(pvt_ptr1))
+ if (outofband || !mlk_check_own(pvt_ptr1))
{ /* If CTL-C, check lock owner */
if (pvt_ptr1->nodptr) /* Get off pending list to be sent a wake */
mlk_unpend(pvt_ptr1);
@@ -377,7 +378,7 @@ int op_lock2(mval *timeout, unsigned char laflag) /* timeout is in milliseconds
break;
}
if (pvt_ptr1->nodptr)
- lk_check_own(pvt_ptr1); /* clear an abandoned owner */
+ mlk_check_own(pvt_ptr1); /* clear an abandoned owner */
}
if (blocked && out_of_time)
break;
diff --git a/sr_port/op_newintrinsic.c b/sr_port/op_newintrinsic.c
index b97f188..62ed454 100755
--- a/sr_port/op_newintrinsic.c
+++ b/sr_port/op_newintrinsic.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -30,8 +30,6 @@
GBLREF gv_key *gv_currkey;
GBLREF gv_namehead *gv_target;
GBLREF gd_addr *gd_header;
-GBLREF mval dollar_ztrap;
-GBLREF mval dollar_etrap;
GBLREF mval dollar_estack_delta;
GBLREF mval dollar_zyerror;
GBLREF mval dollar_zgbldir;
@@ -53,7 +51,9 @@ void op_newintrinsic(int intrtype)
{
mval *intrinsic;
boolean_t stored_explicit_null, etrap_was_active;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
switch (intrtype)
{
case SV_ZTRAP:
@@ -61,20 +61,20 @@ void op_newintrinsic(int intrtype)
if (0 < gtm_trigger_depth)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NOZTRAPINTRIG);
# endif
- assert(!ztrap_explicit_null || (0 == dollar_ztrap.str.len));
+ assert(!ztrap_explicit_null || (0 == (TREF(dollar_ztrap)).str.len));
DEBUG_ONLY(stored_explicit_null = FALSE;)
- if (ztrap_explicit_null && (0 == dollar_ztrap.str.len))
+ if (ztrap_explicit_null && (0 == (TREF(dollar_ztrap)).str.len))
{
DEBUG_ONLY(stored_explicit_null = TRUE;)
- dollar_ztrap.str.len = STACK_ZTRAP_EXPLICIT_NULL; /* to be later used by unw_mv_ent() */
+ (TREF(dollar_ztrap)).str.len = STACK_ZTRAP_EXPLICIT_NULL; /* used later by unw_mv_ent() */
}
/* Intentionally omitted the "break" here */
case SV_ETRAP:
/* Save the active error trap to the stack if either of them is new'ed */
if (etrap_was_active = ETRAP_IN_EFFECT)
- intrinsic = &dollar_etrap;
+ intrinsic = &(TREF(dollar_etrap));
else
- intrinsic = &dollar_ztrap;
+ intrinsic = &(TREF(dollar_ztrap));
break;
case SV_ESTACK:
intrinsic = &dollar_estack_delta;
@@ -98,11 +98,11 @@ void op_newintrinsic(int intrtype)
{
ztrap_explicit_null = TRUE;
if(etrap_was_active)
- NULLIFY_TRAP(dollar_etrap)
+ NULLIFY_TRAP(TREF(dollar_etrap));
} else if (SV_ETRAP == intrtype) {
ztrap_explicit_null = FALSE;
if(!etrap_was_active)
- NULLIFY_TRAP(dollar_ztrap)
+ NULLIFY_TRAP(TREF(dollar_ztrap));
} else if (SV_ESTACK == intrtype)
{ /* Some extra processing for new of $ETRAP:
The delta from $zlevel we keep for estack is kept in an mval for sake of
diff --git a/sr_port/op_open.c b/sr_port/op_open.c
index a8b73c1..3fb6edb 100755
--- a/sr_port/op_open.c
+++ b/sr_port/op_open.c
@@ -38,6 +38,8 @@
#include "setterm.h"
#include "getzposition.h"
#include "mmemory.h"
+#include "min_max.h"
+#include "mvalconv.h"
#ifdef DEBUG
#include "have_crit.h" /* for the TPNOTACID_CHECK macro */
#endif
diff --git a/sr_port/op_putindx.c b/sr_port/op_putindx.c
index dae7403..3583a46 100644
--- a/sr_port/op_putindx.c
+++ b/sr_port/op_putindx.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -93,23 +94,22 @@ void set_active_lv(lv_val *newlv, boolean_t do_assert, int type)
}
#endif
-lv_val *op_putindx(UNIX_ONLY_COMMA(int argcnt) lv_val *start, ...)
+lv_val *op_putindx(int argcnt, lv_val *start, ...)
{
boolean_t is_canonical, is_base_var;
- int length, subs_level;
- lv_val *lv;
- mval *key, tmp_sbs;
- va_list var;
+ int length, n_length, subs_level;
+ int4 t_length;
+ lv_val *base_lv, *lv;
lvTree *lvt;
lvTreeNode *parent;
- lv_val *base_lv;
+ mident_fixed name;
+ mval *key, tmp_sbs;
+ va_list var;
DEBUG_ONLY(int orig_subs_level;)
- VMS_ONLY(int argcnt;)
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
VAR_START(var, start);
- VMS_ONLY(va_count(argcnt);)
assert(0 < argcnt);
is_base_var = LV_IS_BASE_VAR(start);
/* If this variable is marked as a Transaction Processing protected variable, clone the tree.
@@ -128,6 +128,8 @@ lv_val *op_putindx(UNIX_ONLY_COMMA(int argcnt) lv_val *start, ...)
base_lv = LV_GET_BASE_VAR(start);
assert((NULL == base_lv->tp_var) || base_lv->tp_var->var_cloned);
}
+ t_length = SIZEOF(name) + 1; /* assume maximum length name and include 1 for open paren */
+ n_length = 0; /* actually unknown, but avoid unecessary lookup and only determine later if needed */
lv = start;
assert(NULL != lv);
LV_SBS_DEPTH(start, is_base_var, subs_level);
@@ -199,6 +201,29 @@ lv_val *op_putindx(UNIX_ONLY_COMMA(int argcnt) lv_val *start, ...)
*/
SET_ACTIVE_LV(lv, (orig_subs_level == (subs_level + 1)) ? TRUE : FALSE, actlv_op_putindx1);
}
+ /* the following check could be based on allowing the name and each subscript to be of maximum length; however,
+ * then $QUERY() could produce a result greatly exceeding MAX_STRLEN, which, while it seems to work, should not
+ * (although our testing coverage of all cases currently unknown) be consumable by other commands, functions or
+ * operators; in addition, there seem to be issues with Linux system level I/O of gimundous strings causing hangs
+ */
+ if (!(MV_CANONICAL & key->mvtype))
+ t_length += 2; /* + 2 for the quotes if it's not canonical lvn */
+ else if (!(MV_STR & key->mvtype))
+ MV_FORCE_STR(key); /* to ensure a length for the number */
+ if (MAX_STRLEN < (t_length += (key->str.len + 1))) /* WARNING assignment */
+ { /* + 1 above for the comma or close parenthesis */
+ if ((0 == n_length) && !((MAX_STRLEN + SIZEOF(name)) < t_length))
+ { /* near max, so name length matters - adjust for it by replacing overestimate with actual length */
+ n_length = (char *)format_lvname((lv_val *)start, (uchar_ptr_t)name.c, SIZEOF(name)) - name.c;
+ t_length -= (SIZEOF(name) - n_length);
+ }
+ if (MAX_STRLEN < t_length)
+ {
+ va_end(var);
+ SET_ACTIVE_LV(lv, (orig_subs_level == (subs_level + 1)) ? TRUE : FALSE, actlv_op_putindx1);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_MAXSTRLEN);
+ }
+ }
}
va_end(var);
if (base_lv != lv)
diff --git a/sr_port/op_rdone.c b/sr_port/op_rdone.c
index ef5671d..7a81d64 100755
--- a/sr_port/op_rdone.c
+++ b/sr_port/op_rdone.c
@@ -36,6 +36,7 @@
#include "change_reg.h"
#include "setterm.h"
#include "getzposition.h"
+#include "min_max.h"
#ifdef DEBUG
#include "have_crit.h" /* for the TPNOTACID_CHECK macro */
#endif
diff --git a/sr_port/op_read.c b/sr_port/op_read.c
index ae25c5f..cac67f1 100755
--- a/sr_port/op_read.c
+++ b/sr_port/op_read.c
@@ -36,6 +36,8 @@
#include "change_reg.h"
#include "setterm.h"
#include "getzposition.h"
+#include "min_max.h"
+#include "mvalconv.h"
#ifdef DEBUG
#include "have_crit.h" /* for the TPNOTACID_CHECK macro */
#endif
diff --git a/sr_port/op_readfl.c b/sr_port/op_readfl.c
index da65700..2923c50 100755
--- a/sr_port/op_readfl.c
+++ b/sr_port/op_readfl.c
@@ -34,6 +34,8 @@
#include "change_reg.h"
#include "setterm.h"
#include "getzposition.h"
+#include "min_max.h"
+#include "mvalconv.h"
#ifdef DEBUG
#include "have_crit.h" /* for the TPNOTACID_CHECK macro */
#endif
diff --git a/sr_port/op_setzbrk.c b/sr_port/op_setzbrk.c
index b1bccbc..447f612 100644
--- a/sr_port/op_setzbrk.c
+++ b/sr_port/op_setzbrk.c
@@ -99,8 +99,12 @@ void op_setzbrk(mval *rtn, mval *lab, int offset, mval *act, int cnt)
zr_remove_zbrks(NULL, NOBREAKMSG);
else
{
- GTMTRIG_ONLY(IS_TRIGGER_RTN(&rtn->str, is_trigger));
+# ifdef GTM_TRIGGER
+ IS_TRIGGER_RTN(&rtn->str, is_trigger);
+ if (is_trigger && (RESTRICTED(trigger_mod)))
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_RESTRICTEDOP, 1, "ZBREAK");
DBGIFTRIGR((stderr, "op_setzbrk: Setting/clearing a zbreak in a trigger\n"));
+# endif
flush_pio();
if (WANT_CURRENT_RTN(rtn))
routine = CURRENT_RHEAD_ADR(frame_pointer->rvector);
diff --git a/sr_port/op_svget.c b/sr_port/op_svget.c
index cf2e4b8..d64fe48 100644
--- a/sr_port/op_svget.c
+++ b/sr_port/op_svget.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -68,18 +68,15 @@ GBLREF spdesc stringpool;
GBLREF io_pair io_curr_device;
GBLREF io_log_name *io_root_log_name;
GBLREF io_log_name *dollar_principal;
-GBLREF mval dollar_ztrap;
GBLREF mval dollar_zgbldir;
GBLREF mval dollar_job;
GBLREF uint4 dollar_zjob;
GBLREF mval dollar_zstatus;
-GBLREF mval dollar_zstep;
GBLREF mval dollar_zsource;
GBLREF int4 dollar_zsystem;
GBLREF int4 dollar_zeditor;
GBLREF uint4 dollar_tlevel;
GBLREF uint4 dollar_trestart;
-GBLREF mval dollar_etrap;
GBLREF mval dollar_zerror;
GBLREF mval dollar_zyerror;
GBLREF mval dollar_system;
@@ -346,7 +343,7 @@ void op_svget(int varnum, mval *v)
s2pool(&(v->str));
break;
case SV_ZSTEP:
- *v = dollar_zstep;
+ *v = TREF(dollar_zstep);
break;
case SV_ZMODE:
*v = TREF(dollar_zmode);
@@ -387,7 +384,7 @@ void op_svget(int varnum, mval *v)
break;
case SV_ZTRAP:
v->mvtype = MV_STR;
- v->str = dollar_ztrap.str;
+ v->str = (TREF(dollar_ztrap)).str;
assert(!v->str.len || !ztrap_explicit_null);
s2pool(&(v->str));
break;
@@ -425,7 +422,7 @@ void op_svget(int varnum, mval *v)
break;
case SV_ETRAP:
v->mvtype = MV_STR;
- v->str = dollar_etrap.str;
+ v->str = (TREF(dollar_etrap)).str;
assert(!v->str.len || !ztrap_explicit_null);
s2pool(&(v->str));
break;
@@ -611,6 +608,10 @@ void op_svget(int varnum, mval *v)
case SV_ZKEY:
get_dlr_zkey(v);
break;
+ case SV_ZSTRPLLIM:
+ count = TREF(gtm_strpllim);
+ MV_FORCE_MVAL(v, count);
+ break;
default:
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_INVSVN);
}
diff --git a/sr_port/op_svput.c b/sr_port/op_svput.c
index 8ee8e44..7e7849c 100644
--- a/sr_port/op_svput.c
+++ b/sr_port/op_svput.c
@@ -28,9 +28,6 @@
#include "op.h"
#include "mvalconv.h"
#include "zroutines.h"
-#ifdef VMS
-#include <fab.h> /* needed for dbgbldir_sysops.h */
-#endif
#include "dpgbldir.h"
#include "dpgbldir_sysops.h"
#include "gtmmsg.h"
@@ -54,13 +51,9 @@ GBLREF gv_key *gv_currkey;
GBLREF gv_namehead *gv_target;
GBLREF gd_addr *gd_header;
GBLREF io_pair io_curr_device;
-GBLREF mval dollar_ztrap;
GBLREF mval dollar_zstatus;
GBLREF mval dollar_zgbldir;
-GBLREF mval dollar_zstep;
GBLREF mval dollar_zsource;
-GBLREF int ztrap_form;
-GBLREF mval dollar_etrap;
GBLREF mval dollar_zerror;
GBLREF mval dollar_zyerror;
GBLREF mval dollar_system;
@@ -84,6 +77,7 @@ GBLREF int4 tstart_trigger_depth;
GBLREF uint4 dollar_tlevel;
#endif
+LITREF mval default_etrap;
#ifdef GTM_TRIGGER
LITREF mval gvtr_cmd_mval[GVTR_CMDTYPES];
#endif
@@ -103,6 +97,7 @@ void op_svput(int varnum, mval *v)
{
int i, ok, state;
char *vptr;
+ int4 previous_gtm_strpllim;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -132,7 +127,7 @@ void op_svput(int varnum, mval *v)
MV_FORCE_STR(v);
op_commarg(v,indir_linetail);
op_unwind();
- dollar_zstep = *v;
+ TREF(dollar_zstep) = *v;
break;
case SV_ZGBLDIR:
MV_FORCE_STR(v);
@@ -190,24 +185,28 @@ void op_svput(int varnum, mval *v)
MV_FORCE_STR(v);
if (ztrap_new)
op_newintrinsic(SV_ZTRAP);
- dollar_ztrap.mvtype = MV_STR;
- dollar_ztrap.str = v->str;
- /* Setting either $ZTRAP or $ETRAP to empty causes any current error trapping to be canceled */
if (!v->str.len)
- {
- dollar_etrap.mvtype = MV_STR;
- dollar_etrap.str = v->str;
+ { /* Setting either $ZTRAP to empty causes any current error trapping to be canceled */
+ (TREF(dollar_etrap)).mvtype = (TREF(dollar_ztrap)).mvtype = MV_STR;
+ (TREF(dollar_etrap)).str = (TREF(dollar_ztrap)).str = v->str;
ztrap_explicit_null = TRUE;
} else /* Ensure that $ETRAP and $ZTRAP are not both active at the same time */
{
ztrap_explicit_null = FALSE;
- if (dollar_etrap.str.len > 0)
+ if (!(ZTRAP_ENTRYREF & TREF(ztrap_form)))
{
- gtm_newintrinsic(&dollar_etrap);
- NULLIFY_TRAP(dollar_etrap);
+ op_commarg(v, indir_linetail);
+ op_unwind();
}
+ if ((TREF(dollar_etrap)).str.len > 0)
+ {
+ gtm_newintrinsic(&(TREF(dollar_etrap)));
+ NULLIFY_TRAP(TREF(dollar_etrap));
+ }
+ (TREF(dollar_ztrap)).mvtype = MV_STR;
+ (TREF(dollar_ztrap)).str = v->str;
}
- if (ztrap_form & ZTRAP_POP)
+ if (ZTRAP_POP & TREF(ztrap_form))
ztrap_save_ctxt();
if (tp_timeout_deferred && !dollar_zininterrupt)
/* A tp timeout was deferred. Now that $ETRAP is no longer in effect and no job interrupt is in
@@ -289,16 +288,19 @@ void op_svput(int varnum, mval *v)
break;
case SV_ETRAP:
MV_FORCE_STR(v);
- dollar_etrap.mvtype = MV_STR;
- dollar_etrap.str = v->str;
- /* Setting either $ZTRAP or $ETRAP to empty causes any current error trapping to be canceled */
- if (!v->str.len)
- {
- dollar_ztrap.mvtype = MV_STR;
- dollar_ztrap.str = v->str;
- } else if (dollar_ztrap.str.len > 0)
- NULLIFY_TRAP(dollar_ztrap)
ztrap_explicit_null = FALSE;
+ if ((TREF(dollar_ztrap)).str.len > 0)
+ { /* replacing ZTRAP with ETRAP */
+ NULLIFY_TRAP(TREF(dollar_ztrap));
+ (TREF(dollar_etrap))= default_etrap; /* want change, so use default value in case of bad value */
+ }
+ if (v->str.len)
+ { /* check we have valid code */
+ op_commarg(v, indir_linetail);
+ op_unwind();
+ } /* set $etrap="" clears any current value, but doesn't cancal all trapping the way $ZTRAP="" does */
+ (TREF(dollar_etrap)).mvtype = MV_STR;
+ (TREF(dollar_etrap)).str = v->str;
break;
case SV_ZERROR:
MV_FORCE_STR(v);
@@ -382,6 +384,13 @@ void op_svput(int varnum, mval *v)
# else
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_UNIMPLOP);
# endif
+ case SV_ZSTRPLLIM:
+ previous_gtm_strpllim = TREF(gtm_strpllim);
+ MV_FORCE_NUM(v);
+ TREF(gtm_strpllim) = MV_FORCE_INT(v);
+ if ((TREF(gtm_strpllim) <= 0) || (TREF(gtm_strpllim) >= previous_gtm_strpllim))
+ TREF(gtm_strpllimwarned) = FALSE;
+ break;
default:
assertpro(FALSE && varnum);
}
diff --git a/sr_port/op_tcommit.c b/sr_port/op_tcommit.c
index a1ad76b..c946040 100644
--- a/sr_port/op_tcommit.c
+++ b/sr_port/op_tcommit.c
@@ -64,6 +64,8 @@
#include "wcs_timer_start.h"
#include "mupipbckup.h"
#include "gvcst_protos.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
#include "db_snapshot.h"
@@ -105,6 +107,7 @@ GBLREF int4 tstart_trigger_depth;
#ifdef DEBUG
GBLREF boolean_t forw_recov_lgtrig_only;
#endif
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_GBLOFLOW);
error_def(ERR_GVIS);
@@ -203,6 +206,7 @@ enum cdb_sc op_tcommit(void)
* This is used to read before-images of blocks whose cs->mode is gds_t_create */
unsigned int bsiz;
gd_region *save_cur_region; /* saved copy of gv_cur_region before TP_CHANGE_REG modifies it */
+ jnlpool_addrs_ptr_t save_jnlpool;
boolean_t before_image_needed;
boolean_t skip_invoke_restart;
# ifdef DEBUG
@@ -254,6 +258,7 @@ enum cdb_sc op_tcommit(void)
}
# endif
save_cur_region = gv_cur_region;
+ save_jnlpool = jnlpool;
# ifdef DEBUG
/* With jgbl.forw_phase_recovery, it is possible gv_currkey is non-NULL and gv_target is NULL
* (due to a MUR_CHANGE_REG) so do not invoke the below macro in that case.
@@ -564,6 +569,7 @@ enum cdb_sc op_tcommit(void)
tp_clean_up(TP_COMMIT);
gv_cur_region = save_cur_region;
TP_CHANGE_REG(gv_cur_region);
+ jnlpool = save_jnlpool;
# ifdef DEBUG
/* See comment in similar code before tp_tend call above */
if (!forw_recov_lgtrig_only && (!jgbl.forw_phase_recovery || (NULL != gv_target)))
diff --git a/sr_port/op_trollback.c b/sr_port/op_trollback.c
old mode 100755
new mode 100644
index fd943e0..b6061c7
--- a/sr_port/op_trollback.c
+++ b/sr_port/op_trollback.c
@@ -32,6 +32,8 @@
#include "op.h"
#include "jobinterrupt_process.h"
#include "gvcst_protos.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF uint4 dollar_tlevel;
GBLREF uint4 dollar_trestart;
@@ -40,6 +42,7 @@ GBLREF gv_namehead *gv_target;
GBLREF gd_addr *gd_header;
GBLREF tp_region *tp_reg_list; /* Chained list of regions used in this transaction not cleared on tp_restart */
GBLREF gd_region *gv_cur_region;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF void (*tp_timeout_clear_ptr)(void);
@@ -63,6 +66,7 @@ error_def(ERR_INVROLLBKLVL);
{ \
gv_cur_region = save_cur_region; \
TP_CHANGE_REG(gv_cur_region); \
+ jnlpool = save_jnlpool; \
}
void op_trollback(int rb_levels) /* rb_levels -> # of transaction levels by which we need to rollback : BYPASSOK */
@@ -70,6 +74,7 @@ void op_trollback(int rb_levels) /* rb_levels -> # of transaction levels by whi
boolean_t lcl_implicit_trollback = FALSE, reg_reset;
uint4 newlevel;
gd_region *save_cur_region; /* saved copy of gv_cur_region before tp_clean_up/tp_incr_clean_up modifies it */
+ jnlpool_addrs_ptr_t save_jnlpool;
gd_region *curreg;
gv_key *gv_orig_key_ptr;
sgmnt_addrs *csa;
@@ -98,6 +103,7 @@ void op_trollback(int rb_levels) /* rb_levels -> # of transaction levels by whi
newlevel = (0 > rb_levels) ? dollar_tlevel + rb_levels : rb_levels;
DBG_CHECK_GVTARGET_GVCURRKEY_IN_SYNC(CHECK_CSA_TRUE);
save_cur_region = gv_cur_region;
+ save_jnlpool = jnlpool;
GTMTRIG_ONLY(assert(tstart_trigger_depth <= gtm_trigger_depth);) /* see similar assert in op_tcommit.c for why */
if (!newlevel)
{
diff --git a/sr_port/op_unwind.c b/sr_port/op_unwind.c
index acae4d6..1e51594 100644
--- a/sr_port/op_unwind.c
+++ b/sr_port/op_unwind.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -51,7 +51,6 @@ GBLREF mval *alias_retarg;
GBLREF boolean_t tp_timeout_deferred;
GBLREF dollar_ecode_type dollar_ecode;
GBLREF boolean_t ztrap_explicit_null;
-GBLREF mval dollar_ztrap;
GBLREF boolean_t dollar_zininterrupt;
GBLREF boolean_t dollar_truth;
diff --git a/sr_port/op_view.c b/sr_port/op_view.c
index 88ef711..4216f33 100644
--- a/sr_port/op_view.c
+++ b/sr_port/op_view.c
@@ -79,6 +79,7 @@
#include "wcs_backoff.h"
#include "wcs_wt.h"
#include "localvarmonitor.h"
+#include "is_file_identical.h" /* Needed for JNLPOOL_INIT_IF_NEEDED */
STATICFNDCL void lvmon_release(void);
STATICFNDCL void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *thirdarg);
@@ -111,6 +112,8 @@ GBLREF boolean_t is_updproc;
GBLREF uint4 process_id;
GBLREF uint4 dollar_tlevel;
GBLREF boolean_t dmterm_default;
+GBLREF mstr extnam_str;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_ACTRANGE);
error_def(ERR_COLLATIONUNDEF);
@@ -435,7 +438,9 @@ void op_view(int numarg, mval *keyword, ...)
* will fail if the entry is not present. So make sure that the global exists before
* a YDIRTREE update is performed
*/
+ size = extnam_str.len; /* internal use of op_gvname should not disturb extended reference */
op_gvname(VARLSTCNT(1) parmblk.value);
+ extnam_str.len = size;
arg = (numarg > 1) ? va_arg(var, mval *) : NULL;
if (NULL != arg)
{
@@ -863,6 +868,7 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
{
boolean_t was_crit;
gd_region *reg, *r_top, *save_reg;
+ jnlpool_addrs_ptr_t save_jnlpool;
int icnt, lcnt, save_errno, status;
int4 nbuffs;
jnl_buffer_ptr_t jb;
@@ -874,6 +880,7 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
if (NULL == gd_header) /* Open gbldir */
gvinit();
save_reg = gv_cur_region;
+ save_jnlpool = jnlpool;
if (NULL == parmblkptr->gv_ptr)
{ /* Operate on all regions */
reg = gd_header->regions;
@@ -885,13 +892,17 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
if (IS_STATSDB_REG(reg))
continue; /* Skip statsdb regions for the VIEW command */
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
TP_CHANGE_REG(reg);
+ /* note that the jnlpool needs to be initialized and validated for options which could write to the database
+ * so instance freeze can be honored. No data is writtern just file header, etc. so OK on secondary
+ */
switch(keycode)
{
case VTK_DBFLUSH:
if (!reg->read_only)
{
+ JNLPOOL_INIT_IF_NEEDED(cs_addrs, cs_data, cs_addrs->nl, SCNDDBNOUPD_CHECK_FALSE);
nbuffs = (NULL != thirdarg) ? MV_FORCE_INT(thirdarg) : cs_addrs->nl->wcs_active_lvl;
JNL_ENSURE_OPEN_WCS_WTSTART(cs_addrs, reg, nbuffs, NULL, FALSE, dummy_errno);
}
@@ -901,6 +912,7 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
{
csa = cs_addrs;
udi = FILE_INFO(reg);
+ JNLPOOL_INIT_IF_NEEDED(cs_addrs, cs_data, cs_addrs->nl, SCNDDBNOUPD_CHECK_FALSE);
DB_FSYNC(reg, udi, csa, db_fsync_in_prog, save_errno);
if (0 != save_errno)
{
@@ -912,8 +924,9 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
break;
case VTK_EPOCH:
case VTK_FLUSH:
- if (!reg->read_only && !FROZEN_CHILLED(cs_data))
+ if (!reg->read_only && !FROZEN_CHILLED(cs_addrs))
{
+ JNLPOOL_INIT_IF_NEEDED(cs_addrs, cs_data, cs_addrs->nl, SCNDDBNOUPD_CHECK_FALSE);
ENSURE_JNL_OPEN(cs_addrs, gv_cur_region);
/* We should NOT invoke wcs_recover here because it's possible we are in the final retry
* of a TP transaction. In this case, we likely have pointers to non-dirty global buffers
@@ -957,6 +970,7 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
csd = csa->hdr;
if (JNL_ENABLED(csd))
{
+ JNLPOOL_INIT_IF_NEEDED(cs_addrs, cs_data, cs_addrs->nl, SCNDDBNOUPD_CHECK_FALSE);
was_crit = csa->now_crit;
if (!was_crit)
grab_crit(reg);
@@ -997,5 +1011,7 @@ STATICFNDEF void view_dbop(unsigned char keycode, viewparm *parmblkptr, mval *th
}
gv_cur_region = save_reg;
change_reg();
+ if (save_jnlpool && (save_jnlpool != jnlpool))
+ jnlpool = save_jnlpool;
return;
}
diff --git a/sr_port/op_zbreak.c b/sr_port/op_zbreak.c
index d3a28f5..114b18e 100644
--- a/sr_port/op_zbreak.c
+++ b/sr_port/op_zbreak.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -17,15 +17,20 @@
#include "zbreak.h"
#include "io.h"
#include "compiler.h"
+#include "restrict.h"
-GBLREF z_records zbrk_recs;
+GBLREF int4 gtm_trigger_depth;
GBLREF stack_frame *frame_pointer;
+GBLREF z_records zbrk_recs;
int op_zbreak(stack_frame *fp)
{
unsigned char *line_addr;
zbrk_struct *z_ptr;
+ if ((0 < gtm_trigger_depth) && (RESTRICTED(trigger_mod)))
+ return (TRUE);
+
line_addr = find_line_start(fp->mpc, fp->rvector);
assert(NULL != line_addr);
line_addr = (unsigned char *)find_line_call(line_addr) - SIZEOF_LA;
diff --git a/sr_port/op_zg1.c b/sr_port/op_zg1.c
index 7db2a8e..ffeb820 100644
--- a/sr_port/op_zg1.c
+++ b/sr_port/op_zg1.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2011-2015 Fidelity National Information *
+ * Copyright (c) 2011-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -48,9 +48,11 @@ error_def(ERR_ZGOTOTOOBIG);
void op_zg1(int4 level)
{
stack_frame *fp, *fpprev;
- int4 unwframes, unwlevels, unwtrglvls, curlvl;
+ int4 curlvl, exi_cond, unwframes, unwlevels, unwtrglvls;
mval zposition;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
curlvl = dollar_zlevel();
if (0 > level)
{ /* Negative level specified, means to use relative level change */
@@ -65,18 +67,23 @@ void op_zg1(int4 level)
/* Couldn't get to the level we were trying to unwind to */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_ZGOTOTOOBIG);
}
- /* For ZGOTO 0, if we are running in GTM's runtime (via mumps executable), we allow this to proceed with the
- * unwind and return back to the caller. However if this is MUPIP, we will exit after sending an oplog message
- * recording the uncommon exit method.
+ /* For ZGOTO 0, if this is MUPIP, exit after sending an oplog message recording the uncommon exit method.
+ * Otherwise, if $ZTRAP is active or ""=$ECODE return a status of 0, else return the last error in $ECODE
*/
- if ((0 == level) && !IS_GTM_IMAGE)
+ if (0 == level)
{
- zposition.mvtype = 0; /* It's not an mval yet till getzposition fills it in */
- getzposition(&zposition);
- assert(MV_IS_STRING(&zposition) && (0 < zposition.str.len));
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_PROCTERM, 7, GTMIMAGENAMETXT(image_type), RTS_ERROR_TEXT("ZGOTO 0"),
- ERR_PROCTERM, zposition.str.len, zposition.str.addr);
- EXIT(ERR_PROCTERM);
+ exi_cond = (((TREF(dollar_ztrap)).str.len) || !(dollar_ecode.index)) ? 0 : dollar_ecode.error_last_ecode;
+ if (IS_MUPIP_IMAGE)
+ {
+ zposition.mvtype = 0; /* It's not an mval yet till getzposition fills it in */
+ getzposition(&zposition);
+ assert(MV_IS_STRING(&zposition) && (0 < zposition.str.len));
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_PROCTERM, 6, GTMIMAGENAMETXT(image_type), "ZGOTO 0", exi_cond,
+ zposition.str.len, zposition.str.addr);
+ EXIT(ERR_PROCTERM);
+ }
+ assert(IS_GTM_IMAGE);
+ EXIT(exi_cond);
}
/* Find the frame we are unwinding to while counting the frames we need to unwind (which we will feed to
* GOFRAMES(). As we unwind, keep track of how many trigger base frames we encounter (if triggers are supported)
diff --git a/sr_port/op_zgoto.c b/sr_port/op_zgoto.c
index 983c0d2..b990713 100644
--- a/sr_port/op_zgoto.c
+++ b/sr_port/op_zgoto.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2011-2015 Fidelity National Information *
+ * Copyright (c) 2011-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -94,7 +94,7 @@ void op_zgoto(mval *rtn_name, mval *lbl_name, int offset, int level)
* is also NULL. In that case, we must be doing an indirect routine name only and the supplied name
* was NULL.
*/
- if (0 == lblname.str.len)
+ if ((0 == lblname.str.len) && !offset)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_RTNNAME);
rtnhdr = frame_pointer->rvector;
ARLINK_ONLY(TADR(lnk_proxy)->rtnhdr_adr = rtnhdr);
diff --git a/sr_port/op_zhalt.c b/sr_port/op_zhalt.c
index a9d9009..8cc890f 100644
--- a/sr_port/op_zhalt.c
+++ b/sr_port/op_zhalt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2011-2015 Fidelity National Information *
+ * Copyright (c) 2011-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -21,36 +21,79 @@
#include "getzposition.h"
#include "mvalconv.h"
#include "op.h"
+#include "restrict.h"
+#include "gt_timer.h"
+#include "error.h"
+#include "gtmmsg.h"
+#include "create_fatal_error_zshow_dmp.h"
-LITREF gtmImageName gtmImageNames[];
+GBLREF int process_exiting;
+GBLREF int4 exi_condition;
+LITREF gtmImageName gtmImageNames[];
+
+STATICDEF ABS_TIME halt_time;
+STATICDEF ABS_TIME zhalt_time;
+
+#define SAFE_INTERVAL 500000 /* microseconds */
error_def(ERR_PROCTERM);
+error_def(ERR_RESTRICTEDOP);
-/* Exit process with given return code */
-void op_zhalt(mval *returncode)
+/* Exit process with a return code, either given or defaulted by the ZHALT or implicitly 0 for HALT */
+void op_zhalt(int4 retcode, boolean_t is_zhalt)
{
- int retcode;
- GTMTRIG_ONLY(mval zposition;)
+ ABS_TIME cur_time, interval;
+ # ifdef GTM_TRIGGER
+ mval zposition;
+ # endif
- retcode = 0;
- assert(returncode);
- retcode = mval2i(returncode); /* can only use integer portion */
+ if ((0 != retcode) && (0 == (retcode & MAX_INT_IN_BYTE)))
+ retcode = MAX_INT_IN_BYTE; /* If the truncated return code is 0, make it 255 in case it's returned
+ * to the parent process.
+ */
+ if (IS_GTM_IMAGE && !(is_zhalt ? RESTRICTED(zhalt_op) : RESTRICTED(halt_op)))
+ EXIT(is_zhalt ? retcode : 0);
+ if (is_zhalt ? RESTRICTED(zhalt_op) : retcode ? FALSE : RESTRICTED(halt_op))
+ { /* if the operation is restricted and not from op_dmode or dm_read proclaim the restriction */
+ sys_get_curr_time(&cur_time);
+ if ((is_zhalt ? ((zhalt_time.at_usec) || (zhalt_time.at_sec)) : ((halt_time.at_usec) || (halt_time.at_sec))))
+ interval = sub_abs_time(&cur_time, is_zhalt ? &zhalt_time : &halt_time);
+ else
+ interval.at_usec = interval.at_sec = 0;
+ if ((interval.at_sec) || (0 == interval.at_usec) || (SAFE_INTERVAL < interval.at_usec))
+ {
+ if (is_zhalt)
+ zhalt_time = cur_time;
+ else
+ halt_time = cur_time;
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_RESTRICTEDOP, 1, is_zhalt ? "ZHALT" : "HALT");
+ }
+ /* if 2nd in less than SAFE_iNTERVAL, give FATAL message & GTM_FATAL file, but no core, to stop nasty loops */
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(3) MAKE_MSG_SEVERE(ERR_RESTRICTEDOP), 1, is_zhalt ? "ZHALT" : "HALT");
+ if (IS_GTM_IMAGE)
+ {
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(3) MAKE_MSG_SEVERE(ERR_RESTRICTEDOP), 1, is_zhalt ? "ZHALT" : "HALT");
+ exi_condition = ERR_RESTRICTEDOP;
+ }
+ } else
+ exi_condition = retcode; /* in case it's not MUPIP send it out with it's original retcode */
# ifdef GTM_TRIGGER
- /* If ZHALT is done from a non-runtime trigger, send a warning message to oplog to record the fact
- * of this uncommon process termination method.
- */
- if (!IS_GTM_IMAGE)
- {
- zposition.mvtype = 0; /* It's not an mval yet till getzposition fills it in */
+ if (IS_MUPIP_IMAGE)
+ { /* MUPIP (Update Server) always goes out leaving a context file */
+ exi_condition = ERR_PROCTERM;
+ zposition.mvtype = 0; /* It's not an mval yet till getzposition fills it in */
getzposition(&zposition);
assert(MV_IS_STRING(&zposition) && (0 < zposition.str.len));
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_PROCTERM, 7, GTMIMAGENAMETXT(image_type), RTS_ERROR_TEXT("ZHALT"),
- retcode, zposition.str.len, zposition.str.addr);
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_PROCTERM, 6, GTMIMAGENAMETXT(image_type),
+ is_zhalt ? "ZHALT" : "HALT", retcode, zposition.str.len, zposition.str.addr);
}
-# endif
- if ((0 != retcode) && (0 == (retcode & 0xFF)))
- retcode = 255;; /* If the truncated return code that can be passed back to a parent process is zero
- * set the retcode to 255 so a non-zero return code is returned instead (UNIX only).
- */
- EXIT(retcode);
+ else
+ assert(IS_GTM_IMAGE);
+ # endif
+ process_exiting = TRUE; /* do a little dance to leave a GTM_FATAL file but no core file */
+ if (retcode && !is_zhalt)
+ EXIT(0); /* unless this is a op_dmode or dm_read exit */
+ create_fatal_error_zshow_dmp(MAKE_MSG_SEVERE(ERR_RESTRICTEDOP));
+ exi_condition = 0;
+ stop_image_no_core();
}
diff --git a/sr_port/op_zprevious.c b/sr_port/op_zprevious.c
old mode 100755
new mode 100644
index df2688a..2db91d7
--- a/sr_port/op_zprevious.c
+++ b/sr_port/op_zprevious.c
@@ -12,7 +12,7 @@
#include "mdef.h"
-#include <stddef.h> /* for offsetof macro in VMS */
+#include <stddef.h> /* for offsetof macro in VMS */
#include "gtm_string.h"
@@ -23,31 +23,35 @@
#include "gdsfhead.h"
#include "stringpool.h"
#include "op.h"
-#include "gvcst_protos.h" /* for gvcst_data,gvcst_zprevious prototype */
+#include "gvcst_protos.h" /* for gvcst_data,gvcst_zprevious prototype */
#include "change_reg.h"
#include "gvsub2str.h"
#include "gvcmx.h"
#include "gvusr.h"
#include "filestruct.h"
#include "hashtab_mname.h"
-#include "targ_alloc.h" /* for GV_BIND_SUBSREG macro which needs "targ_alloc" prototype */
+#include "targ_alloc.h" /* for GV_BIND_SUBSREG macro which needs "targ_alloc" prototype */
#include "gtmimagename.h"
-#include "collseq.h" /* for STD_NULL_COLL_FALSE */
+#include "collseq.h" /* for STD_NULL_COLL_FALSE */
#include "mvalconv.h"
#include "gdscc.h" /* needed for tp.h */
#include "gdskill.h" /* needed for tp.h */
-#include "buddy_list.h" /* needed for tp.h */
+#include "buddy_list.h" /* needed for tp.h */
#include "hashtab_int4.h" /* needed for tp.h */
#include "jnl.h" /* needed for tp.h */
#include "tp.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
-GBLREF gd_region *gv_cur_region;
-GBLREF gv_namehead *gv_target;
-GBLREF gv_key *gv_altkey, *gv_currkey;
-GBLREF sgmnt_addrs *cs_addrs;
-GBLREF sgmnt_data_ptr_t cs_data;
-GBLREF sgm_info *sgm_info_ptr;
-GBLREF spdesc stringpool;
+
+GBLREF gd_region *gv_cur_region;
+GBLREF gv_namehead *gv_target;
+GBLREF gv_key *gv_altkey, *gv_currkey;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF sgm_info *sgm_info_ptr;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF spdesc stringpool;
/* op_gvorder should generally be maintained in parallel */
@@ -66,6 +70,7 @@ void op_zprevious(mval *v)
mname_entry gvname;
mval tmpmval, *datamval;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -153,7 +158,7 @@ void op_zprevious(mval *v)
assert(gv_currkey->end < (MAX_MIDENT_LEN + 2)); /* until names are not in midents */
assert(KEY_DELIMITER == gv_currkey->base[gv_currkey->end]);
assert(KEY_DELIMITER == gv_currkey->base[gv_currkey->end - 1]);
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
gd_targ = TREF(gd_targ_addr);
gd_map_start = gd_targ->maps;
map = gv_srch_map(gd_targ, (char *)&gv_currkey->base[0], gv_currkey->end - 1, SKIP_BASEDB_OPEN_FALSE);
@@ -175,7 +180,7 @@ void op_zprevious(mval *v)
if (IS_BASEDB_REGNAME(gv_cur_region))
{ /* Non-statsDB region */
if (!gv_cur_region->open)
- gv_init_reg(gv_cur_region);
+ gv_init_reg(gv_cur_region, NULL);
change_reg();
/* Entries in directory tree could have empty GVT in which case move on to previous entry */
acc_meth = REG_ACC_METH(gv_cur_region);
@@ -273,7 +278,7 @@ void op_zprevious(mval *v)
v->str.len = 0;
v->mvtype = MV_STR; /* initialize mvtype now that mval has been otherwise completely set up */
/* No need to restore gv_currkey (to what it was at function entry) as it is already set to NULL */
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
}
return;
}
diff --git a/sr_port/op_zshow.c b/sr_port/op_zshow.c
index eb454b4..7da5af3 100755
--- a/sr_port/op_zshow.c
+++ b/sr_port/op_zshow.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -46,6 +46,7 @@ void op_zshow(mval *func, int type, lv_val *lvn)
done_l = FALSE,
done_r = FALSE,
done_s = FALSE,
+ done_t = FALSE,
done_v = FALSE;
int i;
zshow_out output;
@@ -75,6 +76,8 @@ void op_zshow(mval *func, int type, lv_val *lvn)
case 'r':
case 'S':
case 's':
+ case 'T':
+ case 't':
case 'V':
case 'v':
continue;
@@ -152,7 +155,7 @@ void op_zshow(mval *func, int type, lv_val *lvn)
done_g = TRUE;
output.code = 'G';
output.line_num = 0; /* G statistics start at 0 for <*,*> output and not 1 like the others */
- zshow_gvstats(&output);
+ zshow_gvstats(&output, FALSE);
break;
case 'I':
case 'i':
@@ -169,7 +172,7 @@ void op_zshow(mval *func, int type, lv_val *lvn)
done_l = TRUE;
output.code = 'L';
output.line_num = 0; /* L statistics start at 0 for <LUS,LUF> output and not 1 like the others */
- zshow_locks(&output);
+ zshow_locks(&output, FALSE);
break;
case 'R':
case 'r':
@@ -187,6 +190,18 @@ void op_zshow(mval *func, int type, lv_val *lvn)
output.code = 'S';
zshow_stack(&output, FALSE); /* show_checksum = FALSE */
break;
+ case 'T':
+ case 't':
+ if (done_t)
+ break;
+ done_t = TRUE;
+ output.code = 'G';
+ output.line_num = 0; /* G statistics start at 0 for <*,*> output and not 1 like the others */
+ zshow_gvstats(&output, TRUE);
+ output.code = 'L';
+ output.line_num = 0; /* L statistics start at 0 for <LUS,LUF> output and not 1 like the others */
+ zshow_locks(&output, TRUE);
+ break;
case 'V':
case 'v':
if (done_v)
diff --git a/sr_port/op_zst_break.c b/sr_port/op_zst_break.c
index 016a88a..d530e4d 100644
--- a/sr_port/op_zst_break.c
+++ b/sr_port/op_zst_break.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2007 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -17,13 +18,17 @@
#include "op.h"
#include "io.h"
#include "fix_xfer_entry.h"
+#include "restrict.h"
GBLREF stack_frame *frame_pointer;
-GBLREF mval zstep_action;
+GBLREF int4 gtm_trigger_depth;
GBLREF xfer_entry_t xfer_table[];
+GBLREF mval zstep_action;
void op_zst_break(void)
{
+ if ((0 < gtm_trigger_depth) && (RESTRICTED(trigger_mod)))
+ return;
FIX_XFER_ENTRY(xf_linefetch, op_linefetch);
FIX_XFER_ENTRY(xf_linestart, op_linestart);
FIX_XFER_ENTRY(xf_zbfetch, op_zbfetch);
diff --git a/sr_port/op_zstep.c b/sr_port/op_zstep.c
index 754be5d..db27695 100644
--- a/sr_port/op_zstep.c
+++ b/sr_port/op_zstep.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2007 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -22,7 +23,6 @@ GBLREF xfer_entry_t xfer_table[];
GBLREF stack_frame *frame_pointer;
GBLDEF unsigned char *zstep_level;
GBLREF mval zstep_action;
-GBLREF mval dollar_zstep;
GBLREF bool neterr_pending;
GBLREF int4 outofband;
GBLREF int iott_write_error;
@@ -32,9 +32,11 @@ void op_zstep(uint4 code, mval *action)
{
stack_frame *fp;
int4 status;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
if (!action)
- zstep_action = dollar_zstep;
+ zstep_action = TREF(dollar_zstep);
else
{ op_commarg(action,indir_linetail);
op_unwind();
@@ -82,6 +84,6 @@ void op_zstep(uint4 code, mval *action)
}
break;
default:
- GTMASSERT;
+ assertpro(FALSE && code);
}
}
diff --git a/sr_port/op_zsystem.c b/sr_port/op_zsystem.c
index f958d78..6b29570 100755
--- a/sr_port/op_zsystem.c
+++ b/sr_port/op_zsystem.c
@@ -78,10 +78,12 @@ void op_zsystem(mval *v)
cmd_buf[v->str.len] = '\0';
} else
{
- cmd_buf = GETENV("SHELL");;
+ cmd_buf = GETENV("SHELL");
cmd_buf = (NULL == cmd_buf || '\0' == *cmd_buf) ? "/bin/sh" : cmd_buf;
}
dollar_zsystem = SYSTEM(cmd_buf);
+ if (v->str.len)
+ free(cmd_buf);
if (-1 == dollar_zsystem)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, RTS_ERROR_LITERAL("system"), CALLFROM, errno);
#ifdef _BSD
diff --git a/sr_port/op_ztcommit.c b/sr_port/op_ztcommit.c
index ba1682e..e8d8420 100644
--- a/sr_port/op_ztcommit.c
+++ b/sr_port/op_ztcommit.c
@@ -32,13 +32,13 @@
#include "jnl_get_checksum.h"
#include "iosp.h"
-GBLREF jnlpool_addrs jnlpool;
GBLREF jnl_fence_control jnl_fence_ctl;
GBLREF uint4 dollar_tlevel;
GBLREF seq_num seq_num_zero;
GBLREF jnl_gbls_t jgbl;
GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_addrs *cs_addrs;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_REPLOFFJNLON);
error_def(ERR_TRANSMINUS);
@@ -50,6 +50,7 @@ void op_ztcommit(int4 n)
uint4 jnl_status;
sgmnt_addrs *csa, *csa_next, *new_fence_list, *tcsa, **tcsa_insert;
gd_region *save_gv_cur_region;
+ jnlpool_addrs_ptr_t save_jnlpool;
jnl_private_control *jpc;
sgmnt_data_ptr_t csd;
jnl_buffer_ptr_t jbp;
@@ -110,6 +111,7 @@ void op_ztcommit(int4 n)
*tcsa_insert = csa;
}
save_gv_cur_region = gv_cur_region; /* we change gv_cur_region in the loop below, so save for later restore */
+ save_jnlpool = jnlpool;
DEBUG_ONLY(prev_index = 0;)
jnl_fence_ctl.fence_list = new_fence_list;
/* Note that only those regions that are actively journaling will appear in the following list: */
@@ -147,6 +149,7 @@ void op_ztcommit(int4 n)
}
gv_cur_region = save_gv_cur_region; /* restore original */
tp_change_reg(); /* bring cs_* in sync with gv_cur_region */
+ jnlpool = save_jnlpool;
DEBUG_ONLY(save_gbl_jrec_time = jgbl.gbl_jrec_time;)
if (replication) /* instance is replicated */
{
diff --git a/sr_port/opcode_def.h b/sr_port/opcode_def.h
index 7e1245a..3518768 100755
--- a/sr_port/opcode_def.h
+++ b/sr_port/opcode_def.h
@@ -93,7 +93,6 @@ OPCODE_DEF(OC_NOR, (OCT_BOOL | OCT_NEGATED))
OPCODE_DEF(OC_COM, (OCT_BOOL | OCT_UNARY))
OPCODE_DEF(OC_BREAK, (OCT_NULL))
OPCODE_DEF(OC_CLOSE, (OCT_NULL))
-OPCODE_DEF(OC_HALT, (OCT_NULL))
OPCODE_DEF(OC_HANG, (OCT_NULL))
OPCODE_DEF(OC_JOB, (OCT_NULL))
OPCODE_DEF(OC_KILL, (OCT_NULL))
diff --git a/sr_port/parm_pool.h b/sr_port/parm_pool.h
index ad84622..a8be6fc 100644
--- a/sr_port/parm_pool.h
+++ b/sr_port/parm_pool.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2012-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -15,7 +16,7 @@
#ifdef DEBUG
# define PARM_POOL_INIT_CAP 2 /* Initial debug capacity */
# define MAX_SET_COUNT 3 /* Max parameter sets stored at one time */
-# define MAX_TOTAL_SLOTS (MAX_SET_COUNT * MAX_ACTUALS) /* Max total slots allowed in the pool */
+# define MAX_TOTAL_SLOTS 129 /* CAPACITY_ROUND_UP2(PARM_POOL_INIT_CAP, (MAX_SET_COUNT * MAX_ACTUALS) + 1) */
#else
# define PARM_POOL_INIT_CAP 8 /* Initial pro capacity */
#endif
diff --git a/sr_port/patcode.h b/sr_port/patcode.h
index 50854c8..0fe4a1d 100755
--- a/sr_port/patcode.h
+++ b/sr_port/patcode.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -264,6 +264,27 @@ typedef struct pte_csh_struct {
} \
}
+#define ENSURE_PAT_IN_TABLE(CODE) \
+MBSTART { \
+ char BUF[CHAR_CLASSES]; \
+ uint4 BIT, BYTELEN, MBIT; \
+ \
+ if (!(CODE & pat_allmaskbits)) \
+ { /* current table has no characters with this pattern code */ \
+ BYTELEN = 0; \
+ for (BIT = 0; BIT < PAT_MAX_BITS; BIT++) \
+ { \
+ MBIT = (1 << BIT); \
+ if ((MBIT & CODE & PATM_LONGFLAGS) && !(MBIT & pat_allmaskbits)) \
+ BUF[BYTELEN++] = codelist[patmaskseq(MBIT)]; \
+ } \
+ if (run_time) \
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_PATNOTFOUND, 2, BYTELEN, BUF); \
+ TREF(source_error_found) = ERR_PATNOTFOUND; \
+ return FALSE; \
+ } \
+} MBEND
+
int do_patalt(
uint4 *firstalt,
unsigned char *strptr,
diff --git a/sr_port/patstr.c b/sr_port/patstr.c
index 318a5cc..de0b9b3 100755
--- a/sr_port/patstr.c
+++ b/sr_port/patstr.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -314,6 +314,10 @@ int patstr(mstr *instr, ptstr *obj, unsigned char **relay)
* fixed part from the indefinite part.
*/
split_atom = TRUE;
+ if ((count >= (MAX_PATTERN_ATOMS - 1)) ||
+ (atom_map >= (MAX_PATTERN_ATOMS -2)))
+ return ERR_PATMAXLEN;
+
} else
{
infinite = TRUE;
@@ -740,6 +744,7 @@ int patstr(mstr *instr, ptstr *obj, unsigned char **relay)
if (pattern_mask & PATM_STRLIT)
{
memset(&exp_temp[0], 0, SIZEOF(exp_temp));
+ assert(atom_map < MAX_PATTERN_ATOMS);
min[atom_map] = lower_bound;
max[atom_map] = upper_bound;
size[atom_map] = strlit.bytelen;
@@ -810,6 +815,7 @@ int patstr(mstr *instr, ptstr *obj, unsigned char **relay)
atom_map--;
}
}
+ assert(atom_map < MAX_PATTERN_ATOMS);
min[atom_map] = lower_bound;
max[atom_map] = upper_bound;
size[atom_map] = 1;
diff --git a/sr_port/process_deferred_stale.c b/sr_port/process_deferred_stale.c
old mode 100755
new mode 100644
index 01bffff..b1d2cac
--- a/sr_port/process_deferred_stale.c
+++ b/sr_port/process_deferred_stale.c
@@ -34,17 +34,21 @@
#include "process_deferred_stale.h"
#include "jnl.h"
#include "wcs_wt.h"
+#include "repl_msg.h"
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
-GBLREF boolean_t unhandled_stale_timer_pop;
-GBLREF gd_region *gv_cur_region;
-GBLREF int process_exiting;
-GBLREF jnl_gbls_t jgbl;
+GBLREF boolean_t unhandled_stale_timer_pop;
+GBLREF gd_region *gv_cur_region;
+GBLREF int process_exiting;
+GBLREF jnl_gbls_t jgbl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
void process_deferred_stale(void)
{
gd_region *r_cur, *r_top, *save_gv_cur_region;
gd_addr *addr_ptr;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t save_jnlpool;
int4 status;
assert(unhandled_stale_timer_pop);
@@ -58,6 +62,7 @@ void process_deferred_stale(void)
if (process_exiting)
return;
save_gv_cur_region = gv_cur_region;
+ save_jnlpool = jnlpool;
for (addr_ptr = get_next_gdr(NULL); NULL != addr_ptr; addr_ptr = get_next_gdr(addr_ptr))
{
for (r_cur = addr_ptr->regions, r_top = r_cur + addr_ptr->n_regions; r_cur < r_top; r_cur++)
@@ -85,7 +90,7 @@ void process_deferred_stale(void)
UNIX_ONLY(|| jgbl.onlnrlbk || (NULL == gv_target) || (DIR_ROOT == gv_target->root)));
if (UNIX_ONLY(!jgbl.onlnrlbk && )csa->now_crit)
continue;
- if (csa->stale_defer && !FROZEN_CHILLED(csa->hdr))
+ if (csa->stale_defer && !FROZEN_CHILLED(csa))
{
gv_cur_region = r_cur;
tp_change_reg();
@@ -99,4 +104,6 @@ void process_deferred_stale(void)
unhandled_stale_timer_pop = FALSE;
gv_cur_region = save_gv_cur_region;
tp_change_reg();
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
}
diff --git a/sr_port/process_gvt_pending_list.c b/sr_port/process_gvt_pending_list.c
index 4ab93ba..1818b83 100644
--- a/sr_port/process_gvt_pending_list.c
+++ b/sr_port/process_gvt_pending_list.c
@@ -47,8 +47,9 @@ void process_gvt_pending_list(gd_region *reg, sgmnt_addrs *csa)
gv_namehead *old_gvt, *new_gvt, *gvtarg;
int4 db_max_key_size;
boolean_t added, first_wasopen;
- ht_ent_mname *stayent;
+ ht_ent_mname *stayent, *old_gvt_ent;
hash_table_mname *gvt_hashtab;
+ gd_addr *gd_iter;
# ifdef DEBUG
DCL_THREADGBL_ACCESS;
@@ -124,6 +125,12 @@ void process_gvt_pending_list(gd_region *reg, sgmnt_addrs *csa)
*gvtc->gvt_ptr2 = new_gvt;
}
assert(1 == old_gvt->regcnt); /* assert that TARG_FREE will happen below */
+ for (gd_iter = get_next_gdr(NULL); gd_iter; gd_iter = get_next_gdr(gd_iter))
+ { /* If gd_iter->tab_ptr still has old_gvt, remove it before freeing old_gvt. */
+ old_gvt_ent = (ht_ent_mname *)lookup_hashtab_mname(gd_iter->tab_ptr, &old_gvt->gvname);
+ if (old_gvt_ent)
+ delete_hashtab_ent_mname(gd_iter->tab_ptr, old_gvt_ent);
+ }
TARG_FREE_IF_NEEDED(old_gvt);
}
/* else: new_gvt is NULL which means old_gvt stays as is */
diff --git a/sr_port/region_freeze.c b/sr_port/region_freeze.c
index 8221cf5..cfe1ea5 100644
--- a/sr_port/region_freeze.c
+++ b/sr_port/region_freeze.c
@@ -41,7 +41,7 @@
#include "gtmio.h"
#ifdef DEBUG_FREEZE
-GBLREF bool caller_id_flag;
+GBLREF boolean_t caller_id_flag;
#endif
GBLREF bool in_mupip_freeze;
GBLREF uint4 process_id;
@@ -52,6 +52,7 @@ GBLREF gd_region *gv_cur_region;
# define FREEZE_ID ((0 == user_id) ? FROZEN_BY_ROOT : user_id)
# define FREEZE_MATCH process_id
# define OWNERSHIP (in_mupip_freeze ? (csd->freeze == freeze_id) : (csd->image_count == FREEZE_MATCH))
+# define NEG_STR(VAL) ((VAL) ? "" : "NO")
#ifdef DEBUG_FREEZE
#define SEND_FREEZEID(STATE, CSA) \
@@ -66,7 +67,8 @@ GBLREF gd_region *gv_cur_region;
error_def(ERR_FREEZEID);
#endif
-error_def(ERR_DBFILERR);
+error_def(ERR_DBFREEZEON);
+error_def(ERR_DBFREEZEOFF);
freeze_status region_freeze(gd_region *region, boolean_t freeze, boolean_t override, boolean_t wait_for_kip,
uint4 online, boolean_t flush_sync)
@@ -226,7 +228,7 @@ freeze_status region_freeze_main(gd_region *region, boolean_t freeze, boolean_t
csd->freeze = freeze_id; /* the order of this line and the next is important */
csd->image_count = FREEZE_MATCH;
csa->freeze = TRUE;
- csd->freeze_online = online;
+ cnl->freeze_online = online;
DEBUG_ONLY(cnl->freezer_waited_for_kip = wait_for_kip;)
SIGNAL_WRITERS_TO_RESUME(cnl);
DECR_INHIBIT_KILLS(cnl);
@@ -244,6 +246,8 @@ freeze_status region_freeze_main(gd_region *region, boolean_t freeze, boolean_t
SEND_FREEZEID("FREEZE", csa);
# endif
rel_latch(&cnl->freeze_latch);
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(7) ERR_DBFREEZEON, 5, REG_LEN_STR(region), NEG_STR(override), NEG_STR(online),
+ NEG_STR(online & CHILLED_AUTORELEASE_MASK));
return rval;
}
/* !freeze */
@@ -252,7 +256,7 @@ freeze_status region_freeze_main(gd_region *region, boolean_t freeze, boolean_t
/* If there is no freeze, but there is a freeze_online, then there was an autorelease, which needs to be cleaned up
* by the normal unfreeze procedure. However, we only do it in MUPIP FREEZE -OFF to ensure that the user gets a warning.
*/
- cleanup_autorelease = ((0 == csd->freeze) && CHILLED_AUTORELEASE(csd) && in_mupip_freeze);
+ cleanup_autorelease = ((0 == csd->freeze) && CHILLED_AUTORELEASE(csa) && in_mupip_freeze);
if ((0 == csd->freeze) && !cleanup_autorelease)
{
rel_latch(&cnl->freeze_latch);
@@ -260,10 +264,10 @@ freeze_status region_freeze_main(gd_region *region, boolean_t freeze, boolean_t
}
if (override || OWNERSHIP || cleanup_autorelease)
{
- was_online = csd->freeze_online;
+ was_online = cnl->freeze_online;
csd->image_count = 0; /* the order of this line and the next is important */
csd->freeze = 0;
- csd->freeze_online = FALSE;
+ cnl->freeze_online = FALSE;
csa->freeze = FALSE;
rel_latch(&cnl->freeze_latch);
# ifdef DEBUG_FREEZE
@@ -278,6 +282,8 @@ freeze_status region_freeze_main(gd_region *region, boolean_t freeze, boolean_t
{
csa->needs_post_freeze_flushsync = TRUE;
}
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(6) ERR_DBFREEZEOFF, 4, REG_LEN_STR(region), NEG_STR(override),
+ NEG_STR(cleanup_autorelease));
return rval;
} else
rel_latch(&cnl->freeze_latch);
diff --git a/sr_port/region_init.c b/sr_port/region_init.c
old mode 100755
new mode 100644
index b3bcb9c..dad3331
--- a/sr_port/region_init.c
+++ b/sr_port/region_init.c
@@ -103,6 +103,6 @@ void region_open(void)
#ifdef UNIX
gv_cur_region->node = -1;
#endif
- gv_init_reg(gv_cur_region);
+ gv_init_reg(gv_cur_region, NULL);
REVERT;
}
diff --git a/sr_port/repl_phase2_cleanup.c b/sr_port/repl_phase2_cleanup.c
index 880cb3d..3f1b3ab 100644
--- a/sr_port/repl_phase2_cleanup.c
+++ b/sr_port/repl_phase2_cleanup.c
@@ -59,8 +59,10 @@ void repl_phase2_cleanup(jnlpool_addrs *jpa)
jnlpool_ctl_ptr_t jpl;
boolean_t was_latch_owner;
+ assert(jpa && jpa->jnlpool_dummy_reg);
csa = &FILE_INFO(jpa->jnlpool_dummy_reg)->s_addrs;
jpl = jpa->jnlpool_ctl;
+ assert(jpl);
/* It is possible we already own the latch in case we are in timer-interrupt or process-exit code hence the below check */
was_latch_owner = GLOBAL_LATCH_HELD_BY_US(&jpl->phase2_commit_latch);
if (!was_latch_owner)
diff --git a/sr_port/repl_phase2_salvage.c b/sr_port/repl_phase2_salvage.c
index eb7afab..a622dc2 100644
--- a/sr_port/repl_phase2_salvage.c
+++ b/sr_port/repl_phase2_salvage.c
@@ -40,7 +40,7 @@ void repl_phase2_salvage(jnlpool_addrs *jpa, jnlpool_ctl_ptr_t jpl, jpl_phase2_i
jnldata_hdr_ptr_t jnl_header;
sm_uc_ptr_t jnldata_base;
- assert(jpl == jpa->jnlpool_ctl);
+ assert(jpa && jpl && (jpl == jpa->jnlpool_ctl));
assert((&FILE_INFO(jpa->jnlpool_dummy_reg)->s_addrs)->now_crit);
assert(!is_proc_alive(deadCmt->process_id, 0));
/* This commit entry was added by UPDATE_JPL_RSRV_WRITE_ADDR in t_end/tp_tend. Just like "jnl_phase2_salvage", we
diff --git a/sr_port/resolve_ref.c b/sr_port/resolve_ref.c
index 816f2f3..5eb3f65 100755
--- a/sr_port/resolve_ref.c
+++ b/sr_port/resolve_ref.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -294,16 +294,13 @@ void resolve_tref(triple *curtrip, oprtype *opnd)
triple *tripref;
tbp *tripbp;
- if (OC_PASSTHRU == (tripref = opnd->oprval.tref)->opcode) /* note the assignment */
- {
+ while (OC_PASSTHRU == (tripref = opnd->oprval.tref)->opcode) /* note the assignment */
+ { /* As many OC_PASSTHRUs as are stacked, we devour */
+ COMPDBG(PRINTF(" ** Passthru replacement: Operand at 0x%08lx replaced by operand at 0x%08lx\n",
+ (unsigned long)opnd, (unsigned long)&tripref->operand[0]););
assert(TRIP_REF == tripref->operand[0].oprclass);
- do
- { /* As many OC_PASSTHRUs as are stacked, we will devour */
- *opnd = tripref->operand[0];
- } while (OC_PASSTHRU == (tripref = opnd->oprval.tref)->opcode); /* note the assignment */
+ *opnd = tripref->operand[0];
}
- COMPDBG(PRINTF(" ** Passthru replacement: Operand at 0x%08lx replaced by operand at 0x%08lx\n",
- (unsigned long)opnd, (unsigned long)&tripref->operand[0]););
tripbp = (tbp *)mcalloc(SIZEOF(tbp));
tripbp->bpt = curtrip;
dqins(&opnd->oprval.tref->backptr, que, tripbp);
diff --git a/sr_port/restrict.c b/sr_port/restrict.c
index 7a470e1..00bfba0 100644
--- a/sr_port/restrict.c
+++ b/sr_port/restrict.c
@@ -36,6 +36,8 @@
#define RESTRICT_DSE "DSE"
#define RESTRICT_DIRECT_MODE "DIRECT_MODE"
#define RESTRICT_ZCMDLINE "ZCMDLINE"
+#define RESTRICT_HALT "HALT"
+#define RESTRICT_ZHALT "ZHALT"
#define MAX_READ_SZ 1024 /* Restrict Mnemonic shouldn't exceed this limit */
#define MAX_FACILITY_LEN 64
#define MAX_GROUP_LEN 64
@@ -57,7 +59,7 @@ error_def(ERR_TEXT);
void restrict_init(void)
{
- char rfpath[GTM_PATH_MAX], linebuf[MAX_READ_SZ+1], *lbp, facility[MAX_FACILITY_LEN+1], group[MAX_GROUP_LEN];
+ char rfpath[GTM_PATH_MAX], linebuf[MAX_READ_SZ+1], *lbp, facility[MAX_FACILITY_LEN+1], group[MAX_GROUP_LEN+1];
int save_errno, fields, status, lineno;
FILE *rfp;
boolean_t restrict_one, restrict_all = FALSE;
@@ -133,7 +135,6 @@ void restrict_init(void)
restrict_all = TRUE; /* Parse error - restrict everything */
break;
}
-
if (0 == STRNCASECMP(facility, RESTRICT_BREAK, SIZEOF(RESTRICT_BREAK)))
restrictions.break_op = restrict_one;
else if (0 == STRNCASECMP(facility, RESTRICT_ZBREAK, SIZEOF(RESTRICT_ZBREAK)))
@@ -155,6 +156,10 @@ void restrict_init(void)
restrictions.dmode = restrict_one;
else if (0 == STRNCASECMP(facility, RESTRICT_ZCMDLINE, SIZEOF(RESTRICT_ZCMDLINE)))
restrictions.zcmdline = restrict_one;
+ else if (0 == STRNCASECMP(facility, RESTRICT_HALT, SIZEOF(RESTRICT_HALT)))
+ restrictions.halt_op = restrict_one;
+ else if (0 == STRNCASECMP(facility, RESTRICT_ZHALT, SIZEOF(RESTRICT_ZHALT)))
+ restrictions.zhalt_op = restrict_one;
else
{ /* Parse error - restrict everything */
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_RESTRICTSYNTAX, 3,
@@ -181,6 +186,8 @@ void restrict_init(void)
restrictions.dse = TRUE;
restrictions.dmode = TRUE;
restrictions.zcmdline = TRUE;
+ restrictions.halt_op = TRUE;
+ restrictions.zhalt_op = TRUE;
}
}
restrict_initialized = TRUE;
diff --git a/sr_port/restrict.h b/sr_port/restrict.h
index 0787ee0..fc81f2e 100644
--- a/sr_port/restrict.h
+++ b/sr_port/restrict.h
@@ -25,6 +25,8 @@ struct restrict_facilities
boolean_t dse;
boolean_t dmode;
boolean_t zcmdline;
+ boolean_t halt_op;
+ boolean_t zhalt_op;
};
GBLREF struct restrict_facilities restrictions;
diff --git a/sr_port/s2n.c b/sr_port/s2n.c
index a9d46ef..4680afc 100755
--- a/sr_port/s2n.c
+++ b/sr_port/s2n.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -116,7 +116,7 @@ char *s2n (mval *u)
}
digit = (0 != z) || (0 != y) || (0 != zero);
x = 0;
- exp = ('E' == *c) && digit;
+ exp = (c < eos) && ('E' == *c) && digit;
if (exp && ((c + 1) < eos))
{
w = c; /* save pointer to return in case expression following E is not a valid exponent */
diff --git a/sr_port/sec_shr_blk_build.c b/sr_port/sec_shr_blk_build.c
index 08d2401..3b94b0b 100644
--- a/sr_port/sec_shr_blk_build.c
+++ b/sr_port/sec_shr_blk_build.c
@@ -24,10 +24,11 @@
#include "min_max.h" /* needed for gdsblkops.h */
#include "gdsblkops.h"
#include "sec_shr_blk_build.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
#include "secshr_db_clnup.h"
-int sec_shr_blk_build(sgmnt_addrs *csa, sgmnt_data_ptr_t csd, boolean_t is_bg,
- cw_set_element *cse, sm_uc_ptr_t base_addr, trans_num ctn)
+void sec_shr_blk_build(sgmnt_addrs *csa, sgmnt_data_ptr_t csd, cw_set_element *cse, sm_uc_ptr_t base_addr, trans_num ctn)
{
blk_segment *seg, *stop_ptr, *array;
unsigned char *ptr;
@@ -39,6 +40,7 @@ int sec_shr_blk_build(sgmnt_addrs *csa, sgmnt_data_ptr_t csd, boolean_t is_bg,
assert(csa->now_crit || (ctn < csd->trans_hist.curr_tn));
assert(!csa->now_crit || (ctn == csd->trans_hist.curr_tn));
((blk_hdr_ptr_t)base_addr)->tn = ctn;
+ assert(array->len);
((blk_hdr_ptr_t)base_addr)->bsiz = UINTCAST(array->len);
((blk_hdr_ptr_t)base_addr)->levl = cse->level;
@@ -65,5 +67,4 @@ int sec_shr_blk_build(sgmnt_addrs *csa, sgmnt_data_ptr_t csd, boolean_t is_bg,
memmove(ptr, seg->addr, seg->len);
}
}
- return TRUE;
}
diff --git a/sr_port/sec_shr_blk_build.h b/sr_port/sec_shr_blk_build.h
index 38e3ca0..5e0d3b2 100755
--- a/sr_port/sec_shr_blk_build.h
+++ b/sr_port/sec_shr_blk_build.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2003 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -12,7 +13,6 @@
#ifndef SEC_SHR_BLK_BUILD_INCLUDED
#define SEC_SHR_BLK_BUILD_INCLUDED
-int sec_shr_blk_build(sgmnt_addrs *csa, sgmnt_data_ptr_t csd, boolean_t is_bg,
- cw_set_element *cse, sm_uc_ptr_t base_addr, trans_num ctn);
+void sec_shr_blk_build(sgmnt_addrs *csa, sgmnt_data_ptr_t csd, cw_set_element *cse, sm_uc_ptr_t base_addr, trans_num ctn);
#endif /* SEC_SHR_BLK_BUILD_INCLUDED */
diff --git a/sr_port/secshr_blk_full_build.c b/sr_port/secshr_blk_full_build.c
new file mode 100644
index 0000000..f114a5b
--- /dev/null
+++ b/sr_port/secshr_blk_full_build.c
@@ -0,0 +1,169 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "gdsroot.h"
+#include "gdsbt.h"
+#include "gdsblk.h"
+#include "gdsfhead.h"
+#include "filestruct.h"
+#include "gdscc.h"
+#include "gdskill.h"
+#include "copy.h"
+#include "jnl.h"
+#include "buddy_list.h" /* needed for tp.h */
+#include "hashtab_int4.h" /* needed for tp.h */
+#include "tp.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
+#include "secshr_db_clnup.h"
+#include "sec_shr_blk_build.h"
+
+GBLREF cw_set_element cw_set[];
+GBLREF sgm_info *sgm_info_ptr;
+GBLREF unsigned char cw_set_depth;
+
+/* To check if an input CS->mode is gds_t_write_root, it is possible we are in phase2 in which case we would have
+ * set CS->mode to gds_t_committed in which case CS->old_mode would hold the gds_t_write_root value hence the below macro.
+ */
+#define IS_T_WRITE_ROOT(CS) ((gds_t_write_root == CS->mode) \
+ || (gds_t_committed == CS->mode) && (gds_t_write_root == CS->old_mode))
+
+/* Returns 0 if success, -1 if failure */
+int secshr_blk_full_build(boolean_t is_tp, sgmnt_addrs *csa,
+ sgmnt_data_ptr_t csd, boolean_t is_bg, struct cw_set_element_struct *cs, sm_uc_ptr_t blk_ptr, trans_num currtn)
+{
+ boolean_t is_write_root;
+ cw_set_element *nxt, *cs_ptr;
+ off_chain chain;
+ sgm_info *si, *save_si;
+ unsigned char *chain_ptr;
+ int numargs;
+ gtm_uint64_t argarray[SECSHR_ACCOUNTING_MAX_ARGS];
+
+ if (!is_tp)
+ { /* Non-TP */
+ sec_shr_blk_build(csa, csd, cs, blk_ptr, currtn);
+ assert(!IS_T_WRITE_ROOT(cs));
+ is_write_root = FALSE;
+ do
+ {
+ if (!cs->ins_off)
+ {
+ assert(!is_write_root);
+ break;
+ }
+ if ((cs->ins_off > ((blk_hdr *)blk_ptr)->bsiz - SIZEOF(block_id))
+ || (cs->ins_off < (SIZEOF(blk_hdr) + SIZEOF(rec_hdr)))
+ || (0 > (short)cs->index)
+ || ((cs - cw_set) <= cs->index))
+ {
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_blk_full_build);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cs);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->index);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->ins_off);
+ SECSHR_ACCOUNTING(numargs, argarray, ((blk_hdr *)blk_ptr)->bsiz);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ return -1;
+ }
+ PUT_LONG((blk_ptr + cs->ins_off), ((cw_set_element *)(cw_set + cs->index))->blk);
+ if (is_write_root)
+ break;
+ cs++;
+ is_write_root = IS_T_WRITE_ROOT(cs);
+ if ((cs >= (cw_set + cw_set_depth)) || !is_write_root)
+ break;
+ } while (TRUE);
+ } else
+ { /* TP */
+ si = csa->sgm_info_ptr;
+ if (0 == cs->done)
+ {
+ sec_shr_blk_build(csa, csd, cs, blk_ptr, currtn);
+ if (0 != cs->ins_off)
+ {
+ if ((cs->ins_off > ((blk_hdr *)blk_ptr)->bsiz - SIZEOF(block_id))
+ || (cs->ins_off < (SIZEOF(blk_hdr) + SIZEOF(rec_hdr))))
+ {
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_blk_full_build);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cs);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->index);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->ins_off);
+ SECSHR_ACCOUNTING(numargs, argarray, ((blk_hdr *)blk_ptr)->bsiz);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ return -1;
+ }
+ if (0 == cs->first_off)
+ cs->first_off = cs->ins_off;
+ chain_ptr = blk_ptr + cs->ins_off;
+ chain.flag = 1;
+ /* Note: Currently only assert check of cs->index, not an if check like "cs->ins_off" above */
+ assert((0 <= (short)cs->index));
+ assert(cs->index < si->cw_set_depth);
+ chain.cw_index = cs->index;
+ chain.next_off = cs->next_off;
+ GET_LONGP(chain_ptr, &chain);
+ cs->ins_off = cs->next_off = 0;
+ }
+ } else
+ {
+ memmove(blk_ptr, cs->new_buff, ((blk_hdr *)cs->new_buff)->bsiz);
+ ((blk_hdr *)blk_ptr)->tn = currtn;
+ }
+ if (cs->first_off)
+ {
+ for (chain_ptr = blk_ptr + cs->first_off; ; chain_ptr += chain.next_off)
+ {
+ GET_LONGP(&chain, chain_ptr);
+ if ((1 == chain.flag)
+ && ((chain_ptr - blk_ptr + SIZEOF(block_id)) <= ((blk_hdr *)blk_ptr)->bsiz)
+ && (chain.cw_index < si->cw_set_depth))
+ {
+ save_si = sgm_info_ptr;
+ sgm_info_ptr = si; /* needed by "tp_get_cw" */
+ tp_get_cw(si->first_cw_set, chain.cw_index, &cs_ptr);
+ sgm_info_ptr = save_si;
+ PUT_LONG(chain_ptr, cs_ptr->blk);
+ if (0 == chain.next_off)
+ break;
+ } else
+ {
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_blk_full_build);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cs);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->index);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)blk_ptr);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)chain_ptr);
+ SECSHR_ACCOUNTING(numargs, argarray, chain.next_off);
+ SECSHR_ACCOUNTING(numargs, argarray, chain.cw_index);
+ SECSHR_ACCOUNTING(numargs, argarray, si->cw_set_depth);
+ SECSHR_ACCOUNTING(numargs, argarray, ((blk_hdr *)blk_ptr)->bsiz);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ return -1;
+ }
+ }
+ }
+ } /* TP */
+ return 0;
+}
diff --git a/sr_port/secshr_db_clnup.c b/sr_port/secshr_db_clnup.c
index d3b3f46..e60c39e 100644
--- a/sr_port/secshr_db_clnup.c
+++ b/sr_port/secshr_db_clnup.c
@@ -48,7 +48,6 @@
#include "relqueopi.h" /* for INSQTI and INSQHI macros */
#include "caller_id.h"
#include "sec_shr_blk_build.h"
-#include "sec_shr_map_build.h"
#include "add_inter.h"
#include "send_msg.h" /* for send_msg prototype */
#include "secshr_db_clnup.h"
@@ -62,76 +61,33 @@
#include "op.h"
#include "dpgbldir.h" /* for "get_next_gdr" */
#include "t_abort.h"
+#include "have_crit.h"
#define FLUSH 1
-#define WCBLOCKED_NOW_CRIT_LIT "wcb_secshr_db_clnup_now_crit"
-#define WCBLOCKED_WBUF_DQD_LIT "wcb_secshr_db_clnup_wbuf_dqd"
-#define WCBLOCKED_PHASE2_CLNUP_LIT "wcb_secshr_db_clnup_phase2_clnup"
-
-#ifdef DEBUG_CHECK_LATCH
-# define DEBUG_LATCH(x) x
-#else
-# define DEBUG_LATCH(x)
-#endif
-
-#define RELEASE_LATCH_IF_OWNER_AND_EXITING(X, is_exiting) \
-MBSTART { \
- if (is_exiting && ((X)->u.parts.latch_pid == process_id)) \
- { \
- SET_LATCH_GLOBAL(X, LOCK_AVAILABLE); \
- DEBUG_LATCH(util_out_print("Latch cleaned up", FLUSH)); \
- } \
-} MBEND
-
-GBLREF boolean_t certify_all_blocks;
-GBLREF boolean_t need_kip_incr;
-GBLREF cw_set_element cw_set[];
GBLREF gd_region *gv_cur_region; /* for the LOCK_HIST macro in the RELEASE_BUFF_UPDATE_LOCK macro */
-GBLREF inctn_detail_t inctn_detail; /* holds detail to fill in to inctn jnl record */
-GBLREF inctn_opcode_t inctn_opcode;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF node_local_ptr_t locknl; /* set explicitly before invoking RELEASE_BUFF_UPDATE_LOCK macro */
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF sgm_info *first_sgm_info; /* List of all regions (unsorted) in TP transaction */
GBLREF sgm_info *first_tp_si_by_ftok; /* List of READ or UPDATED regions sorted on ftok order */
-GBLREF sgm_info *sgm_info_ptr;
GBLREF sgmnt_addrs *kip_csa;
-GBLREF short crash_count;
-GBLREF trans_num start_tn;
GBLREF uint4 process_id;
-GBLREF uint4 update_trans;
-GBLREF unsigned char cw_set_depth;
-GBLREF unsigned int cr_array_index;
GBLREF sgmnt_addrs *cs_addrs;
-GBLREF volatile int4 crit_count;
-GBLREF int4 strm_index;
-GBLREF jnl_fence_control jnl_fence_ctl;
#ifdef DEBUG
GBLREF volatile boolean_t in_wcs_recover; /* TRUE if in "wcs_recover" */
+GBLREF uint4 update_trans;
GBLREF boolean_t dse_running;
-GBLREF jnl_gbls_t jgbl;
-GBLREF cache_rec_ptr_t cr_array[]; /* Maximum number of blocks that can be in transaction */
#endif
error_def(ERR_WCBLOCKED);
-typedef enum
-{
- REG_COMMIT_UNSTARTED = 0,/* indicates that GT.M has not committed even one cse in this region */
- REG_COMMIT_PARTIAL, /* indicates that GT.M has committed at least one but not all cses for this region */
- REG_COMMIT_COMPLETE /* indicates that GT.M has already committed all cw-set-elements for this region */
-} commit_type;
-
/* secshr_db_clnup can be called with one of the following three values for "secshr_state"
*
* a) NORMAL_TERMINATION --> We are called from the exit-handler for precautionary cleanup.
* We should NEVER be in the midst of a database update in this case.
* b) COMMIT_INCOMPLETE --> We are called from t_commit_cleanup.
* We should ALWAYS be in the midst of a database update in this case.
- * c) ABNORMAL_TERMINATION --> This is currently VMS ONLY. This process received a STOP/ID.
- * We can POSSIBLY be in the midst of a database update in this case.
- * When UNIX boxes allow kernel extensions, it can then handle "kill -9".
*
* If we are in the midst of a database update, then depending on where we are in the commit logic
* we need to ROLL-BACK (undo the partial commit) or ROLL-FORWARD (complete the partial commit) the database update.
@@ -158,41 +114,55 @@ typedef enum
* b) All jnlpool steps below apply only if replication is turned ON.
* c) For MM, the jnl and db commits happen inside crit i.e. no phase2 outside crit like BG.
*
- * (CMT01) Get crit on all regions (UPDATED & NON-UPDATED)
- * (CMT02) Get crit on jnlpool
- * (CMT03) Reserve space in JNLPOOL for journal records (UPDATE_JPL_RSRV_WRITE_ADDR macro)
- * For each UPDATED region
- * {
- * (CMT04) csd->trans_hist.early_tn = csd->trans_hist.curr_tn + 1;
- * (CMT05) csa->t_commit_crit = T_COMMIT_CRIT_PHASE0;
- * }
- * For each UPDATED & JOURNALED region
- * {
- * (CMT06) Reserve space in JNLBUFF for journal records PHASE1 (UPDATE_JRS_RSRV_FREEADDR macro)
- * }
+ * (CMT01) Get crit on all regions (UPDATED || NON-UPDATED)
+ * (CMT02) Get crit on jnlpool
+ * (CMT03) Reserve space in JNLPOOL for journal records (UPDATE_JPL_RSRV_WRITE_ADDR macro)
+ * For each UPDATED region
+ * {
+ * (CMT04) csd->trans_hist.early_tn = csd->trans_hist.curr_tn + 1;
+ * (CMT05) csa->t_commit_crit = T_COMMIT_CRIT_PHASE0;
+ * }
+ * For each UPDATED & JOURNALED region
+ * {
+ * (CMT06) Reserve space in JNLBUFF for journal records PHASE1 (UPDATE_JRS_RSRV_FREEADDR macro)
+ * }
* (CMT06a) If (MM or (BG && jnlbuff-overflow)) Do Step CMT16 here instead of later
- * (CMT06b) If (MM) Do Step CMT17 here instead of later
- * (CMT07) jnlpool_ctl->jnl_seqno++; jnlpool_ctl->strm_seqno[]++ if supplementary; (SET_JNL_SEQNO macro)
- * For each UPDATED region
- * {
- * (CMT08) csa->t_commit_crit = T_COMMIT_CRIT_PHASE1; cnl->update_underway_tn = csd->trans_hist.curr_tn;
- * (CMT09) If replication is ON, csd->reg_seqno = jnlpool_ctl->jnl_seqno + 1; csd->strm_reg_seqno[] = xxx
- * (CMT10) Commit all cw-set-elements of this region PHASE1 (inside crit) // bg_update_phase1 or mm_update
- * (CMT10a) If (BG && (bitmap cw-set-element of this region)) commit it PHASE2 (inside crit) // bg_update_phase2
- * (CMT11) si->update_trans |= UPDTRNS_TCOMMIT_STARTED_MASK;
- * (CMT12) csd->trans_hist.curr_tn++;
- * (CMT13) csa->t_commit_crit = T_COMMIT_CRIT_PHASE2;
- * (CMT14) Release crit on region
- * }
- * (CMT15) Release crit on jnlpool
- * For each UPDATED & JOURNALED region
- * (CMT16) If (BG) Write journal records in JNLBUFF & JNLPOOL. PHASE2 (outside crit). Mark write complete in JNLBUFF.
- * (CMT17) If (BG) Mark journal record write complete in JNLPOOL.
- * For each participating region being UPDATED
- * {
- * (CMT18) Commit all cw-set-elements of this region PHASE2 (outside crit) // bg_update_phase2
- * (CMT19) csa->t_commit_crit = FALSE;
- * }
+ * (CMT06b) If (Non-TP && MM) Do Step CMT17 here instead of later
+ * (CMT07) jnlpool_ctl->jnl_seqno++; jnlpool_ctl->strm_seqno[]++ if supplementary; (SET_JNL_SEQNO macro)
+ * For each (UPDATED || NON-UPDATED) region
+ * {
+ * If this is an UPDATED region
+ * {
+ * (CMT08) csa->t_commit_crit = T_COMMIT_CRIT_PHASE1; cnl->update_underway_tn = csd->trans_hist.curr_tn;
+ * (CMT09) If replication is ON, csd->reg_seqno = jnlpool_ctl->jnl_seqno + 1; csd->strm_reg_seqno[] = xxx
+ * if (cw_set is non-NULL for this region) // i.e. not duplicate set(s)
+ * {
+ * For each cw-se-element
+ * {
+ * (CMT10) Commit PHASE1 // bg_update_phase1 or mm_update
+ * (CMT10a) If (BG && IS_BG_PHASE2_COMMIT_IN_CRIT(cse, mode)) Do Step CMT16 and CMT18 here instead of later
+ * }
+ * }
+ * (CMT11) si->update_trans |= UPDTRNS_TCOMMIT_STARTED_MASK;
+ * (CMT12) csd->trans_hist.curr_tn++;
+ * (CMT13) csa->t_commit_crit = T_COMMIT_CRIT_PHASE2;
+ * }
+ * (CMT14) Release crit on region
+ * }
+ * (CMT15) Release crit on jnlpool
+ * For each (UPDATED && JOURNALED) region
+ * {
+ * (CMT16) If (BG) Write journal records in JNLBUFF & JNLPOOL. PHASE2 (outside crit). Mark write complete in JNLBUFF.
+ * }
+ * (CMT17) If (BG) Mark journal record write complete in JNLPOOL.
+ * For each UPDATED region
+ * {
+ * if (cw_set is non-NULL for this region) // i.e. not duplicate set(s)
+ * {
+ * (CMT18) Commit all cw-set-elements of this region PHASE2 (outside crit) // bg_update_phase2
+ * }
+ * (CMT19) csa->t_commit_crit = FALSE;
+ * }
*
* If a transaction has proceeded to Step (CMT08) for at least one region, then "tp_update_underway" is set to TRUE
* and the transaction cannot be rolled back but has to be committed. Otherwise the transaction is rolled back.
@@ -205,60 +175,76 @@ typedef enum
void secshr_db_clnup(enum secshr_db_state secshr_state)
{
- unsigned char *chain_ptr;
- char *wcblocked_ptr;
- boolean_t is_bg, do_accounting, first_time = TRUE, is_exiting;
- boolean_t tp_update_underway = FALSE; /* set to TRUE if TP commit was in progress or complete */
- boolean_t non_tp_update_underway = FALSE; /* set to TRUE if non-TP commit was in progress or complete */
- boolean_t update_underway = FALSE; /* set to TRUE if either TP or non-TP commit was underway */
- boolean_t set_wc_blocked = FALSE; /* set to TRUE if cnl->wc_blocked needs to be set */
- boolean_t donot_reset_data_invalid; /* set to TRUE in case cr->data_invalid was TRUE in phase2 */
- int max_bts, old_mode;
- unsigned int lcnt;
- cache_rec_ptr_t clru, cr, cr_alt, cr_top, start_cr, actual_cr;
+ boolean_t is_bg, is_exiting;
+ boolean_t update_underway;
cache_que_heads_ptr_t cache_state;
- cw_set_element *cs, *cs_ptr, *cs_top, *first_cw_set, *nxt, *orig_cs;
+ cache_rec_ptr_t cr;
+ char *wcblocked_ptr;
gd_addr *gd_hdr;
- gd_region *reg, *reg_top, *save_gv_cur_region;
+ gd_region *reg, *reg_top, *save_gv_cur_region, *repl_reg = NULL;
+ gtm_uint64_t argarray[SECSHR_ACCOUNTING_MAX_ARGS];
+ int numargs;
+ jbuf_rsrv_struct_t *jrs;
jnl_buffer_ptr_t jbp;
- off_chain chain;
- sgm_info *si, *save_si;
- sgmnt_addrs *csa, *tmp_csa, *repl_csa;
- sgmnt_data_ptr_t csd;
node_local_ptr_t cnl;
sm_uc_ptr_t blk_ptr;
blk_hdr_ptr_t blk_hdr_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool, update_jnlpool = NULL;
jnlpool_ctl_ptr_t jpl;
pid_t pid;
- sm_uc_ptr_t bufstart;
- int4 bufindx; /* should be the same type as "csd->bt_buckets" */
- commit_type this_reg_commit_type; /* indicate the type of commit of a given region in a TP transaction */
- gv_namehead *gvtarget;
- srch_blk_status *t1;
- trans_num currtn;
- int4 n;
- snapshot_context_ptr_t lcl_ss_ctx;
- cache_rec_ptr_t snapshot_cr;
- uint4 blk_size;
- jbuf_rsrv_struct_t *jrs;
- seq_num strm_seqno;
+ sgm_info *si;
+ sgmnt_addrs *csa, *repl_csa;
+ sgmnt_data_ptr_t csd;
# ifdef DEBUG
- cache_rec_ptr_t *crArray;
- unsigned int crArrayIndex;
+ sgm_info *jnlpool_si;
+ sgmnt_addrs *jnlpool_csa;
# endif
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
save_gv_cur_region = gv_cur_region; /* save it for use at function end in case code in between changes this variable */
+ assert((NORMAL_TERMINATION == secshr_state) || (COMMIT_INCOMPLETE == secshr_state));
is_exiting = (NORMAL_TERMINATION == secshr_state);
- currtn = start_tn;
+ save_jnlpool = jnlpool;
+ update_underway = FALSE;
if (dollar_tlevel)
{ /* Determine update_underway for TP transaction. A similar check is done in t_commit_cleanup as well.
- * Regions are committed in the ftok order using "first_tp_si_by_ftok". Also crit is released on each region
- * as the commit completes. Take that into account while determining if update is underway.
+ * Regions are committed in the ftok order using "first_tp_si_by_ftok". Also crit is released on each
+ * region as the commit completes. Take that into account while determining if update is underway.
*/
for (si = first_tp_si_by_ftok; NULL != si; si = si->next_tp_si_by_ftok)
{
+ csa = si->tp_csa;
+ assert(NULL != csa);
+ if (NULL == csa->nl)
+ { /* Possible for example if "mur_close_files" was called in "mupip_exit_handler" (which does
+ * a "gds_rundown" of all open regions) BEFORE "secshr_db_clnup" gets called. In that case,
+ * even if "si" and "csa" are accessible, db shared memory is not and so we should not
+ * attempt to finish any commits that might seem unfinished in case this process got a SIG-15
+ * and handled it as part of "deferred_signal_handler" in "t_end"/"tp_tend".
+ */
+ continue;
+ }
+ assert(csa->regcnt);
+ if (NULL != si->first_cw_set)
+ {
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ {
+ assert(!update_jnlpool || (!csa->jnlpool || (update_jnlpool == csa->jnlpool)));
+# ifdef DEBUG
+ jnlpool_si = si;
+ jnlpool_csa = csa;
+# endif
+ jnlpool = csa->jnlpool;
+ }
+ if (!update_jnlpool && REPL_ALLOWED(csa))
+ update_jnlpool = jnlpool;
+ if ( T_UPDATE_UNDERWAY(csa))
+ {
+ update_underway = TRUE;
+ break;
+ }
+ }
if (UPDTRNS_TCOMMIT_STARTED_MASK & si->update_trans)
{ /* Two possibilities.
* (a) case of duplicate set not creating any cw-sets but updating db curr_tn++.
@@ -266,83 +252,109 @@ void secshr_db_clnup(enum secshr_db_state secshr_state)
* (in a potentially multi-region TP transaction).
* In either case, update is underway and the transaction cannot be rolled back.
*/
- tp_update_underway = TRUE;
update_underway = TRUE;
break;
}
- if (NULL != si->first_cw_set)
- {
- csa = si->tp_csa;
- assert(NULL != csa);
- if (T_UPDATE_UNDERWAY(csa))
- {
- tp_update_underway = TRUE;
- update_underway = TRUE;
- break;
- }
- }
}
- } else
+ if (!update_jnlpool)
+ update_jnlpool = jnlpool;
+ } else if ((NULL != save_gv_cur_region) && save_gv_cur_region->open && (NULL != cs_addrs))
{ /* Determine update_underway for non-TP transaction */
- if (NULL != cs_addrs)
- {
- assert(!(cs_addrs->now_crit && (UPDTRNS_TCOMMIT_STARTED_MASK & update_trans))
+ assert(!(cs_addrs->now_crit && (UPDTRNS_TCOMMIT_STARTED_MASK & update_trans))
|| T_UPDATE_UNDERWAY(cs_addrs));
- if (T_UPDATE_UNDERWAY(cs_addrs))
+ if (T_UPDATE_UNDERWAY(cs_addrs))
+ update_underway = TRUE;
+ update_jnlpool = (cs_addrs && cs_addrs->jnlpool) ? cs_addrs->jnlpool : jnlpool;
+ }
+ assert(is_exiting || update_underway);
+ if (update_underway)
+ { /* Now that we know we were in the midst of commit (non-TP or TP) when we encountered an error
+ * (i.e. "is_exiting" == FALSE) OR when we decided to exit (i.e. "is_exiting" == TRUE)
+ * finish the commit first. Need to go through regions in ftok order to avoid crit deadlocks.
+ */
+ repl_reg = update_jnlpool ? update_jnlpool->jnlpool_dummy_reg : NULL;
+ repl_csa = ((NULL != repl_reg) && repl_reg->open) ? REG2CSA(repl_reg) : NULL;
+ if (dollar_tlevel)
+ for (si = first_tp_si_by_ftok; NULL != si; si = si->next_tp_si_by_ftok)
+ secshr_finish_CMT08_to_CMT14(si->tp_csa, update_jnlpool); /* Roll forward steps CMT08 thru CMT14 */
+ else
+ {
+ csa = cs_addrs;
+ secshr_finish_CMT08_to_CMT14(csa, update_jnlpool); /* Roll forward steps CMT08 thru CMT14 */
+ }
+ if ((NULL != repl_csa) && repl_csa->now_crit)
+ secshr_rel_crit(repl_reg, IS_EXITING_FALSE, IS_REPL_REG_TRUE); /* Step CMT15 */
+ /* In case of DSE, csa->hold_onto_crit is TRUE and so it is possible the above "secshr_rel_crit"
+ * call did not release crit. Assert accordingly below.
+ */
+ assert((0 == have_crit(CRIT_HAVE_ANY_REG)) || dse_running);
+ if (dollar_tlevel)
+ {
+ for (si = first_tp_si_by_ftok; NULL != si; si = si->next_tp_si_by_ftok)
{
- non_tp_update_underway = TRUE; /* non-tp update was underway */
- update_underway = TRUE;
+ csa = si->tp_csa;
+ jrs = si->jbuf_rsrv_ptr;
+ if (NEED_TO_FINISH_JNL_PHASE2(jrs))
+ FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Roll forward CMT16 */
}
+ } else
+ {
+ jrs = TREF(nontp_jbuf_rsrv);
+ if (NEED_TO_FINISH_JNL_PHASE2(jrs))
+ FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Roll forward CMT16 */
}
+ if (NULL != repl_csa)
+ FINISH_JNL_PHASE2_IN_JNLPOOL_IF_NEEDED(TRUE, update_jnlpool); /* Roll forward CMT17 */
+ /* Roll forward Step CMT18 and CMT19 */
+ if (dollar_tlevel)
+ for (si = first_tp_si_by_ftok; NULL != si; si = si->next_tp_si_by_ftok)
+ secshr_finish_CMT18_to_CMT19(si->tp_csa); /* Roll forward Step CMT18 */
+ else
+ secshr_finish_CMT18_to_CMT19(csa); /* Roll forward Step CMT18 */
}
- /* Assert that if we had been called from t_commit_cleanup, we independently concluded that update is underway
- * (as otherwise t_commit_cleanup would not have called us)
- */
- assert((COMMIT_INCOMPLETE != secshr_state) || update_underway);
- for (gd_hdr = get_next_gdr(NULL); NULL != gd_hdr; gd_hdr = get_next_gdr(gd_hdr))
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
+ if (is_exiting)
{
- for (reg = gd_hdr->regions, reg_top = reg + gd_hdr->n_regions; reg < reg_top; reg++)
+ for (gd_hdr = get_next_gdr(NULL); NULL != gd_hdr; gd_hdr = get_next_gdr(gd_hdr))
{
- if (!reg->open || reg->was_open)
- continue;
- if (!IS_REG_BG_OR_MM(reg))
- continue;
- csa = REG2CSA(reg);
- if (NULL == csa)
- continue;
- assert((reg->read_only && !csa->read_write) || (!reg->read_only && csa->read_write));
- csd = csa->hdr;
- assert(NULL != csd);
- cnl = csa->nl;
- assert(NULL != cnl);
- is_bg = (csd->acc_meth == dba_bg);
- do_accounting = FALSE; /* used by SECSHR_ACCOUNTING macro */
- /* Do SECSHR_ACCOUNTING only if holding crit. This is so we avoid another process' normal termination call
- * to "secshr_db_clnup" from overwriting whatever important information we wrote. If we are in crit,
- * for the next process to overwrite us it needs to get crit which in turn will invoke wcs_recover
- * which in turn will send whatever we wrote (using SECSHR_ACCOUNTING) to the syslog).
- * Also cannot update csd if MM and read-only. take care of that too.
- */
- if (csa->now_crit && (csa->read_write || is_bg))
- { /* start accounting */
- cnl->secshr_ops_index = 0;
- do_accounting = TRUE; /* used by SECSHR_ACCOUNTING macro */
- }
- SECSHR_ACCOUNTING(do_accounting, 5); /* 5 is the number of arguments following including self */
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, process_id);
- SECSHR_ACCOUNTING(do_accounting, secshr_state);
- SECSHR_ACCOUNTING(do_accounting, csd->trans_hist.curr_tn);
- csa->ti = &csd->trans_hist; /* correct it in case broken */
- if (is_exiting)
- { /* If we hold any latches in the node_local area, release them. Note we do not check
+ for (reg = gd_hdr->regions, reg_top = reg + gd_hdr->n_regions; reg < reg_top; reg++)
+ {
+ if (!reg->open || reg->was_open)
+ continue;
+ if (!IS_REG_BG_OR_MM(reg))
+ continue;
+ csa = REG2CSA(reg);
+ if (NULL == csa)
+ continue;
+ assert((reg->read_only && !csa->read_write) || (!reg->read_only && csa->read_write));
+ SECSHR_SET_CSD_CNL_ISBG(csa, csd, cnl, is_bg); /* sets csd/cnl/is_bg */
+ numargs = 0;
+ if (csa->now_crit)
+ {
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_db_clnup);
+ SECSHR_ACCOUNTING(numargs, argarray, process_id);
+ SECSHR_ACCOUNTING(numargs, argarray, secshr_state);
+ SECSHR_ACCOUNTING(numargs, argarray, csd->trans_hist.curr_tn);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ }
+ /* If we hold any latches in the node_local area, release them. Note we do not check
* db_latch here because it is never used by the compare and swap logic but rather
* the aswp logic. Since it is only used for the 3 state cache record lock and
* separate recovery exists for it, we do not do anything with it here.
*/
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&cnl->wc_var_lock, is_exiting);
- assert(ABNORMAL_TERMINATION != secshr_state);
- /* Note: In case of "kill -9", cnl->wcs_timers & cnl->ref_cnt will stay uncleaned */
+ RELEASE_LATCH_IF_OWNER(&cnl->wc_var_lock);
+ /* Note: In case of "kill -9", cnl->in_wtstart, cnl->wcs_timers & cnl->ref_cnt will stay uncleaned.
+ * a) cnl->in_wtstart, "wcs_flu" will eventually set cnl->wc_blocked and force cache recovery
+ * which will clear it.
+ * b) cnl->wcs_timers decides if a new flush timer is started. If the 2 processes that have
+ * pending flush timers are killed abnormally, no new processes will start flush timers for
+ * the lifetime of the database shared memory. Need a recovery scheme for it.
+ * c) cnl->ref_cnt is mostly for debug purposes (to know an approximate # of processes attached
+ * to the database and so it is okay if it is not accurate.
+ * if it finds */
if ((csa->in_wtstart) && (0 < cnl->in_wtstart))
{
DECR_CNT(&cnl->in_wtstart, &cnl->wc_var_lock);
@@ -353,19 +365,11 @@ void secshr_db_clnup(enum secshr_db_state secshr_state)
csa->in_wtstart = FALSE; /* Let wcs_wtstart run for exit processing */
if (cnl->wcsflu_pid == process_id)
cnl->wcsflu_pid = 0;
- }
- set_wc_blocked = FALSE;
- if (is_bg)
- {
- assert(cnl->sec_size);
- cache_state = csa->acc_meth.bg.cache_state;
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&cache_state->cacheq_active.latch, is_exiting);
- start_cr = cache_state->cache_array + csd->bt_buckets;
- bufstart = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, start_cr->buffaddr);
- max_bts = csd->n_bts;
- cr_top = start_cr + max_bts;
- if (is_exiting)
+ if (is_bg)
{
+ assert(cnl->sec_size);
+ cache_state = csa->acc_meth.bg.cache_state;
+ RELEASE_LATCH_IF_OWNER(&cache_state->cacheq_active.latch);
# ifdef DEBUG
if (gtm_white_box_test_case_enabled && (reg == gd_hdr->regions)
&& (WBTEST_SIGTSTP_IN_T_QREAD == gtm_white_box_test_case_number))
@@ -377,7 +381,7 @@ void secshr_db_clnup(enum secshr_db_state secshr_state)
if (NULL != (cr = TREF(block_now_locked))) /* done by region to ensure access */
{ /* The following is potentially thread-specific rather than process-specific */
TREF(block_now_locked) = NULL;
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&cr->rip_latch, is_exiting);
+ RELEASE_LATCH_IF_OWNER(&cr->rip_latch);
if ((cr->r_epid == process_id) && (0 == cr->dirty) && (0 == cr->in_cw_set))
{ /* increment cycle for blk number changes (for tp_hist) */
cr->cycle++;
@@ -390,865 +394,28 @@ void secshr_db_clnup(enum secshr_db_state secshr_state)
}
}
}
- }
- first_cw_set = cs = NULL;
- /* If tp_update_underway has been determined to be TRUE, then we are guaranteed we have a well formed
- * ftok ordered linked list ("first_tp_si_by_ftok") so we can safely use this.
- */
- if (tp_update_underway)
- { /* This is constructed to deal with the issue of reg != si->gv_cur_region due to the possibility
- * of multiple global directories pointing to regions that resolve to the same physical file;
- * was_open prevents processing the segment more than once, so this code matches on the file
- * rather than the region to make sure that it gets processed at least once.
- */
- for (si = first_tp_si_by_ftok; NULL != si; si = si->next_tp_si_by_ftok)
+ assert(!T_UPDATE_UNDERWAY(csa));
+ if (csa->now_crit || csa->t_commit_crit)
{
- if (FILE_CNTL(si->gv_cur_region) == FILE_CNTL(reg))
- {
- cs = si->first_cw_set;
- TRAVERSE_TO_LATEST_CSE(cs);
- first_cw_set = cs;
- break;
- }
- }
- } else if (!dollar_tlevel && T_UPDATE_UNDERWAY(csa))
- { /* We have reached Step (CMT08). ROLL-FORWARD the commit unconditionally */
- if (0 != cw_set_depth)
- {
- first_cw_set = cs = cw_set;
- cs_top = cs + cw_set_depth;
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_db_clnup);
+ SECSHR_ACCOUNTING(numargs, argarray, csa->now_crit);
+ SECSHR_ACCOUNTING(numargs, argarray, csa->t_commit_crit);
+ SECSHR_ACCOUNTING(numargs, argarray, csd->trans_hist.early_tn);
+ SECSHR_ACCOUNTING(numargs, argarray, csd->trans_hist.curr_tn);
+ SECSHR_ACCOUNTING(numargs, argarray, dollar_tlevel);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
}
- /* else is the case where we had a duplicate set that did not update any cw-set */
- assert(!tp_update_underway);
- assert(non_tp_update_underway); /* should have already determined update is underway */
- /* This is a situation where we are in non-TP and have a region that we hold
- * crit in and are in the midst of commit but this region was not the current
- * region when we entered secshr_db_clnup. This is an out-of-design situation
- * that we want to catch.
+ /* The process is exiting. If any kills are in progress (bitmap freeup phase of kill), mark
+ * kill_in_prog as abandoned. Non-TP and TP maintain kill_in_prog information in different
+ * structures so access them appropriately. Note that even for a TP transaction, the bitmap
+ * freeup happens as a non-TP transaction so checking dollar_tlevel is not enough to determine
+ * if we are in TP or non-TP. first_sgm_info is guaranteed to be non-NULL in the case of a TP
+ * transaction that is temporarily running its bitmap freeup phase as a non-TP transaction.
+ * And for true non-TP transactions, first_sgm_info is guaranteed to be NULL. So we use this
+ * for the determination.
*/
- assertpro(non_tp_update_underway);
- non_tp_update_underway = TRUE; /* just in case */
- update_underway = TRUE; /* just in case */
- }
- assert(!tp_update_underway || (NULL == first_cw_set) || (NULL != si));
- /* It is possible that we were in the midst of a non-TP commit for this region at or past Step (CMT13)
- * but first_cw_set is NULL. This is a case of duplicate SET with zero cw_set_depth. In this case,
- * don't have any cw-set-elements to commit. The only thing remaining to do is Step (CMT14) through
- * Step (CMT17) which is done later in this function.
- */
- assert((FALSE == csa->t_commit_crit) || (T_COMMIT_CRIT_PHASE0 == csa->t_commit_crit)
- || (T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit) || (T_COMMIT_CRIT_PHASE2 == csa->t_commit_crit));
- assert((NULL == first_cw_set) || csa->now_crit || csa->t_commit_crit || tp_update_underway);
- do /* have a dummy loop to be able to use "break" for various codepaths below */
- {
- if (!csa->now_crit && !csa->t_commit_crit)
- break; /* Skip processing region in case of a multi-region TP transaction
- * where this region is already committed.
- */
- SECSHR_ACCOUNTING(do_accounting, 6);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, csa->now_crit);
- SECSHR_ACCOUNTING(do_accounting, csa->t_commit_crit);
- SECSHR_ACCOUNTING(do_accounting, csd->trans_hist.early_tn);
- SECSHR_ACCOUNTING(do_accounting, csd->trans_hist.curr_tn);
- assert(non_tp_update_underway || tp_update_underway || ((NULL == first_cw_set) && is_exiting));
- assert(!non_tp_update_underway || !tp_update_underway);
- assert((T_COMMIT_CRIT_PHASE2 == csa->t_commit_crit) || csa->now_crit);
- if (T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit)
- { /* in PHASE1 so hold crit AND have noted down valid value in csa->prev_free_blks */
- /* for normal termination we should not have been in the midst of commit */
- assert(!is_exiting || WBTEST_ENABLED(WBTEST_SLEEP_IN_WCS_WTSTART));
- assert(csa->now_crit);
- csd->trans_hist.free_blocks = csa->prev_free_blks;
- }
- SECSHR_ACCOUNTING(do_accounting, tp_update_underway ? 6 : 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)first_cw_set);
- SECSHR_ACCOUNTING(do_accounting, tp_update_underway);
- SECSHR_ACCOUNTING(do_accounting, non_tp_update_underway);
- if (!tp_update_underway)
- {
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs_top);
- SECSHR_ACCOUNTING(do_accounting, cw_set_depth);
- jrs = TREF(nontp_jbuf_rsrv);
- } else
- {
- SECSHR_ACCOUNTING(do_accounting, si->cw_set_depth);
- this_reg_commit_type = REG_COMMIT_UNSTARTED; /* assume GT.M did no commits in this region */
- jrs = si->jbuf_rsrv_ptr;
- /* Note that "this_reg_commit_type" is uninitialized if "tp_update_underway" is not TRUE
- * so should always be used within an "if (tp_update_underway)".
- */
- }
- if (NEED_TO_FINISH_JNL_PHASE2(jrs))
- FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Roll forward CMT16 */
- if (NULL == first_cw_set)
- { /* This is a duplicate set (update_trans is TRUE, but cw_set is NULL).
- * OR we hold crit and are exiting. There is nothing to commit to the db.
- * Now that we finished jnl record writing, break.
- */
- break;
- }
- if (is_bg)
- {
- clru = (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, cnl->cur_lru_cache_rec_off);
- lcnt = 0;
- }
- /* Determine transaction number to use for the gvcst_*_build functions.
- * If not phase2, then we have crit, so it is the same as the current database transaction number.
- * If phase2, then we don't have crit, so use value stored in "start_tn" or "si->start_tn".
- */
- if (T_COMMIT_CRIT_PHASE2 != csa->t_commit_crit)
- {
- currtn = csd->trans_hist.curr_tn;
- if (dollar_tlevel && (T_COMMIT_CRIT_PHASE0 == csa->t_commit_crit))
- { /* This region is part of a TP transaction where another region got an error
- * inside PHASE1 but this region is still in PHASE0 (since this region is
- * later in the "first_tp_si_by_ftok" list order). Finish CMT08 & CMT09
- * stages for this region.
- */
- cnl->update_underway_tn = currtn; /* Roll forward CMT08 */
- /* Note csa->t_commit_crit = T_COMMIT_CRIT_PHASE1 is also set in CMT08
- * but we do not do that here as that confuses code below and is anyways
- * a process-private flag that is not needed otherwise below.
- */
- if (jnl_fence_ctl.replication && REPL_ALLOWED(csa))
- { /* Indication that this is an update to a replicated region
- * that bumps the journal seqno. So finish CMT09.
- * Note: In "tp_tend", the variable "supplementary" is TRUE if
- * "jnl_fence_ctl.strm_seqno" is non-zero. We use that here since
- * the local variable "supplementary" is not available here.
- */
- strm_seqno = GET_STRM_SEQ60(jnl_fence_ctl.strm_seqno);
-# ifdef DEBUG
- assert(!jnl_fence_ctl.strm_seqno
- || ((INVALID_SUPPL_STRM != strm_index)
- && (GET_STRM_INDEX(jnl_fence_ctl.strm_seqno)
- == strm_index)));
- assert(jnlpool.jnlpool_dummy_reg->open);
- repl_csa = REG2CSA(jnlpool.jnlpool_dummy_reg);
- assert(repl_csa->now_crit);
- /* see jnlpool_init() for relationship between critical and jpl */
- jpl = (jnlpool_ctl_ptr_t)((sm_uc_ptr_t)repl_csa->critical
- - JNLPOOL_CTL_SIZE);
- assert(jpl->jnl_seqno == (jnl_fence_ctl.token + 1));
- assert(!jnl_fence_ctl.strm_seqno
- || (jpl->strm_seqno[strm_index] == (strm_seqno + 1)));
-# endif
- SET_REG_SEQNO(csa, jnl_fence_ctl.token + 1, jnl_fence_ctl.strm_seqno, \
- strm_index, strm_seqno + 1, SKIP_ASSERT_FALSE); /* Step CMT09 */
- }
- }
- } else
- {
- if (tp_update_underway) /* otherwise currtn initialized above from start_tn */
- currtn = si->start_tn;
- assert(currtn < csd->trans_hist.curr_tn);
- }
- blk_size = csd->blk_size;
- for ( ; (tp_update_underway && (NULL != cs)) || (!tp_update_underway && (cs < cs_top));
- cs = tp_update_underway ? orig_cs->next_cw_set : (cs + 1))
- {
- donot_reset_data_invalid = FALSE;
- if (tp_update_underway)
- {
- orig_cs = cs;
- TRAVERSE_TO_LATEST_CSE(cs);
- }
- if (gds_t_committed < cs->mode)
- {
- assert(n_gds_t_op != cs->mode);
- if (n_gds_t_op > cs->mode)
- { /* Currently there are only three possibilities and each is in NON-TP.
- * In each case, no need to do any block update so simulate commit.
- */
- assert(!tp_update_underway);
- assert((gds_t_write_root == cs->mode) || (gds_t_busy2free == cs->mode)
- || (gds_t_recycled2free == cs->mode));
- /* Check if BG AND gds_t_busy2free and if so UNPIN corresponding
- * cache-record. This needs to be done only if we hold crit as otherwise
- * it means we have already done it in t_end. But to do this we need to
- * pass the global variable array "cr_array" from GTM to GTMSECSHR which
- * is better avoided. Since anyways we have crit at this point, we are
- * going to set wc_blocked later which is going to trigger cache recovery
- * that is going to unpin all the cache-records so we don't take the
- * trouble to do it here.
- */
- } else
- { /* Currently there are only two possibilities and both are in TP.
- * In either case, need to simulate what tp_tend would have done which
- * is to build a private copy right now if this is the first phase of
- * KILL (i.e. we hold crit) as this could be needed in the 2nd phase
- * of KILL.
- */
- assert(tp_update_underway);
- assert((kill_t_write == cs->mode) || (kill_t_create == cs->mode));
- if (csa->now_crit && !cs->done)
- {
- /* Initialize cs->new_buff to non-NULL since sec_shr_blk_build
- * expects this.
- */
- if (NULL == cs->new_buff)
- cs->new_buff = (unsigned char *)
- get_new_free_element(si->new_buff_list);
- assert(NULL != cs->new_buff);
- blk_ptr = (sm_uc_ptr_t)cs->new_buff;
- if (FALSE == sec_shr_blk_build(csa, csd, is_bg, cs, blk_ptr,
- currtn))
- {
- SECSHR_ACCOUNTING(do_accounting, 10);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->level);
- SECSHR_ACCOUNTING(do_accounting, cs->done);
- SECSHR_ACCOUNTING(do_accounting, cs->forward_process);
- SECSHR_ACCOUNTING(do_accounting, cs->first_copy);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs->upd_addr);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs->new_buff);
- assert(FALSE);
- continue;
- } else if (cs->ins_off != 0)
- {
- if ((cs->ins_off
- > ((blk_hdr *)blk_ptr)->bsiz - SIZEOF(block_id))
- || (cs->ins_off
- < (SIZEOF(blk_hdr) + SIZEOF(rec_hdr))))
- {
- SECSHR_ACCOUNTING(do_accounting, 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->index);
- SECSHR_ACCOUNTING(do_accounting, cs->ins_off);
- SECSHR_ACCOUNTING(do_accounting, \
- ((blk_hdr *)blk_ptr)->bsiz);
- assert(FALSE);
- continue;
- }
- if (cs->first_off == 0)
- cs->first_off = cs->ins_off;
- chain_ptr = blk_ptr + cs->ins_off;
- chain.flag = 1;
- /* note: currently only assert check of cs->index */
- assert(tp_update_underway || (0 <= (short)cs->index));
- assert(tp_update_underway
- || (&first_cw_set[cs->index] < cs));
- chain.cw_index = cs->index;
- chain.next_off = cs->next_off;
- GET_LONGP(chain_ptr, &chain);
- cs->ins_off = cs->next_off = 0;
- }
- cs->done = TRUE;
- assert(NULL != cs->blk_target);
- CERT_BLK_IF_NEEDED(certify_all_blocks, reg,
- cs, cs->new_buff, ((gv_namehead *)NULL));
- }
- }
- cs->old_mode = (int4)cs->mode;
- assert(0 < cs->old_mode);
- cs->mode = gds_t_committed;
- continue;
- }
- old_mode = cs->old_mode;
- if (gds_t_committed == cs->mode)
- { /* already processed */
- assert(0 < old_mode);
- if (T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit)
- {
- assert(csa->now_crit);
- csd->trans_hist.free_blocks -= cs->reference_cnt;
- }
- if (tp_update_underway)
- { /* We have seen at least one already-committed cse. Assume GT.M has
- * committed ALL cses if this is the first one we are seeing. This
- * will be later overridden if we see an uncommitted cse in this region.
- * If we have already decided that the region is only partially committed,
- * do not change that. It is possible to see uncommitted cses followed by
- * committed cses in case of an error during phase2 because bitmaps
- * (later cses) are committed in phase1 while the rest (early cses)
- * are completely committed only in phase2.
- */
- if (REG_COMMIT_UNSTARTED == this_reg_commit_type)
- this_reg_commit_type = REG_COMMIT_COMPLETE;
- }
- cr = cs->cr;
- assert(!dollar_tlevel || (gds_t_write_root != old_mode));
- assert(gds_t_committed != old_mode);
- if (gds_t_committed > old_mode)
- assert(process_id != cr->in_tend);
- else
- { /* For the kill_t_* case, cs->cr will be NULL as bg_update was not invoked
- * and the cw-set-elements were memset to 0 in TP. But for gds_t_write_root
- * and gds_t_busy2free, they are non-TP ONLY modes and cses are not
- * initialized so can't check for NULL cr. Thankfully "n_gds_t_op"
- * demarcates the boundaries between non-TP only and TP only modes.
- * So use that.
- */
- assert((n_gds_t_op > old_mode) || (NULL == cr));
- }
- continue;
- }
- /* Since we are going to build blocks at this point, unconditionally set wc_blocked
- * (after finishing commits) to trigger wcs_recover even though we might not be
- * holding crit at this point.
- */
- set_wc_blocked = TRUE;
- /* for normal termination we should not have been in the midst of commit */
- assert(!is_exiting || WBTEST_ENABLED(WBTEST_SLEEP_IN_WCS_WTSTART));
- if (tp_update_underway)
- { /* Since the current cse has not been committed, this is a partial
- * GT.M commit in this region even if we have already seen committed cses.
- */
- this_reg_commit_type = REG_COMMIT_PARTIAL;
- }
- if (is_bg)
- {
- assert((T_COMMIT_CRIT_PHASE2 != csa->t_commit_crit) || (0 > old_mode));
- if (0 <= old_mode)
- { /* We did not yet finish phase1 of commit for this cs which means we
- * hold crit on this region, so have to find out a free cache-record
- * we can dump our updates onto.
- */
- for ( ; lcnt++ < max_bts; )
- { /* find any available cr */
- if (++clru >= cr_top)
- clru = start_cr;
- assert(!clru->stopped);
- if (!clru->stopped && (0 == clru->dirty)
- && (0 == clru->in_cw_set)
- && (!clru->in_tend)
- && (-1 == clru->read_in_progress))
- break;
- }
- if (lcnt >= max_bts)
- { /* Did not find space in global buffers to finish commit */
- SECSHR_ACCOUNTING(do_accounting, 9);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->tn);
- SECSHR_ACCOUNTING(do_accounting, cs->level);
- SECSHR_ACCOUNTING(do_accounting, cs->done);
- SECSHR_ACCOUNTING(do_accounting, cs->forward_process);
- SECSHR_ACCOUNTING(do_accounting, cs->first_copy);
- assert(FALSE);
- continue;
- }
- cr = clru;
- cr->cycle++; /* increment cycle for blk number changes (for tp_hist) */
- assert(cs->blk < csd->trans_hist.total_blks);
- cr->blk = cs->blk;
- assert(CR_BLKEMPTY != cr->blk);
- cr->jnl_addr = cs->jnl_freeaddr;
- assert(!cr->twin);
- cr->stopped = process_id;
- /* Keep cs->cr and t1->cr uptodate to ensure clue will be accurate */
- cs->cr = cr;
- cs->cycle = cr->cycle;
- if (!IS_BITMAP_BLK(cs->blk))
- { /* Not a bitmap block, update clue history to reflect new cr */
- assert((0 <= cs->level) && (MAX_BT_DEPTH > cs->level));
- gvtarget = cs->blk_target;
- assert((MAX_BT_DEPTH + 1) == ARRAYSIZE(gvtarget->hist.h));
- if ((0 <= cs->level) && (MAX_BT_DEPTH > cs->level)
- && (NULL != gvtarget)
- && (0 != gvtarget->clue.end))
- {
- t1 = &gvtarget->hist.h[cs->level];
- if (t1->blk_num == cs->blk)
- {
- t1->cr = cr;
- t1->cycle = cs->cycle;
- t1->buffaddr = (sm_uc_ptr_t)
- GDS_ANY_REL2ABS(csa, cr->buffaddr);
- }
- }
- }
- } else
- { /* "old_mode < 0" implies we are done PHASE1 of the commit for this cs
- * and have already picked out a cr for the commit but did not finish
- * phase2 yet. Use the picked out "cr" and finish phase2.
- */
- cr = cs->cr;
- assert(process_id == cr->in_tend);
- assert(process_id == cr->in_cw_set);
- assert(cr->blk == cs->cr->blk);
- if (cr->data_invalid)
- { /* Buffer is already in middle of update. Since blk builds are
- * not redoable, db is in danger whether or not we redo the build.
- * Since, skipping the build is guaranteed to give us integrity
- * errors, we redo the build hoping it will have at least a 50%
- * chance of resulting in a clean block. Make sure data_invalid
- * flag is set until the next cache-recovery (wcs_recover will
- * send a DBDANGER syslog message for this block to alert of
- * potential database damage) by setting donot_reset_data_invalid.
- */
- SECSHR_ACCOUNTING(do_accounting, 6);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cr);
- SECSHR_ACCOUNTING(do_accounting, cr->blk);
- SECSHR_ACCOUNTING(do_accounting, cr->data_invalid);
- assert(FALSE);
- donot_reset_data_invalid = TRUE;
- }
- }
- /* Check if online backup is in progress and if there is a before-image to write.
- * If so need to store link to it so wcs_recover can back it up later. Cannot
- * rely on precomputed value csa->backup_in_prog since it is not initialized
- * if (cw_depth == 0) (see t_end.c). Hence using cnl->nbb explicitly in check.
- * However, for snapshots we can rely on csa as it is computed under
- * if (update_trans). Use cs->blk_prior_state's free status to ensure that FREE
- * blocks are not back'ed up either by secshr_db_clnup or wcs_recover.
- */
- if ((SNAPSHOTS_IN_PROG(csa) || (BACKUP_NOT_IN_PROGRESS != cnl->nbb))
- && (NULL != cs->old_block))
- {
- /* If online backup is concurrently running, backup the block here */
- blk_hdr_ptr = (blk_hdr_ptr_t)cs->old_block;
- ASSERT_IS_WITHIN_SHM_BOUNDS((sm_uc_ptr_t)blk_hdr_ptr, csa);
- bufindx = ((sm_uc_ptr_t)blk_hdr_ptr - bufstart) / blk_size;
- assert(0 <= bufindx);
- assert(bufindx < csd->n_bts);
- cr_alt = &start_cr[bufindx];
- assert(!cr->stopped || (cr != cr_alt));
- /* The following check is similar to the one in BG_BACKUP_BLOCK */
- if (!WAS_FREE(cs->blk_prior_state) && (cr_alt->blk >= cnl->nbb)
- && (0 == csa->shmpool_buffer->failed)
- && (blk_hdr_ptr->tn < csa->shmpool_buffer->backup_tn)
- && (blk_hdr_ptr->tn >= csa->shmpool_buffer->inc_backup_tn))
- {
- assert(cr->stopped || (cr == cr_alt));
- backup_block(csa, cr_alt->blk, cr_alt, NULL);
- /* No need for us to flush the backup buffer.
- * MUPIP BACKUP will anyways flush it at the end.
- */
- }
- if (SNAPSHOTS_IN_PROG(csa))
- {
- lcl_ss_ctx = SS_CTX_CAST(csa->ss_ctx);
- snapshot_cr = cr_alt;
- if (snapshot_cr->blk < lcl_ss_ctx->total_blks)
- WRITE_SNAPSHOT_BLOCK(csa, snapshot_cr, NULL,
- snapshot_cr->blk, lcl_ss_ctx);
- }
- }
- if (T_COMMIT_CRIT_PHASE2 != csa->t_commit_crit)
- { /* Adjust blks_to_upgrd counter if not already done in phase1. The value of
- * cs->old_mode if negative implies phase1 is complete on this cse so we
- * don't need to do this adjustment again. If not we do the adjustment.
- */
- assert((0 <= cs->old_mode) || (cs->old_mode == -cs->mode));
- if (0 <= cs->old_mode)
- { /* the following code is very similar to that in bg_update */
- if (gds_t_acquired == cs->mode)
- {
- if (GDSV4 == csd->desired_db_format)
- INCR_BLKS_TO_UPGRD(csa, csd, 1);
- } else
- {
-# ifdef DEBUG
- /* secshr_db_clnup relies on the fact that cs->ondsk_blkver
- * accurately reflects the on-disk block version of the
- * block and therefore can be used to set cr->ondsk_blkver.
- * Confirm this by checking that if a cr exists for this
- * block, then that cr's ondsk_blkver matches with the cs.
- * db_csh_get uses the global variable cs_addrs to determine
- * the region. So make it uptodate temporarily holding its
- * value in the local variable tmp_csa.
- */
- tmp_csa = cs_addrs; /* save cs_addrs in local */
- cs_addrs = csa; /* set cs_addrs for db_csh_get */
- actual_cr = db_csh_get(cs->blk);
- cs_addrs = tmp_csa; /* restore cs_addrs */
- /* actual_cr can be NULL if the block is NOT in the cache.
- * It can be CR_NOTVALID if the cache record originally
- * containing this block got reused for a different block
- * (i.e. cr->stopped = non-zero) as part of secshr_db_clnup.
- */
- assert((NULL == actual_cr)
- || ((cache_rec_ptr_t)CR_NOTVALID == actual_cr)
- || (cs->ondsk_blkver == actual_cr->ondsk_blkver));
-# endif
- cr->ondsk_blkver = cs->ondsk_blkver;
- if (cr->ondsk_blkver != csd->desired_db_format)
- {
- if (GDSV4 == csd->desired_db_format)
- {
- if (gds_t_write_recycled != cs->mode)
- INCR_BLKS_TO_UPGRD(csa, csd, 1);
- } else
- {
- if (gds_t_write_recycled != cs->mode)
- DECR_BLKS_TO_UPGRD(csa, csd, 1);
- }
- }
- }
- }
- }
- /* Before resetting cr->ondsk_blkver, ensure db_format in file header did not
- * change in between phase1 (inside of crit) and phase2 (outside of crit).
- * This is needed to ensure the correctness of the blks_to_upgrd counter.
- */
- assert(currtn > csd->desired_db_format_tn);
- cr->ondsk_blkver = csd->desired_db_format;
- /* else we are in phase2 and all blks_to_upgrd manipulation is already done */
- blk_ptr = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr);
- } else
- { /* access method is MM */
- blk_ptr = MM_BASE_ADDR(csa) + (off_t)blk_size * cs->blk;
- }
- /* The following block of code rolls forward Step (CMT10) and/or Step (CMT18) */
- if (cs->mode == gds_t_writemap)
- {
- memmove(blk_ptr, cs->old_block, blk_size);
- if (FALSE == sec_shr_map_build(csa, (uint4*)cs->upd_addr, blk_ptr, cs, currtn))
- {
- SECSHR_ACCOUNTING(do_accounting, 11);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->tn);
- SECSHR_ACCOUNTING(do_accounting, cs->level);
- SECSHR_ACCOUNTING(do_accounting, cs->done);
- SECSHR_ACCOUNTING(do_accounting, cs->forward_process);
- SECSHR_ACCOUNTING(do_accounting, cs->first_copy);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs->upd_addr);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)blk_ptr);
- assert(FALSE);
- continue;
- }
- } else
- {
- if (!tp_update_underway)
- {
- if (FALSE == sec_shr_blk_build(csa, csd, is_bg, cs, blk_ptr, currtn))
- {
- SECSHR_ACCOUNTING(do_accounting, 10);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->level);
- SECSHR_ACCOUNTING(do_accounting, cs->done);
- SECSHR_ACCOUNTING(do_accounting, cs->forward_process);
- SECSHR_ACCOUNTING(do_accounting, cs->first_copy);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs->upd_addr);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)blk_ptr);
- assert(FALSE);
- continue;
- } else if (cs->ins_off)
- {
- if ((cs->ins_off >
- ((blk_hdr *)blk_ptr)->bsiz - SIZEOF(block_id))
- || (cs->ins_off < (SIZEOF(blk_hdr)
- + SIZEOF(rec_hdr)))
- || (0 > (short)cs->index)
- || ((cs - cw_set) <= cs->index))
- {
- SECSHR_ACCOUNTING(do_accounting, 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->index);
- SECSHR_ACCOUNTING(do_accounting, cs->ins_off);
- SECSHR_ACCOUNTING(do_accounting, \
- ((blk_hdr *)blk_ptr)->bsiz);
- assert(FALSE);
- continue;
- }
- PUT_LONG((blk_ptr + cs->ins_off),
- ((cw_set_element *)(cw_set + cs->index))->blk);
- if (((nxt = cs + 1) < cs_top)
- && (gds_t_write_root == nxt->mode))
- {
- if ((nxt->ins_off >
- ((blk_hdr *)blk_ptr)->bsiz - SIZEOF(block_id))
- || (nxt->ins_off < (SIZEOF(blk_hdr)
- + SIZEOF(rec_hdr)))
- || (0 > (short)nxt->index)
- || ((cs - cw_set) <= nxt->index))
- {
- SECSHR_ACCOUNTING(do_accounting, 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)nxt);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, nxt->index);
- SECSHR_ACCOUNTING(do_accounting, nxt->ins_off);
- SECSHR_ACCOUNTING(do_accounting,
- ((blk_hdr *)blk_ptr)->bsiz);
- assert(FALSE);
- continue;
- }
- PUT_LONG((blk_ptr + nxt->ins_off),
- ((cw_set_element *)
- (cw_set + nxt->index))->blk);
- }
- }
- } else
- { /* TP */
- if (cs->done == 0)
- {
- if (FALSE == sec_shr_blk_build(csa, csd, is_bg, cs, blk_ptr,
- currtn))
- {
- SECSHR_ACCOUNTING(do_accounting, 10);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->level);
- SECSHR_ACCOUNTING(do_accounting, cs->done);
- SECSHR_ACCOUNTING(do_accounting, cs->forward_process);
- SECSHR_ACCOUNTING(do_accounting, cs->first_copy);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs->upd_addr);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)blk_ptr);
- assert(FALSE);
- continue;
- }
- if (cs->ins_off != 0)
- {
- if ((cs->ins_off
- > ((blk_hdr *)blk_ptr)->bsiz
- - SIZEOF(block_id))
- || (cs->ins_off
- < (SIZEOF(blk_hdr) + SIZEOF(rec_hdr))))
- {
- SECSHR_ACCOUNTING(do_accounting, 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->index);
- SECSHR_ACCOUNTING(do_accounting, cs->ins_off);
- SECSHR_ACCOUNTING(do_accounting, \
- ((blk_hdr *)blk_ptr)->bsiz);
- assert(FALSE);
- continue;
- }
- if (cs->first_off == 0)
- cs->first_off = cs->ins_off;
- chain_ptr = blk_ptr + cs->ins_off;
- chain.flag = 1;
- chain.cw_index = cs->index;
- /* note: currently no verification of cs->index */
- chain.next_off = cs->next_off;
- GET_LONGP(chain_ptr, &chain);
- cs->ins_off = cs->next_off = 0;
- }
- } else
- {
- memmove(blk_ptr, cs->new_buff,
- ((blk_hdr *)cs->new_buff)->bsiz);
- ((blk_hdr *)blk_ptr)->tn = currtn;
- }
- if (cs->first_off)
- {
- for (chain_ptr = blk_ptr + cs->first_off; ;
- chain_ptr += chain.next_off)
- {
- GET_LONGP(&chain, chain_ptr);
- if ((1 == chain.flag)
- && ((chain_ptr - blk_ptr + SIZEOF(block_id))
- <= ((blk_hdr *)blk_ptr)->bsiz)
- && (chain.cw_index < si->cw_set_depth))
- {
- save_si = sgm_info_ptr;
- sgm_info_ptr = si; /* needed by "tp_get_cw" */
- tp_get_cw(first_cw_set, chain.cw_index, &cs_ptr);
- sgm_info_ptr = save_si;
- PUT_LONG(chain_ptr, cs_ptr->blk);
- if (0 == chain.next_off)
- break;
- } else
- {
- SECSHR_ACCOUNTING(do_accounting, 11);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cs);
- SECSHR_ACCOUNTING(do_accounting, cs->blk);
- SECSHR_ACCOUNTING(do_accounting, cs->index);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)blk_ptr);
- SECSHR_ACCOUNTING(do_accounting, \
- (INTPTR_T)chain_ptr);
- SECSHR_ACCOUNTING(do_accounting, chain.next_off);
- SECSHR_ACCOUNTING(do_accounting, chain.cw_index);
- SECSHR_ACCOUNTING(do_accounting, si->cw_set_depth);
- SECSHR_ACCOUNTING(do_accounting, \
- ((blk_hdr *)blk_ptr)->bsiz);
- assert(FALSE);
- break;
- }
- }
- }
- } /* TP */
- } /* non-map processing */
- if (0 > cs->reference_cnt)
- { /* blocks were freed up */
- assert(non_tp_update_underway);
- assert(((inctn_bmp_mark_free_gtm == inctn_opcode)
- || (inctn_bmp_mark_free_mu_reorg == inctn_opcode)
- || (inctn_blkmarkfree == inctn_opcode)
- || dse_running));
- /* Check if we are freeing a V4 format block and if so decrement the
- * blks_to_upgrd counter. Do not do this in case MUPIP REORG UPGRADE/DOWNGRADE
- * is marking a recycled block as free (inctn_opcode is inctn_blkmarkfree).
- */
- if (((inctn_bmp_mark_free_gtm == inctn_opcode)
- || (inctn_bmp_mark_free_mu_reorg == inctn_opcode))
- && (0 != inctn_detail.blknum_struct.blknum))
- DECR_BLKS_TO_UPGRD(csa, csd, 1);
- }
- assert(!cs->reference_cnt || (T_COMMIT_CRIT_PHASE2 != csa->t_commit_crit));
- if (csa->now_crit)
- { /* Even though we know cs->reference_cnt is guaranteed to be 0 if we are in
- * phase2 of commit (see above assert), we still do not want to be touching
- * free_blocks in the file header outside of crit as it could potentially
- * result in an incorrect value of the free_blocks counter. This is because
- * in between the time we note down the current value of free_blocks on the
- * right hand side of the below expression and assign the same value to the
- * left side, it is possible that a concurrent process holding crit could
- * have updated the free_blocks counter. In that case, our update would
- * result in incorrect values. Hence don't touch this field if phase2.
- */
- csd->trans_hist.free_blocks -= cs->reference_cnt;
- }
- cs->old_mode = (int4)cs->mode;
- assert(0 < cs->old_mode);
- cs->mode = gds_t_committed; /* rolls forward Step (CMT18) */
- /* Do not do a cert_blk of bitmap here since it could give a DBBMMSTR error. The
- * bitmap block build is COMPLETE only in wcs_recover so do the cert_blk there.
- * Assert that the bitmap buffer will indeed go through cert_blk there.
- */
- CERT_BLK_IF_NEEDED(certify_all_blocks, reg, cs, blk_ptr, ((gv_namehead *)NULL));
- if (is_bg && (process_id == cr->in_tend))
- { /* Reset cr->in_tend now that cr is uptodate.
- * Take this opportunity to reset data_invalid, in_cw_set and the write interlock
- * as well thereby simulating exactly what bg_update_phase2 would have done.
- */
- if (!donot_reset_data_invalid)
- cr->data_invalid = 0;
- /* Release write interlock. The following code is very similar to that
- * at the end of the function "bg_update_phase2".
- */
- /* Avoid using gv_cur_region in the LOCK_HIST macro that is
- * used by the RELEASE_BUFF_UPDATE_LOCK macro by setting locknl
- */
- locknl = cnl;
- if (!cr->tn)
- {
- cr->jnl_addr = cs->jnl_freeaddr;
- assert(LATCH_SET == WRITE_LATCH_VAL(cr));
- /* cache-record was not dirty BEFORE this update.
- * insert this in the active queue.
- */
- n = INSQTI((que_ent_ptr_t)&cr->state_que,
- (que_head_ptr_t)&cache_state->cacheq_active);
- if (INTERLOCK_FAIL == n)
- {
- SECSHR_ACCOUNTING(do_accounting, 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cr);
- SECSHR_ACCOUNTING(do_accounting, cr->blk);
- SECSHR_ACCOUNTING(do_accounting, n);
- SECSHR_ACCOUNTING(do_accounting, cache_state->cacheq_active.fl);
- SECSHR_ACCOUNTING(do_accounting, cache_state->cacheq_active.bl);
- assert(FALSE);
- }
- ADD_ENT_TO_ACTIVE_QUE_CNT(cnl);
- }
- RELEASE_BUFF_UPDATE_LOCK(cr, n, &cnl->db_latch);
- /* "n" holds the pre-release value so check that we did hold the
- * lock before releasing it above.
- */
- assert(LATCH_CONFLICT >= n);
- assert(LATCH_CLEAR < n);
- if (WRITER_BLOCKED_BY_PROC(n))
- {
- n = INSQHI((que_ent_ptr_t)&cr->state_que,
- (que_head_ptr_t)&cache_state->cacheq_active);
- if (INTERLOCK_FAIL == n)
- {
- SECSHR_ACCOUNTING(do_accounting, 7);
- SECSHR_ACCOUNTING(do_accounting, __LINE__);
- SECSHR_ACCOUNTING(do_accounting, (INTPTR_T)cr);
- SECSHR_ACCOUNTING(do_accounting, cr->blk);
- SECSHR_ACCOUNTING(do_accounting, n);
- SECSHR_ACCOUNTING(do_accounting, cache_state->cacheq_active.fl);
- SECSHR_ACCOUNTING(do_accounting, cache_state->cacheq_active.bl);
- assert(FALSE);
- }
- }
- RESET_CR_IN_TEND_AFTER_PHASE2_COMMIT(cr); /* resets cr->in_tend & cr->in_cw_set
- * (for older twin too if needed).
- */
- }
- } /* for all cw_set entries */
-# ifdef DEBUG
- /* If we still hold crit, then we got a commit-time error in bg_update_phase1 which means we
- * would have pinned crs in t_end/tp_tend but would not have unpinned those here but instead
- * dumped the commits onto crs with cr->stopped a non-zero value. Accessing the original pinned
- * cr requires us to have access to the histories which are available in case of TP (through si)
- * but not easily in case of non-tp since those are passed as a parameter to t_end (and not
- * otherwise available through a global variable). Since we hold crit and we are going to anyways
- * set cnl->wc_blocked to TRUE a little later, the next process to get crit will run "wcs_recover"
- * which will take care of clearing the "in_cw_set". So no need to do the unpin here in that case.
- * On the other hand, if we don't have crit, we are done with phase1 of commit which means
- * all commits would go to crs that we have access to (through cs->cr) and so we should be able
- * to unpin exactly all of them. So assert accordingly below.
- */
- if (!csa->now_crit)
- {
- if (tp_update_underway)
- {
- crArray = si->cr_array;
- crArrayIndex = si->cr_array_index;
- } else
- {
- crArray = cr_array;
- crArrayIndex = cr_array_index;
- }
- ASSERT_CR_ARRAY_IS_UNPINNED(csd, crArray, crArrayIndex);
- }
-# endif
- /* Check if kill_in_prog flag in file header has to be incremented. */
- if (tp_update_underway)
- { /* TP : Do this only if GT.M has not already completed the commit on this region. */
- assert((REG_COMMIT_COMPLETE == this_reg_commit_type)
- || (REG_COMMIT_PARTIAL == this_reg_commit_type)
- || (REG_COMMIT_UNSTARTED == this_reg_commit_type));
- si->cr_array_index = 0; /* Take this opportunity to reset si->cr_array_index */
- if (REG_COMMIT_COMPLETE != this_reg_commit_type)
- {
- if ((NULL != si->kill_set_head) && (NULL == si->kip_csa))
- INCR_KIP(csd, csa, si->kip_csa);
- } else
- assert((NULL == si->kill_set_head) || (NULL != si->kip_csa));
- assert((NULL == si->kill_set_head) || (NULL != si->kip_csa));
- } else
- { /* Non-TP. Check need_kip_incr and value pointed to by kip_csa. */
- assert(non_tp_update_underway);
- cr_array_index = 0; /* Take this opportunity to reset cr_array_index */
- /* Note that kip_csa could be NULL if we are in the
- * 1st phase of the M-kill and NON NULL if we are in the 2nd phase of the kill.
- * Only if it is NULL, should we increment the kill_in_prog flag.
- */
- if (need_kip_incr && (NULL == kip_csa))
- {
- INCR_KIP(csd, csa, kip_csa);
- need_kip_incr = FALSE;
- }
- if (MUSWP_INCR_ROOT_CYCLE == TREF(in_mu_swap_root_state))
- cnl->root_search_cycle++;
- }
- } while (FALSE);
- /* If the process is about to exit AND any kills are in progress (bitmap freeup phase of kill), mark
- * kill_in_prog as abandoned. Non-TP and TP maintain kill_in_prog information in different structures
- * so access them appropriately. Note that even for a TP transaction, the bitmap freeup happens as a
- * non-TP transaction so checking dollar_tlevel is not enough to determine if we are in TP or non-TP.
- * Thankfully first_sgm_info is guaranteed to be non-NULL in the case of a TP transaction that is
- * temporarily running its bitmap freeup phase as a non-TP transaction. And for true non-TP
- * transactions, first_sgm_info is guaranteed to be NULL. So we use this for the determination.
- */
- if (is_exiting)
- {
if (NULL != first_sgm_info)
{
si = csa->sgm_info_ptr;
@@ -1258,7 +425,7 @@ void secshr_db_clnup(enum secshr_db_state secshr_state)
/* Since the kill process cannot be completed, we need to decerement KIP count
* and increment the abandoned_kills count.
*/
- if ((NULL != si->kill_set_head) && (NULL != si->kip_csa))
+ if (si && (NULL != si->kill_set_head) && (NULL != si->kip_csa))
{
assert(csa == si->kip_csa);
DECR_KIP(csd, csa, si->kip_csa);
@@ -1274,166 +441,116 @@ void secshr_db_clnup(enum secshr_db_state secshr_state)
INCR_ABANDONED_KILLS(csd, csa);
}
}
- }
- if (JNL_ENABLED(csd) && is_exiting)
- {
- jbp = csa->jnl->jnl_buff;
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&jbp->fsync_in_prog_latch, is_exiting);
- if (jbp->io_in_prog_latch.u.parts.latch_pid == process_id)
- RELEASE_SWAPLOCK(&jbp->io_in_prog_latch);
- if (jbp->blocked == process_id)
+ if (JNL_ENABLED(csd))
{
- assert(csa->now_crit);
- jbp->blocked = 0;
+ jbp = csa->jnl->jnl_buff;
+ RELEASE_LATCH_IF_OWNER(&jbp->fsync_in_prog_latch);
+ if (jbp->io_in_prog_latch.u.parts.latch_pid == process_id)
+ RELEASE_SWAPLOCK(&jbp->io_in_prog_latch);
+ if (jbp->blocked == process_id)
+ {
+ assert(csa->now_crit);
+ jbp->blocked = 0;
+ }
}
- }
- if (is_exiting && csa->freeze && csd->freeze == process_id && !csa->persistent_freeze)
- {
- csd->image_count = 0;
- csd->freeze = 0;
- }
- if (is_bg && (csa->wbuf_dqd || csa->now_crit || csa->t_commit_crit || set_wc_blocked))
- { /* if csa->wbuf_dqd == TRUE, most likely failed during REMQHI in wcs_wtstart
- * or db_csh_get. cache corruption is suspected so set wc_blocked.
- * if csa->now_crit is TRUE, someone else should clean the cache, so set wc_blocked.
- * if csa->t_commit_crit is TRUE, even if csa->now_crit is FALSE, we might need cache
- * cleanup (e.g. cleanup of orphaned cnl->wcs_phase2_commit_pidcnt counter in case
- * a process gets shot in the midst of DECR_WCS_PHASE2_COMMIT_PIDCNT macro before
- * decrementing the shared counter but after committing the transaction otherwise)
- * so set wc_blocked. This case is folded into phase2 cleanup case below.
- * if set_wc_blocked is TRUE, need to clean up queues after phase2 commits.
- */
- SET_TRACEABLE_VAR(cnl->wc_blocked, TRUE);
- if (csa->now_crit)
- {
- wcblocked_ptr = WCBLOCKED_NOW_CRIT_LIT;
- BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_now_crit);
- } else if (csa->wbuf_dqd)
+ if (csa->freeze && (csd->freeze == process_id) && !csa->persistent_freeze)
{
- wcblocked_ptr = WCBLOCKED_WBUF_DQD_LIT;
- BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_wbuf_dqd);
- } else
- {
- wcblocked_ptr = WCBLOCKED_PHASE2_CLNUP_LIT;
- BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_phase2_clnup);
+ csd->image_count = 0;
+ csd->freeze = 0;
}
- send_msg_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_WCBLOCKED, 6, LEN_AND_STR(wcblocked_ptr),
- process_id, &csd->trans_hist.curr_tn, DB_LEN_STR(reg));
- }
- csa->wbuf_dqd = 0; /* We can clear the flag now */
- if (csa->wcs_pidcnt_incremented)
- DECR_WCS_PHASE2_COMMIT_PIDCNT(csa, cnl);
- if (csa->now_crit)
- {
- if (csd->trans_hist.curr_tn == csd->trans_hist.early_tn - 1)
- { /* there can be at most one region in non-TP with different curr_tn and early_tn */
- assert(!non_tp_update_underway || first_time);
- /* for normal termination we should not have been in the midst of commit */
- assert(!is_exiting || WBTEST_ENABLED(WBTEST_JNL_CREATE_FAIL)
- || WBTEST_ENABLED(WBTEST_SLEEP_IN_WCS_WTSTART)
- || (!update_underway && in_wcs_recover));
- DEBUG_ONLY(first_time = FALSE;)
- if (update_underway)
- INCREMENT_CURR_TN(csd); /* roll forward Step (CMT12) */
- else
- csd->trans_hist.early_tn = csd->trans_hist.curr_tn;
- }
- assert(csd->trans_hist.early_tn == csd->trans_hist.curr_tn);
- /* ONLINE ROLLBACK can come here holding crit ONLY due to commit errors but NOT during
- * process exiting as secshr_db_clnup during process exiting is always preceded by
- * mur_close_files which does the rel_crit anyways. Assert that.
- */
- assert(!csa->hold_onto_crit || !jgbl.onlnrlbk || !is_exiting);
- if (!csa->hold_onto_crit || is_exiting)
- { /* Release crit but since it involves modifying more than one field, make sure
- * we prevent interrupts while in this code. The global variable "crit_count"
- * does this for us. See similar usage in rel_crit.c.
+ assert(!csa->t_commit_crit);
+ if (is_bg && (csa->wbuf_dqd || csa->now_crit || csa->t_commit_crit))
+ { /* if csa->wbuf_dqd == TRUE, most likely failed during REMQHI in wcs_wtstart
+ * or db_csh_get. cache corruption is suspected so set wc_blocked.
+ * if csa->now_crit is TRUE, someone else should clean the cache, so set wc_blocked.
+ * if csa->t_commit_crit is TRUE, even if csa->now_crit is FALSE, we might need cache
+ * cleanup (e.g. cleanup of orphaned cnl->wcs_phase2_commit_pidcnt counter in case
+ * a process gets shot in the midst of DECR_WCS_PHASE2_COMMIT_PIDCNT macro before
+ * decrementing the shared counter but after committing the transaction otherwise)
+ * so set wc_blocked. This case is folded into phase2 cleanup case below.
*/
- assert(0 == crit_count);
- crit_count++; /* prevent interrupts */
- CRIT_TRACE(crit_ops_rw); /* see gdsbt.h for comment on placement */
- if (cnl->in_crit == process_id)
- cnl->in_crit = 0;
- csa->hold_onto_crit = FALSE;
- DEBUG_ONLY(locknl = cnl;) /* for DEBUG_ONLY LOCK_HIST macro */
- mutex_unlockw(reg, crash_count);/* roll forward Step (CMT14) */
- assert(!csa->now_crit);
- DEBUG_ONLY(locknl = NULL;) /* restore "locknl" to default value */
- crit_count = 0;
- UNSUPPORTED_PLATFORM_CHECK;
+ SET_TRACEABLE_VAR(cnl->wc_blocked, TRUE);
+ if (csa->now_crit)
+ {
+ wcblocked_ptr = WCBLOCKED_NOW_CRIT_LIT;
+ BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_now_crit);
+ } else if (csa->wbuf_dqd)
+ {
+ wcblocked_ptr = WCBLOCKED_WBUF_DQD_LIT;
+ BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_wbuf_dqd);
+ } else
+ {
+ wcblocked_ptr = WCBLOCKED_PHASE2_CLNUP_LIT;
+ BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_phase2_clnup);
+ }
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_WCBLOCKED, 6, LEN_AND_STR(wcblocked_ptr),
+ process_id, &csd->trans_hist.curr_tn, DB_LEN_STR(reg));
}
- }
- csa->t_commit_crit = FALSE; /* ensure we don't process this region again (rolls forward Step (CMT19)) */
- if (is_exiting && (NULL != csa->shmpool_buffer))
- {
- if ((pid = csa->shmpool_buffer->shmpool_crit_latch.u.parts.latch_pid) == process_id)
+ csa->wbuf_dqd = 0; /* We can clear the flag now */
+ if (csa->wcs_pidcnt_incremented)
+ DECR_WCS_PHASE2_COMMIT_PIDCNT(csa, cnl);
+ if (csa->now_crit)
+ {
+ if (csd->trans_hist.curr_tn == csd->trans_hist.early_tn - 1)
+ {
+ assert(WBTEST_ENABLED(WBTEST_JNL_CREATE_FAIL)
+ || WBTEST_ENABLED(WBTEST_SLEEP_IN_WCS_WTSTART) || in_wcs_recover);
+ csd->trans_hist.early_tn = csd->trans_hist.curr_tn;
+ }
+ assert(csd->trans_hist.early_tn == csd->trans_hist.curr_tn);
+ secshr_rel_crit(csa->region, IS_EXITING_TRUE, IS_REPL_REG_FALSE);
+ }
+ if (NULL != csa->shmpool_buffer)
{
- if (is_exiting)
+ if ((pid = csa->shmpool_buffer->shmpool_crit_latch.u.parts.latch_pid) == process_id)
{ /* Tiz our lock. Force recovery to run and release */
csa->shmpool_buffer->shmpool_blocked = TRUE;
BG_TRACE_PRO_ANY(csa, shmpool_blkd_by_sdc);
SET_LATCH_GLOBAL(&csa->shmpool_buffer->shmpool_crit_latch, LOCK_AVAILABLE);
DEBUG_LATCH(util_out_print("Latch cleaned up", FLUSH));
+ } else if ((0 != pid) && (FALSE == is_proc_alive(pid, 0)))
+ { /* Attempt to make it our lock so we can set blocked */
+ if (COMPSWAP_LOCK(&csa->shmpool_buffer->shmpool_crit_latch, pid, 0, process_id, 0))
+ { /* Now our lock .. set blocked and release. */
+ csa->shmpool_buffer->shmpool_blocked = TRUE;
+ BG_TRACE_PRO_ANY(csa, shmpool_blkd_by_sdc);
+ DEBUG_LATCH(util_out_print("Orphaned latch cleaned up", TRUE));
+ COMPSWAP_UNLOCK(&csa->shmpool_buffer->shmpool_crit_latch, process_id,
+ 0, LOCK_AVAILABLE, 0);
+ } /* Else someone else took care of it */
}
- } else if (0 != pid && FALSE == is_proc_alive(pid, 0))
- {
- /* Attempt to make it our lock so we can set blocked */
- if (COMPSWAP_LOCK(&csa->shmpool_buffer->shmpool_crit_latch, pid, 0, process_id, 0))
- { /* Now our lock .. set blocked and release. */
- csa->shmpool_buffer->shmpool_blocked = TRUE;
- BG_TRACE_PRO_ANY(csa, shmpool_blkd_by_sdc);
- DEBUG_LATCH(util_out_print("Orphaned latch cleaned up", TRUE));
- COMPSWAP_UNLOCK(&csa->shmpool_buffer->shmpool_crit_latch, process_id,
- 0, LOCK_AVAILABLE, 0);
- } /* Else someone else took care of it */
}
- }
- /* All releases done now. Double check latch is really cleared */
- assert(NULL != csa->critical);
- /* as long as csa->hold_onto_crit is FALSE, we should have released crit if we held it at entry */
- assert(!csa->now_crit || csa->hold_onto_crit);
- /* Note: Do not release crit if we still hold it. As we want the next process to grab crit to invoke
- * "mutex_salvage" (to cleanup stuff) in case we terminate while holding crit. Hence the below line
- * is commented out.
- *
- * RELEASE_LATCH_IF_OWNER_AND_EXITING(&csa->critical->semaphore, is_exiting);
- */
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&csa->critical->crashcnt_latch, is_exiting);
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&csa->critical->prochead.latch, is_exiting);
- RELEASE_LATCH_IF_OWNER_AND_EXITING(&csa->critical->freehead.latch, is_exiting);
- } /* For all regions */
- } /* For all glds */
- if ((NULL != (reg = jnlpool.jnlpool_dummy_reg)) && reg->open)
- {
- csa = REG2CSA(reg);
- if (csa->now_crit)
+ /* All releases done now. Double check latch is really cleared */
+ assert(NULL != csa->critical);
+ /* as long as csa->hold_onto_crit is FALSE, we should have released crit if we held it at entry */
+ assert(!csa->now_crit || csa->hold_onto_crit);
+ /* Note: Do not release crit if we still hold it. As we want the next process to grab crit to invoke
+ * "mutex_salvage" (to cleanup stuff) in case we terminate while holding crit. Hence the below line
+ * is commented out.
+ *
+ * RELEASE_LATCH_IF_OWNER(&csa->critical->semaphore);
+ */
+ RELEASE_LATCH_IF_OWNER(&csa->critical->crashcnt_latch);
+ RELEASE_LATCH_IF_OWNER(&csa->critical->prochead.latch);
+ RELEASE_LATCH_IF_OWNER(&csa->critical->freehead.latch);
+ } /* For all regions */
+ } /* For all glds */
+ if (jnlpool_head)
{
- jpl = REPLCSA2JPL(csa);
- cnl = csa->nl;
- /* ONLINE ROLLBACK can come here holding crit ONLY due to commit errors but NOT during
- * process exiting as secshr_db_clnup during process exiting is always preceded by
- * mur_close_files which does the rel_crit anyways. Assert that.
- */
- assert(!csa->hold_onto_crit || !jgbl.onlnrlbk || !is_exiting);
- if (!csa->hold_onto_crit || is_exiting)
+ save_jnlpool = jnlpool;
+ for (jnlpool = jnlpool_head; jnlpool; jnlpool = jnlpool->next)
{
- CRIT_TRACE(crit_ops_rw); /* see gdsbt.h for comment on placement */
- if (cnl->in_crit == process_id)
- cnl->in_crit = 0;
- csa->hold_onto_crit = FALSE;
- DEBUG_ONLY(locknl = cnl;) /* for DEBUG_ONLY LOCK_HIST macro */
- mutex_unlockw(reg, 0); /* roll forward Step (CMT15) */
- assert(!csa->now_crit);
- DEBUG_ONLY(locknl = NULL;) /* restore "locknl" to default value */
+ if ((NULL != (repl_reg = jnlpool->jnlpool_dummy_reg)) && repl_reg->open) /* assignment */
+ {
+ repl_csa = REG2CSA(repl_reg);
+ assert(repl_csa);
+ if (repl_csa->now_crit)
+ secshr_rel_crit(repl_reg, IS_EXITING_TRUE, IS_REPL_REG_TRUE);
+ }
}
+ jnlpool = save_jnlpool;
}
- /* as long as csa->hold_onto_crit is FALSE, we should have released crit if we held it at entry */
- assert(!csa->now_crit || csa->hold_onto_crit);
- assert(jnlpool.jnlpool_dummy_reg == reg);
- FINISH_JNL_PHASE2_IN_JNLPOOL_IF_NEEDED(TRUE, jnlpool); /* Roll forward CMT17 */
- }
- if (is_exiting)
- { /* It is possible we are exiting while in the middle of a transaction (e.g. called through "deferred_signal_handler"
+ /* It is possible we are exiting while in the middle of a transaction (e.g. called through "deferred_signal_handler"
* in the DEFERRED_EXIT_HANDLING_CHECK macro). Since exit handling code can start new non-TP transactions
* (e.g. for statsdb rundown you need to kill ^%YGS node, for recording mprof stats you need to set a global node)
* clean up the effects of any in-progress transaction before the "t_begin" call happens.
diff --git a/sr_port/secshr_db_clnup.h b/sr_port/secshr_db_clnup.h
index 8788800..120590a 100644
--- a/sr_port/secshr_db_clnup.h
+++ b/sr_port/secshr_db_clnup.h
@@ -10,27 +10,75 @@
* *
****************************************************************/
-#ifndef __SECSHR_DB_CLNUP_
-#define __SECSHR_DB_CLNUP_
+#ifndef SECSHR_DB_CLNUP
+#define SECSHR_DB_CLNUP
enum secshr_db_state
{
- ABNORMAL_TERMINATION = 0, /* abnormal shut down using STOP/ID in VMS. Currently unused in Unix */
- NORMAL_TERMINATION, /* normal shut down */
+ NORMAL_TERMINATION = 1, /* normal shut down */
COMMIT_INCOMPLETE /* in the midst of commit. cannot be rolled back anymore. only rolled forward */
};
-void secshr_db_clnup(enum secshr_db_state state);
-
-/* SECSHR_ACCOUNTING macro assumes csa->nl is dereferencible and does accounting if variable "DO_ACCOUNTING" is set to TRUE */
-#define SECSHR_ACCOUNTING(DO_ACCOUNTING, VALUE) \
-MBSTART { \
- if (DO_ACCOUNTING) \
- { \
- if (csa->nl->secshr_ops_index < SECSHR_OPS_ARRAY_SIZE) \
- csa->nl->secshr_ops_array[csa->nl->secshr_ops_index] = (gtm_uint64_t)(VALUE); \
- csa->nl->secshr_ops_index++; \
- } \
+enum secshr_accounting_caller_t /* abbreviated as "sac_" prefix below */
+{
+ sac_secshr_db_clnup = 1, /* 1 */
+ sac_secshr_finish_CMT08_to_CMT14, /* 2 */
+ sac_secshr_blk_full_build, /* 3 */
+ sac_secshr_finish_CMT18, /* 4 */
+};
+
+#define IS_EXITING_FALSE FALSE
+#define IS_EXITING_TRUE TRUE
+
+#define IS_REPL_REG_FALSE FALSE
+#define IS_REPL_REG_TRUE TRUE
+
+#define WCBLOCKED_NOW_CRIT_LIT "wcb_secshr_db_clnup_now_crit"
+#define WCBLOCKED_WBUF_DQD_LIT "wcb_secshr_db_clnup_wbuf_dqd"
+#define WCBLOCKED_PHASE2_CLNUP_LIT "wcb_secshr_db_clnup_phase2_clnup"
+
+#define SECSHR_SET_CSD_CNL_ISBG(CSA, CSD, CNL, IS_BG) \
+MBSTART { \
+ CSD = CSA->hdr; \
+ assert(NULL != CSD); \
+ CNL = CSA->nl; \
+ assert(NULL != CNL); \
+ IS_BG = (CSD->acc_meth == dba_bg); \
+ csa->ti = &csd->trans_hist; /* correct it in case broken */ \
+} MBEND
+
+#define SECSHR_ACCOUNTING_MAX_ARGS 32 /* max args in "argarray" passed to "secshr_send_DBCLNUPINFO_msg" */
+
+#define SECSHR_ACCOUNTING(NUMARGS, ARGARRAY, VALUE) \
+MBSTART { \
+ ARGARRAY[NUMARGS++] = (INTPTR_T)#VALUE; \
+ ARGARRAY[NUMARGS++] = VALUE; \
+ assert(NUMARGS <= ARRAYSIZE(ARGARRAY)); \
} MBEND
+#ifdef DEBUG_CHECK_LATCH
+# define DEBUG_LATCH(x) x
+#else
+# define DEBUG_LATCH(x)
+#endif
+
+#define RELEASE_LATCH_IF_OWNER(X) \
+MBSTART { \
+ if ((X)->u.parts.latch_pid == process_id) \
+ { \
+ SET_LATCH_GLOBAL(X, LOCK_AVAILABLE); \
+ DEBUG_LATCH(util_out_print("Latch cleaned up", FLUSH)); \
+ } \
+} MBEND
+
+void secshr_db_clnup(enum secshr_db_state state);
+void secshr_finish_CMT08_to_CMT14(sgmnt_addrs *csa, jnlpool_addrs_ptr_t update_jnlpool);
+void secshr_rel_crit(gd_region *reg, boolean_t is_exiting, boolean_t is_repl_reg);
+int secshr_blk_full_build(boolean_t is_tp, sgmnt_addrs *csa,
+ sgmnt_data_ptr_t csd, boolean_t is_bg, struct cw_set_element_struct *cs, sm_uc_ptr_t blk_ptr, trans_num currtn);
+int secshr_finish_CMT18(sgmnt_addrs *csa, sgmnt_data_ptr_t csd,
+ boolean_t is_bg, struct cw_set_element_struct *cs, sm_uc_ptr_t blk_ptr, trans_num currtn);
+void secshr_finish_CMT18_to_CMT19(sgmnt_addrs *csa);
+void secshr_send_DBCLNUPINFO_msg(sgmnt_addrs *csa, int numargs, gtm_uint64_t *argarray);
+
#endif
diff --git a/sr_port/secshr_finish_CMT08_to_CMT14.c b/sr_port/secshr_finish_CMT08_to_CMT14.c
new file mode 100644
index 0000000..db41021
--- /dev/null
+++ b/sr_port/secshr_finish_CMT08_to_CMT14.c
@@ -0,0 +1,552 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "gdsroot.h"
+#include "gtm_facility.h"
+#include "fileinfo.h"
+#include "gdsbt.h"
+#include "gdsblk.h"
+#include "gdsfhead.h"
+#include "filestruct.h"
+#include "gdscc.h"
+#include "min_max.h"
+#include "gdsblkops.h"
+#include "gdsbml.h"
+#include "gdskill.h"
+#include "copy.h"
+#include "interlock.h"
+#include "jnl.h"
+#include "buddy_list.h" /* needed for tp.h */
+#include "hashtab_int4.h" /* needed for tp.h */
+#include "tp.h"
+#include "io.h"
+#include "gtmsecshr.h"
+#include "repl_msg.h"
+#include "gtmsource.h"
+#include "is_proc_alive.h"
+#include "aswp.h"
+#include "util.h"
+#include "compswap.h"
+#include "mutex.h"
+#include "add_inter.h"
+#include "send_msg.h" /* for send_msg prototype */
+#include "secshr_db_clnup.h"
+#include "memcoherency.h"
+#include "shmpool.h"
+#include "wbox_test_init.h"
+#include "db_snapshot.h"
+#include "muextr.h"
+#include "mupip_reorg.h"
+#include "sec_shr_blk_build.h"
+#include "cert_blk.h" /* for CERT_BLK_IF_NEEDED macro */
+#include "gdsbgtr.h"
+
+GBLREF boolean_t certify_all_blocks;
+GBLREF boolean_t need_kip_incr;
+GBLREF cw_set_element cw_set[];
+GBLREF int4 strm_index;
+GBLREF jnl_fence_control jnl_fence_ctl;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF sgmnt_addrs *kip_csa;
+GBLREF uint4 process_id;
+GBLREF uint4 update_trans;
+GBLREF unsigned char cw_set_depth;
+GBLREF unsigned int cr_array_index;
+GBLREF cache_rec_ptr_t cr_array[((MAX_BT_DEPTH * 2) - 1) * 2]; /* Maximum number of blocks that can be in transaction */
+GBLREF trans_num start_tn;
+GBLREF boolean_t dse_running;
+#ifdef DEBUG
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+#endif
+
+error_def(ERR_WCBLOCKED);
+
+/* Roll forward commit steps CMT08 thru CMT14 on region whose "csa" is an input parameter.
+ * This function is called from "secshr_db_clnup" only if it was called with the "COMMIT_INCOMPLETE" parameter
+ * by "t_commit_cleanup" so we are guaranteed that the commit logic has gone past CMT07 step. And it is called
+ * once for each region participating in the commit logic. This function simulates the commit steps CMT08 thru CMT14
+ * for the input region if not already executed. Otherwise, it is a no-op and returns right away.
+ * Note that in a multi-region TP transaction, it is possible one region is at commit step CMT10 whereas later
+ * participating regions have not even executed CMT08.
+ */
+void secshr_finish_CMT08_to_CMT14(sgmnt_addrs *csa, jnlpool_addrs_ptr_t update_jnlpool)
+{
+ boolean_t is_bg;
+ cache_que_heads_ptr_t cache_state;
+ cache_rec_ptr_t clru, cr_top, start_cr;
+ cache_rec_ptr_t cr;
+ char *wcblocked_ptr;
+ cw_set_element *cs, *cs_top, *first_cw_set, *next_cs;
+ gv_namehead *gvtarget;
+ int max_bts, old_mode;
+ node_local_ptr_t cnl;
+ seq_num strm_seqno;
+ sgm_info *si;
+ sgmnt_data_ptr_t csd;
+ sm_uc_ptr_t blk_ptr;
+ srch_blk_status *t1;
+ trans_num ctn;
+ uint4 blk_size;
+ unsigned int lcnt;
+ jbuf_rsrv_struct_t *jrs;
+ uint4 updTrans;
+ int numargs;
+ gtm_uint64_t argarray[SECSHR_ACCOUNTING_MAX_ARGS];
+# ifdef DEBUG
+ cache_rec_ptr_t actual_cr;
+ gd_region *repl_reg;
+ jnlpool_ctl_ptr_t jpl;
+ sgmnt_addrs *repl_csa;
+ sgmnt_addrs *tmp_csa;
+# endif
+ DCL_THREADGBL_ACCESS;
+
+ SETUP_THREADGBL_ACCESS;
+ SECSHR_SET_CSD_CNL_ISBG(csa, csd, cnl, is_bg); /* sets csd/cnl/is_bg */
+ assert((FALSE == csa->t_commit_crit) || (T_COMMIT_CRIT_PHASE0 == csa->t_commit_crit)
+ || (T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit) || (T_COMMIT_CRIT_PHASE2 == csa->t_commit_crit));
+ if (!csa->now_crit)
+ {
+ assert(T_COMMIT_CRIT_PHASE1 != csa->t_commit_crit);
+ return; /* We are guaranteed Step CMT14 is complete in this region. Can return safely right away */
+ }
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_finish_CMT08_to_CMT14);
+ SECSHR_ACCOUNTING(numargs, argarray, process_id);
+ SECSHR_ACCOUNTING(numargs, argarray, csa->now_crit);
+ SECSHR_ACCOUNTING(numargs, argarray, csa->t_commit_crit);
+ SECSHR_ACCOUNTING(numargs, argarray, csd->trans_hist.early_tn);
+ SECSHR_ACCOUNTING(numargs, argarray, csd->trans_hist.curr_tn);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ if (dollar_tlevel)
+ {
+ si = csa->sgm_info_ptr;
+ first_cw_set = si->first_cw_set;
+ updTrans = si->update_trans;
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_finish_CMT08_to_CMT14);
+ SECSHR_ACCOUNTING(numargs, argarray, dollar_tlevel);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)first_cw_set);
+ SECSHR_ACCOUNTING(numargs, argarray, si->cw_set_depth);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ } else
+ {
+ DEBUG_ONLY(si = NULL;)
+ first_cw_set = (0 != cw_set_depth) ? cw_set : NULL;
+ updTrans = update_trans;
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_finish_CMT08_to_CMT14);
+ SECSHR_ACCOUNTING(numargs, argarray, dollar_tlevel);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)first_cw_set);
+ SECSHR_ACCOUNTING(numargs, argarray, cw_set_depth);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ }
+ assert((NULL == first_cw_set) || csa->now_crit || csa->t_commit_crit || dollar_tlevel);
+ if (updTrans)
+ {
+ if (T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit)
+ { /* In phase1 of commit, cti->free_blocks is updated as each bitmap cse is committed. But we do not
+ * know if an error in commit happened in a bitmap case after the counter was updated but before
+ * the cse->mode was set to gds_t_committed. So we restore the free_blocks counter in the region
+ * that is still in phase1 (and whose commit was interrupted) and play forward all cses (even the
+ * already committed ones) and update free_blocks counter for all those again. The below step
+ * restores the counter to what it was at the beginning of phase1 of commit.
+ */
+ csd->trans_hist.free_blocks = csa->prev_free_blks;
+ }
+ ctn = csd->trans_hist.curr_tn;
+ if (csd->trans_hist.early_tn != ctn)
+ { /* Process got an error in this region after CMT07 but before CMT14 */
+ /* If Non-TP, there is only one region so Step CMT08 must have been executed in that region in order
+ * to even reach this function. And Step CMT09 is done right after that in "t_end" so both these
+ * steps are guaranteed to have been executed. So no need to simulate them.
+ * But in case of TP, it is possible this is a multi-region transaction and some regions have not
+ * executed Step CMT08 or CMT09. Both these steps are idempotent (i.e. safe to redo even if already done).
+ * So do them unconditionally in case of TP.
+ */
+ assert(csd->trans_hist.early_tn == (ctn + 1));
+ if (dollar_tlevel)
+ {
+ SET_T_COMMIT_CRIT_PHASE1(csa, cnl, ctn); /* Step CMT08 for TP */
+ if (jnl_fence_ctl.replication && REPL_ALLOWED(csa))
+ { /* Indication that this is an update to a replicated region that bumps the journal seqno.
+ * So finish CMT09. Note: In "tp_tend", the variable "supplementary" is TRUE if
+ * "jnl_fence_ctl.strm_seqno" is non-zero. We use that here since the local variable
+ * "supplementary" is not available here.
+ */
+ strm_seqno = GET_STRM_SEQ60(jnl_fence_ctl.strm_seqno);
+# ifdef DEBUG
+ repl_reg = update_jnlpool ? update_jnlpool->jnlpool_dummy_reg : NULL;
+ repl_csa = ((NULL != repl_reg) && repl_reg->open) ? REG2CSA(repl_reg) : NULL;
+ assert(!jnl_fence_ctl.strm_seqno
+ || ((INVALID_SUPPL_STRM != strm_index)
+ && (GET_STRM_INDEX(jnl_fence_ctl.strm_seqno) == strm_index)));
+ assert((NULL != repl_csa) && repl_csa->now_crit);
+ /* see "jnlpool_init" for relationship between critical and jpl */
+ jpl = (jnlpool_ctl_ptr_t)((sm_uc_ptr_t)repl_csa->critical - JNLPOOL_CTL_SIZE);
+ assert(jpl == update_jnlpool->jnlpool_ctl);
+ assert(jpl->jnl_seqno == (jnl_fence_ctl.token + 1));
+ assert(!jnl_fence_ctl.strm_seqno || (jpl->strm_seqno[strm_index] == (strm_seqno + 1)));
+# endif
+ /* It is possible CMT09 has already been done in which case csa->hdr->reg_seqno
+ * would be equal to jnl_fence_ctl.token + 1. Therefore we want to avoid the assert
+ * inside the SET_REG_SEQNO macro which checks that reg_seqno is LESS than token + 1.
+ * Hence the SKIP_ASSERT_TRUE parameter usage below.
+ */
+ SET_REG_SEQNO(csa, jnl_fence_ctl.token + 1, jnl_fence_ctl.strm_seqno, \
+ strm_index, strm_seqno + 1, SKIP_ASSERT_TRUE); /* Step CMT09 for TP */
+ }
+ } else
+ assert(T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit);
+ if (NULL != first_cw_set)
+ {
+ if (is_bg)
+ {
+ clru = (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, cnl->cur_lru_cache_rec_off);
+ lcnt = 0;
+ assert(cnl->sec_size);
+ cache_state = csa->acc_meth.bg.cache_state;
+ start_cr = cache_state->cache_array + csd->bt_buckets;
+ max_bts = csd->n_bts;
+ cr_top = start_cr + max_bts;
+ if (!csa->wcs_pidcnt_incremented)
+ INCR_WCS_PHASE2_COMMIT_PIDCNT(csa, cnl);
+ }
+ blk_size = csd->blk_size;
+ cs = first_cw_set;
+ cs_top = (dollar_tlevel ? NULL : (cs + cw_set_depth));
+ for (next_cs = cs; cs_top != cs; cs = next_cs)
+ {
+ /* Step CMT10 start */
+ if (dollar_tlevel)
+ {
+ next_cs = next_cs->next_cw_set;
+ TRAVERSE_TO_LATEST_CSE(cs);
+ } else
+ next_cs = cs + 1;
+ if (gds_t_committed < cs->mode)
+ {
+ assert(n_gds_t_op != cs->mode);
+ if (n_gds_t_op > cs->mode)
+ { /* Currently there are only three possibilities and each is in NON-TP.
+ * In each case, no need to do any block update so simulate commit.
+ */
+ assert(!dollar_tlevel);
+ assert((gds_t_write_root == cs->mode) || (gds_t_busy2free == cs->mode)
+ || (gds_t_recycled2free == cs->mode));
+ if ((gds_t_busy2free == cs->mode) || (gds_t_recycled2free == cs->mode))
+ {
+ assert(is_bg);
+ assert(cr_array_index);
+ assert(process_id == cr_array[0]->in_cw_set);
+ assert(cr_array[0]->blk == cs->blk);
+ /* Need to UNPIN corresponding cache-record. This needs to be
+ * done only if we hold crit as otherwise it means we have
+ * already done it in t_end.
+ */
+ UNPIN_CACHE_RECORD(cr_array[0]);
+ }
+ } else
+ { /* Currently there are only two possibilities and both are in TP.
+ * In either case, need to simulate what tp_tend would have done which
+ * is to build a private copy right now if this is the first phase of
+ * KILL (i.e. we hold crit) as this could be needed in the 2nd phase
+ * of KILL.
+ */
+ assert(dollar_tlevel);
+ assert((kill_t_write == cs->mode) || (kill_t_create == cs->mode));
+ if (!cs->done)
+ { /* Initialize cs->new_buff to non-NULL since "sec_shr_blk_build"
+ * expects this.
+ */
+ if (NULL == cs->new_buff)
+ cs->new_buff = (unsigned char *)
+ get_new_free_element(si->new_buff_list);
+ assert(NULL != cs->new_buff);
+ blk_ptr = (sm_uc_ptr_t)cs->new_buff;
+ if (0 != secshr_blk_full_build(dollar_tlevel,
+ csa, csd, is_bg, cs, blk_ptr, ctn))
+ continue;
+ cs->done = TRUE;
+ assert(NULL != cs->blk_target);
+ CERT_BLK_IF_NEEDED(certify_all_blocks, csa->region,
+ cs, cs->new_buff, ((gv_namehead *)NULL));
+ }
+ }
+ cs->old_mode = (int4)cs->mode;
+ assert(0 < cs->old_mode);
+ cs->mode = gds_t_committed;
+ continue;
+ }
+ old_mode = cs->old_mode;
+ if (gds_t_committed == cs->mode)
+ { /* already processed */
+ assert(0 < old_mode);
+ if (T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit)
+ {
+ assert(csa->now_crit);
+ csd->trans_hist.free_blocks -= cs->reference_cnt;
+ }
+ assert(!dollar_tlevel || (gds_t_write_root != old_mode));
+ assert(gds_t_committed != old_mode);
+# ifdef DEBUG
+ if (is_bg)
+ {
+ cr = cs->cr;
+ if (gds_t_committed > old_mode)
+ assert(process_id != cr->in_tend);
+ else
+ { /* For the kill_t_* case, cs->cr will be NULL as bg_update was not
+ * invoked and the cw-set-elements were memset to 0 in TP. But for
+ * gds_t_write_root and gds_t_busy2free, they are non-TP ONLY modes
+ * and cses are not initialized so can't check for NULL cr.
+ * "n_gds_t_op" demarcates the boundaries between non-TP only and
+ * TP only modes. So use that.
+ */
+ assert((n_gds_t_op > old_mode) || (NULL == cr));
+ }
+ assert((NULL == cr) || (cr->ondsk_blkver == csd->desired_db_format));
+ }
+# endif
+ continue;
+ }
+ if (is_bg)
+ {
+ assert(T_COMMIT_CRIT_PHASE1 == csa->t_commit_crit);
+ /* A positive value of cse->old_mode implies phase1 is not complete on this cse
+ * so we need to do phase1 tasks (e.g. blks_to_upgrd counter adjustment,
+ * find a cr for cs->cr etc.
+ */
+ assert((0 <= old_mode) || (old_mode == -cs->mode));
+ if (0 <= old_mode)
+ { /* We did not yet finish phase1 of commit for this cs (note: we also hold
+ * crit on this region), so have to find out a free cache-record
+ * we can dump our updates onto. Also, a positive value of "old_mode"
+ * implies it's value is not necessarily cs->mode. So initialize that too.
+ */
+ old_mode = cs->mode;
+ for ( ; lcnt < max_bts; lcnt++)
+ { /* find any available cr */
+ if (++clru >= cr_top)
+ clru = start_cr;
+ assert(!clru->stopped);
+ if (!clru->stopped && (0 == clru->dirty)
+ && (0 == clru->in_cw_set)
+ && (!clru->in_tend)
+ && (-1 == clru->read_in_progress))
+ break;
+ }
+ if (lcnt >= max_bts)
+ { /* Did not find space in global buffers to finish commit */
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray,
+ sac_secshr_finish_CMT08_to_CMT14);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cs);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->tn);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->level);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->done);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->forward_process);
+ SECSHR_ACCOUNTING(numargs, argarray, cs->first_copy);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ continue;
+ }
+ cr = clru;
+ /* Set cr->in_cw_set & cr->in_tend to avoid this "cr" from being
+ * pinned by another mumps process concurrently after this "secshr_db_clnup"
+ * invocation releases crit in phase1 but before it is done phase2. In that
+ * case, the other mumps process could end up with an assertpro in the
+ * PIN_CACHE_RECORD macro in t_end/tp_tend.
+ */
+ if (!dollar_tlevel) /* stuff it in the array before setting in_cw_set */
+ {
+ assert(ARRAYSIZE(cr_array) > cr_array_index);
+ PIN_CACHE_RECORD(cr, cr_array, cr_array_index);
+ } else
+ TP_PIN_CACHE_RECORD(cr, si);
+ cr->backup_cr_is_twin = FALSE;
+ cr->in_tend = process_id;
+ cr->cycle++; /* increment cycle for blk number changes (for tp_hist) */
+ assert(cs->blk < csd->trans_hist.total_blks);
+ cr->blk = cs->blk;
+ assert(CR_BLKEMPTY != cr->blk);
+ cr->jnl_addr = cs->jnl_freeaddr;
+ assert(!cr->twin);
+ cr->stopped = process_id;
+ /* Keep cs->cr and t1->cr up-to-date to ensure clue will be accurate */
+ cs->cr = cr;
+ cs->cycle = cr->cycle;
+ if (!IS_BITMAP_BLK(cs->blk))
+ { /* Not a bitmap block, update clue history to reflect new cr */
+ assert((0 <= cs->level) && (MAX_BT_DEPTH > cs->level));
+ gvtarget = cs->blk_target;
+ assert((MAX_BT_DEPTH + 1) == ARRAYSIZE(gvtarget->hist.h));
+ if ((0 <= cs->level) && (MAX_BT_DEPTH > cs->level)
+ && (NULL != gvtarget) && (0 != gvtarget->clue.end))
+ {
+ t1 = &gvtarget->hist.h[cs->level];
+ if (t1->blk_num == cs->blk)
+ {
+ t1->cr = cr;
+ t1->cycle = cs->cycle;
+ t1->buffaddr = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa,
+ cr->buffaddr);
+ }
+ }
+ }
+ /* the following code is very similar to that in bg_update_phase1 */
+ if (gds_t_acquired == cs->mode)
+ {
+ if (GDSV4 == csd->desired_db_format)
+ INCR_BLKS_TO_UPGRD(csa, csd, 1);
+ } else
+ {
+# ifdef DEBUG
+ /* We rely on the fact that cs->ondsk_blkver accurately reflects
+ * the on-disk block version of the block and therefore can be
+ * used to set cr->ondsk_blkver. Confirm this by checking that
+ * if a cr exists for this block, then that cr's ondsk_blkver
+ * matches with the cs. db_csh_get uses the global variable
+ * cs_addrs to determine the region. So make it uptodate temporarily
+ * holding its value in the local variable tmp_csa.
+ */
+ tmp_csa = cs_addrs; /* save cs_addrs in local */
+ cs_addrs = csa; /* set cs_addrs for db_csh_get */
+ actual_cr = db_csh_get(cs->blk);
+ cs_addrs = tmp_csa; /* restore cs_addrs */
+ /* actual_cr can be NULL if the block is NOT in the cache.
+ * It can be CR_NOTVALID if the cache record originally
+ * containing this block got reused for a different block
+ * (i.e. cr->stopped = non-zero) as part of secshr_db_clnup.
+ */
+ assert((NULL == actual_cr)
+ || ((cache_rec_ptr_t)CR_NOTVALID == actual_cr)
+ || (cs->ondsk_blkver == actual_cr->ondsk_blkver));
+# endif
+ cr->ondsk_blkver = cs->ondsk_blkver;
+ if (cr->ondsk_blkver != csd->desired_db_format)
+ {
+ if (GDSV4 == csd->desired_db_format)
+ {
+ if (gds_t_write_recycled != cs->mode)
+ INCR_BLKS_TO_UPGRD(csa, csd, 1);
+ } else
+ {
+ if (gds_t_write_recycled != cs->mode)
+ DECR_BLKS_TO_UPGRD(csa, csd, 1);
+ }
+ }
+ }
+ cs->old_mode = -old_mode; /* signal phase1 is complete */
+ assert(0 > cs->old_mode);
+ blk_ptr = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr);
+ if (gds_t_writemap == cs->mode)
+ { /* Since we picked a different "cr" for the bitmap block, take a
+ * copy of the original block (before calling "sec_shr_map_build"
+ * inside "secshr_finish_CMT18") since bitmap cses do not have a
+ * notion of "cse->first_copy".
+ */
+ memmove(blk_ptr, cs->old_block, blk_size);
+ }
+ } else
+ { /* Phase1 commit finished for this cs and cr is chosen. Assert few things */
+ cr = cs->cr;
+ blk_ptr = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr);
+ }
+ assert(process_id == cr->in_tend);
+ assert(process_id == cr->in_cw_set);
+ assert(cr->blk == cs->cr->blk);
+ } else
+ blk_ptr = MM_BASE_ADDR(csa) + (off_t)blk_size * cs->blk;
+ /* Step CMT10 end */
+ /* If BG and DSE, it is possible cache-records corresponding to global buffers which
+ * are pointed to by the update array are not pinned (because dse passes "dummy_hist"
+ * to "t_end"). In that case, we cannot wait to finish the phase2 of commit outside
+ * of crit as the global buffer we are relying on in the update array could be reused
+ * for a different block once we release crit in phase1. Hence the " || dse_running"
+ * check below.
+ */
+ assert(!dse_running || !dollar_tlevel);
+ if (!is_bg || (!dollar_tlevel && ((gds_t_writemap == cs->mode) || dse_running))
+ || (dollar_tlevel && IS_BG_PHASE2_COMMIT_IN_CRIT(cs, cs->mode)))
+ { /* Below is Step 10a (comprises Steps CMT16 and CMT18 */
+ if (dollar_tlevel)
+ jrs = si->jbuf_rsrv_ptr;
+ else
+ jrs = TREF(nontp_jbuf_rsrv);
+ /* Below is Step CMT16 (done as part of CMT10a) */
+ if (NEED_TO_FINISH_JNL_PHASE2(jrs))
+ FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs);
+ /* Below is Step CMT18 (done as part of CMT10a) */
+ if (0 != secshr_finish_CMT18(csa, csd, is_bg, cs, blk_ptr, ctn))
+ continue; /* error during CMT18, move on to next cs */
+ }
+ }
+ }
+ if (dollar_tlevel)
+ si->update_trans = updTrans | UPDTRNS_TCOMMIT_STARTED_MASK; /* Step CMT11 for TP */
+ else
+ update_trans = updTrans | UPDTRNS_TCOMMIT_STARTED_MASK; /* Step CMT11 for Non-TP */
+ INCREMENT_CURR_TN(csd); /* roll forward Step (CMT12) */
+ }
+ /* else : early_tn == curr_tn and so Step CMT12 is done */
+ csa->t_commit_crit = T_COMMIT_CRIT_PHASE2; /* Step CMT13 */
+ /* Check if kill_in_prog flag in file header has to be incremented. */
+ if (dollar_tlevel)
+ {
+ if ((NULL != si->kill_set_head) && (NULL == si->kip_csa))
+ INCR_KIP(csd, csa, si->kip_csa);
+ si->start_tn = ctn; /* needed by "secshr_finish_CMT18_to_CMT19" */
+ } else
+ { /* Non-TP. Check need_kip_incr and value pointed to by kip_csa. */
+ /* Note that kip_csa could be NULL if we are in the
+ * 1st phase of the M-kill and NON NULL if we are in the 2nd phase of the kill.
+ * Only if it is NULL, should we increment the kill_in_prog flag.
+ */
+ if (need_kip_incr && (NULL == kip_csa))
+ {
+ INCR_KIP(csd, csa, kip_csa);
+ need_kip_incr = FALSE;
+ }
+ if (MUSWP_INCR_ROOT_CYCLE == TREF(in_mu_swap_root_state))
+ cnl->root_search_cycle++;
+ start_tn = ctn; /* needed by "secshr_finish_CMT18_to_CMT19" */
+ }
+ if (is_bg)
+ { /* The cache is suspect at this point so set cnl->wc_blocked to TRUE to force a cache-recovery.
+ * Need to do this BEFORE releasing crit. If we wait until phase2 is complete to set wc_blocked, it
+ * is possible another process P2 gets crit before our (P1) phase2 is complete and wants to update the
+ * exact same cr that got a WBTEST_BG_UPDATE_DBCSHGETN_INVALID2 error in phase1 for P1. In that case,
+ * P1 would have created a cr_new (with cr_new->stopped non-zero) to dump the updates but cr->in_cw_set
+ * would still be non-zero and that means P2 will assertpro when it does the PIN_CACHE_RECORD on "cr".
+ * Setting wc_blocked by P1 before releasing crit will ensure P2 will invoke "wcs_recover" as part of
+ * its "grab_crit" in t_end/tp_tend and that would wait for P1's phase2 to finish before proceeding
+ * with cache-recovery and P2's transaction commit.
+ */
+ SET_TRACEABLE_VAR(cnl->wc_blocked, TRUE);
+ wcblocked_ptr = WCBLOCKED_NOW_CRIT_LIT;
+ BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_now_crit);
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_WCBLOCKED, 6,
+ LEN_AND_STR(wcblocked_ptr), process_id, &ctn, DB_LEN_STR(csa->region));
+ }
+ } /* if (updTrans) */
+ assert(csa->region->open);
+ secshr_rel_crit(csa->region, IS_EXITING_FALSE, IS_REPL_REG_FALSE); /* Step CMT14 */
+ return;
+}
diff --git a/sr_port/secshr_finish_CMT18.c b/sr_port/secshr_finish_CMT18.c
new file mode 100644
index 0000000..b3d8140
--- /dev/null
+++ b/sr_port/secshr_finish_CMT18.c
@@ -0,0 +1,261 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "gdsroot.h"
+#include "add_inter.h"
+#include "gdsbt.h"
+#include "gdsblk.h"
+#include "gdsfhead.h"
+#include "filestruct.h"
+#include "gdscc.h"
+#include "gdskill.h"
+#include "copy.h"
+#include "jnl.h"
+#include "buddy_list.h" /* needed for tp.h */
+#include "hashtab_int4.h" /* needed for tp.h */
+#include "tp.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
+#include "secshr_db_clnup.h"
+#include "sec_shr_blk_build.h"
+#include "cert_blk.h" /* for CERT_BLK_IF_NEEDED macro */
+#include "interlock.h"
+#include "relqueopi.h" /* for INSQTI and INSQHI macros */
+#include "caller_id.h"
+#include "sec_shr_map_build.h"
+#include "db_snapshot.h"
+#include "shmpool.h"
+#include "mupipbckup.h"
+
+GBLREF boolean_t certify_all_blocks;
+GBLREF inctn_detail_t inctn_detail; /* holds detail to fill in to inctn jnl record */
+GBLREF inctn_opcode_t inctn_opcode;
+GBLREF sgm_info *sgm_info_ptr;
+GBLREF uint4 process_id;
+#ifdef DEBUG
+GBLREF boolean_t dse_running;
+GBLREF node_local_ptr_t locknl;
+GBLREF gd_region *gv_cur_region; /* for the LOCK_HIST macro in the RELEASE_BUFF_UPDATE_LOCK macro */
+#endif
+
+/* Returns 0 if success, -1 if failure */
+int secshr_finish_CMT18(sgmnt_addrs *csa,
+ sgmnt_data_ptr_t csd, boolean_t is_bg, struct cw_set_element_struct *cs, sm_uc_ptr_t blk_ptr, trans_num currtn)
+{
+ blk_hdr_ptr_t old_block_ptr;
+ block_id blkid;
+ cache_que_heads_ptr_t cache_state;
+ cache_rec_ptr_t cr, cr_alt, start_cr;
+ int4 n;
+ int4 bufindx; /* should be the same type as "csd->bt_buckets" */
+ node_local_ptr_t cnl;
+ sm_uc_ptr_t bufstart;
+ snapshot_context_ptr_t lcl_ss_ctx;
+ uint4 blk_size;
+ int numargs;
+ gtm_uint64_t argarray[SECSHR_ACCOUNTING_MAX_ARGS];
+# ifdef DEBUG
+ jbuf_rsrv_struct_t *jrs;
+ DCL_THREADGBL_ACCESS;
+
+ SETUP_THREADGBL_ACCESS;
+ /* Assert that we never start db commit for any block until all journal records for this region have been written out */
+ jrs = dollar_tlevel ? csa->sgm_info_ptr->jbuf_rsrv_ptr : TREF(nontp_jbuf_rsrv);
+ assert((NULL == jrs) || !jrs->tot_jrec_len);
+# endif
+ blk_size = csd->blk_size;
+ blkid = cs->blk;
+ if (is_bg)
+ {
+ cache_state = csa->acc_meth.bg.cache_state;
+ start_cr = cache_state->cache_array + csd->bt_buckets;
+ bufstart = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, start_cr->buffaddr);
+ cr = cs->cr;
+ ASSERT_IS_WITHIN_SHM_BOUNDS((sm_uc_ptr_t)cr, csa);
+ assert(blk_ptr == (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr));
+ /* Before resetting cr->ondsk_blkver, ensure db_format in file header did not
+ * change in between phase1 (inside of crit) and phase2 (outside of crit).
+ * This is needed to ensure the correctness of the blks_to_upgrd counter.
+ */
+ assert(currtn > csd->desired_db_format_tn);
+ cr->ondsk_blkver = csd->desired_db_format;
+ } else
+ assert(blk_ptr == (MM_BASE_ADDR(csa) + (off_t)blk_size * blkid));
+ cnl = csa->nl;
+ /* Check if online backup is in progress and if there is a before-image to write.
+ * If so need to store link to it so wcs_recover can back it up later. Cannot
+ * rely on precomputed value csa->backup_in_prog since it is not initialized
+ * if (cw_depth == 0) (see t_end.c). Hence using cnl->nbb explicitly in check.
+ * However, for snapshots we can rely on csa as it is computed under
+ * if (update_trans). Use cs->blk_prior_state's free status to ensure that FREE
+ * blocks are not backed up either by secshr_db_clnup or wcs_recover.
+ */
+ if ((SNAPSHOTS_IN_PROG(csa) || (BACKUP_NOT_IN_PROGRESS != cnl->nbb)) && (NULL != cs->old_block))
+ { /* If online backup is concurrently running, backup the block here */
+ old_block_ptr = (blk_hdr_ptr_t)cs->old_block;
+ if (is_bg)
+ {
+ ASSERT_IS_WITHIN_SHM_BOUNDS((sm_uc_ptr_t)old_block_ptr, csa);
+ bufindx = ((sm_uc_ptr_t)old_block_ptr - bufstart) / blk_size;
+ assert(0 <= bufindx);
+ assert(bufindx < csd->n_bts);
+ cr_alt = &start_cr[bufindx];
+ assert(!cr->stopped || (cr != cr_alt));
+ assert(cr->stopped || (cr == cr_alt)
+ || (csd->asyncio && cr->backup_cr_is_twin && !cr_alt->backup_cr_is_twin));
+ assert(cr_alt->blk == blkid);
+ }
+ /* The following check is similar to the one in BG_BACKUP_BLOCK */
+ if (!WAS_FREE(cs->blk_prior_state) && (blkid >= cnl->nbb)
+ && (0 == csa->shmpool_buffer->failed)
+ && (old_block_ptr->tn < csa->shmpool_buffer->backup_tn)
+ && (old_block_ptr->tn >= csa->shmpool_buffer->inc_backup_tn))
+ {
+ if (is_bg)
+ backup_block(csa, blkid, cr_alt, NULL);
+ else
+ backup_block(csa, blkid, NULL, blk_ptr);
+ /* No need for us to flush the backup buffer. MUPIP BACKUP will anyways flush it at the end. */
+ }
+ if (SNAPSHOTS_IN_PROG(csa))
+ {
+ lcl_ss_ctx = SS_CTX_CAST(csa->ss_ctx);
+ if (blkid < lcl_ss_ctx->total_blks)
+ {
+ if (is_bg)
+ WRITE_SNAPSHOT_BLOCK(csa, cr_alt, NULL, blkid, lcl_ss_ctx);
+ else
+ WRITE_SNAPSHOT_BLOCK(csa, NULL, blk_ptr, blkid, lcl_ss_ctx);
+ }
+ }
+ }
+ if (gds_t_writemap == cs->mode)
+ sec_shr_map_build(csa, (uint4*)cs->upd_addr, blk_ptr, cs, currtn);
+ else if (0 != secshr_blk_full_build(dollar_tlevel, csa, csd, is_bg, cs, blk_ptr, currtn))
+ return -1; /* commit failed for this cse; move on to next cse */
+ if (0 > cs->reference_cnt)
+ { /* blocks were freed up */
+ assert(!dollar_tlevel);
+ assert((inctn_bmp_mark_free_gtm == inctn_opcode) || (inctn_bmp_mark_free_mu_reorg == inctn_opcode)
+ || (inctn_blkmarkfree == inctn_opcode) || dse_running);
+ /* Check if we are freeing a V4 format block and if so decrement the
+ * blks_to_upgrd counter. Do not do this in case MUPIP REORG UPGRADE/DOWNGRADE
+ * is marking a recycled block as free (inctn_opcode is inctn_blkmarkfree).
+ */
+ if (((inctn_bmp_mark_free_gtm == inctn_opcode) || (inctn_bmp_mark_free_mu_reorg == inctn_opcode))
+ && (0 != inctn_detail.blknum_struct.blknum))
+ DECR_BLKS_TO_UPGRD(csa, csd, 1);
+ }
+ assert(!cs->reference_cnt || (T_COMMIT_CRIT_PHASE2 != csa->t_commit_crit));
+ if (csa->now_crit)
+ { /* Even though we know cs->reference_cnt is guaranteed to be 0 if we are in
+ * phase2 of commit (see above assert), we still do not want to be touching
+ * free_blocks in the file header outside of crit as it could potentially
+ * result in an incorrect value of the free_blocks counter. This is because
+ * in between the time we note down the current value of free_blocks on the
+ * right hand side of the below expression and assign the same value to the
+ * left side, it is possible that a concurrent process holding crit could
+ * have updated the free_blocks counter. In that case, our update would
+ * result in incorrect values. Hence don't touch this field if phase2.
+ */
+ csd->trans_hist.free_blocks -= cs->reference_cnt;
+ }
+ cs->old_mode = (int4)cs->mode;
+ assert(0 < cs->old_mode);
+ cs->mode = gds_t_committed; /* rolls forward Step (CMT18) */
+ CERT_BLK_IF_NEEDED(certify_all_blocks, csa->region, cs, blk_ptr, ((gv_namehead *)NULL));
+ cr = cs->cr;
+ assert(!cr->stopped || (process_id == cr->stopped));
+ if (!is_bg)
+ return 0;
+ assert(process_id == cr->in_tend);
+ if (!cr->stopped)
+ { /* Reset cr->in_tend now that cr is uptodate. Take this opportunity to reset cr->in_cw_set and the
+ * write interlock thereby simulating exactly what bg_update_phase2 would have done. Also check cr->data_invalid.
+ */
+ if (cr->data_invalid)
+ { /* Buffer is already in middle of update. Since blk builds are not redoable, db is in danger whether
+ * or not we redo the build. Since, skipping the build is guaranteed to give us integrity errors, we
+ * redo the build hoping it will have at least a 50% chance of resulting in a clean block. Make sure
+ * data_invalid flag is set until the next cache-recovery (wcs_recover will send a DBDANGER syslog
+ * message for this block to alert of potential database damage) by setting donot_reset_data_invalid.
+ */
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_finish_CMT18);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cs);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cr);
+ SECSHR_ACCOUNTING(numargs, argarray, cr->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, cr->data_invalid);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ }
+ /* Release write interlock. The following code is very similar to that at the end of "bg_update_phase2" */
+ DEBUG_ONLY(locknl = cnl;) /* Avoid using gv_cur_region in the LOCK_HIST macro that is
+ * used by the RELEASE_BUFF_UPDATE_LOCK macro by setting locknl
+ */
+ if (!cr->tn)
+ {
+ cr->jnl_addr = cs->jnl_freeaddr;
+ assert(LATCH_SET == WRITE_LATCH_VAL(cr));
+ /* Cache-record was not dirty BEFORE this update. Insert this in the active queue. */
+ n = INSQTI((que_ent_ptr_t)&cr->state_que, (que_head_ptr_t)&cache_state->cacheq_active);
+ if (INTERLOCK_FAIL == n)
+ {
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_finish_CMT18);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cr);
+ SECSHR_ACCOUNTING(numargs, argarray, cr->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, n);
+ SECSHR_ACCOUNTING(numargs, argarray, cache_state->cacheq_active.fl);
+ SECSHR_ACCOUNTING(numargs, argarray, cache_state->cacheq_active.bl);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ }
+ ADD_ENT_TO_ACTIVE_QUE_CNT(cnl);
+ }
+ RELEASE_BUFF_UPDATE_LOCK(cr, n, &cnl->db_latch);
+ /* "n" holds the pre-release value so check that we did hold the
+ * lock before releasing it above.
+ */
+ assert(LATCH_CONFLICT >= n);
+ assert(LATCH_CLEAR < n);
+ if (WRITER_BLOCKED_BY_PROC(n))
+ {
+ n = INSQHI((que_ent_ptr_t)&cr->state_que, (que_head_ptr_t)&cache_state->cacheq_active);
+ if (INTERLOCK_FAIL == n)
+ {
+ numargs = 0;
+ SECSHR_ACCOUNTING(numargs, argarray, __LINE__);
+ SECSHR_ACCOUNTING(numargs, argarray, sac_secshr_finish_CMT18);
+ SECSHR_ACCOUNTING(numargs, argarray, (INTPTR_T)cr);
+ SECSHR_ACCOUNTING(numargs, argarray, cr->blk);
+ SECSHR_ACCOUNTING(numargs, argarray, n);
+ SECSHR_ACCOUNTING(numargs, argarray, cache_state->cacheq_active.fl);
+ SECSHR_ACCOUNTING(numargs, argarray, cache_state->cacheq_active.bl);
+ secshr_send_DBCLNUPINFO_msg(csa, numargs, argarray);
+ assert(FALSE);
+ }
+ }
+ } else
+ {
+ assert(process_id == cr->stopped);
+ assert(!cr->backup_cr_is_twin);
+ }
+ RESET_CR_IN_TEND_AFTER_PHASE2_COMMIT(cr, csa, csd); /* resets cr->in_tend & cr->in_cw_set
+ * (for older twin too if needed).
+ */
+ return 0;
+}
diff --git a/sr_port/secshr_finish_CMT18_to_CMT19.c b/sr_port/secshr_finish_CMT18_to_CMT19.c
new file mode 100644
index 0000000..8594f81
--- /dev/null
+++ b/sr_port/secshr_finish_CMT18_to_CMT19.c
@@ -0,0 +1,182 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "gdsroot.h"
+#include "add_inter.h"
+#include "gdsbt.h"
+#include "gdsblk.h"
+#include "gdsfhead.h"
+#include "filestruct.h"
+#include "gdscc.h"
+#include "gdskill.h"
+#include "copy.h"
+#include "jnl.h"
+#include "buddy_list.h" /* needed for tp.h */
+#include "hashtab_int4.h" /* needed for tp.h */
+#include "tp.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
+#include "secshr_db_clnup.h"
+#include "sec_shr_blk_build.h"
+#include "cert_blk.h" /* for CERT_BLK_IF_NEEDED macro */
+#include "interlock.h"
+#include "relqueopi.h" /* for INSQTI and INSQHI macros */
+#include "caller_id.h"
+#include "db_snapshot.h"
+#include "gdsbgtr.h"
+
+GBLREF cw_set_element cw_set[];
+GBLREF unsigned char cw_set_depth;
+GBLREF trans_num start_tn;
+GBLREF unsigned int cr_array_index;
+#ifdef DEBUG
+GBLREF cache_rec_ptr_t cr_array[]; /* Maximum number of blocks that can be in transaction */
+#endif
+
+GBLREF uint4 process_id;
+
+error_def(ERR_WCBLOCKED);
+
+void secshr_finish_CMT18_to_CMT19(sgmnt_addrs *csa)
+{
+ boolean_t is_bg;
+ cache_rec_ptr_t cr;
+ char *wcblocked_ptr;
+ cw_set_element *cs, *cs_ptr, *cs_top, *first_cw_set, *next_cs;
+ node_local_ptr_t cnl;
+ sgm_info *si;
+ sgmnt_data_ptr_t csd;
+ sm_uc_ptr_t blk_ptr;
+ trans_num currtn;
+# ifdef DEBUG
+ boolean_t cr_stopped_seen;
+ cache_rec_ptr_t *crArray;
+ unsigned int crArrayIndex;
+# endif
+
+ if (FALSE == csa->t_commit_crit) /* Step CMT19 is already done. Nothing more to do. */
+ return;
+ assert(!csa->now_crit || csa->hold_onto_crit); /* Caller "secshr_db_clnup" should have ensured we released crit
+ * before coming here. The only exception is if csa->hold_onto_crit
+ * is set (e.g. dse) so account for that in the assert.
+ */
+ csd = csa->hdr;
+ is_bg = (dba_bg == csd->acc_meth);
+ if (!is_bg)
+ { /* Step CMT18 already done as part of CMT10a for MM in "secshr_finish_CMT08_to_CMT14" */
+ csa->t_commit_crit = FALSE; /* Step CMT19 */
+ return; /* If MM, phase2 commit is already done */
+ }
+ /* Since we are in phase2 of commit (don't have crit), use value stored in "start_tn" or "si->start_tn" as currtn */
+ if (dollar_tlevel)
+ {
+ si = csa->sgm_info_ptr;
+ first_cw_set = si->first_cw_set;
+ currtn = si->start_tn; /* tn at which phase1 happened in crit */
+ } else
+ {
+ first_cw_set = (0 != cw_set_depth) ? cw_set : NULL;
+ currtn = start_tn; /* tn at which phase1 happened in crit */
+ }
+ if (NULL != first_cw_set)
+ {
+ assert(T_COMMIT_CRIT_PHASE2 == csa->t_commit_crit);
+ assert(currtn < csa->ti->curr_tn);
+ cnl = csa->nl;
+ cs = first_cw_set;
+ cs_top = (dollar_tlevel ? NULL : (cs + cw_set_depth));
+ DEBUG_ONLY(cr_stopped_seen = FALSE;)
+ for (next_cs = cs; cs_top != cs; cs = next_cs)
+ {
+ if (dollar_tlevel)
+ {
+ next_cs = next_cs->next_cw_set;
+ TRAVERSE_TO_LATEST_CSE(cs);
+ } else
+ next_cs = cs + 1;
+# ifdef DEBUG
+ if ((NULL != cs->cr) && (0 != cs->cr->stopped))
+ cr_stopped_seen = TRUE;
+# endif
+ if (gds_t_committed == cs->mode)
+ continue;
+ /* At this point, a positive value of "cs->old_mode" implies phase1 did not complete on "cs".
+ * This is possible for example if "secshr_finish_CMT08_to_CMT14" could not find a cr in the
+ * global buffers for this cs. In that case, skip this cr. Error messages corresponding to this
+ * missed block commit would have been recorded in "secshr_finish_CMT08_to_CMT14".
+ * There is one more possibility and that is if it there was a cse with mode > gds_t_committed
+ * (for example gds_t_write_root etc.) and phase1 was finished in t_end/tp_tend but an error occurred
+ * in phase2 when "secshr_db_clnup" took control. In that case, t_end/tp_tend would have set cs->old_mode
+ * to a positive value but that should be > gds_t_committed. Assert that.
+ */
+ if (0 <= cs->old_mode)
+ {
+ assert(gds_t_committed < cs->old_mode);
+ continue;
+ }
+ assert(gds_t_writemap != cs->mode);
+ cr = cs->cr;
+ ASSERT_IS_WITHIN_SHM_BOUNDS((sm_uc_ptr_t)cr, csa);
+ blk_ptr = (sm_uc_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr);
+ if (0 != secshr_finish_CMT18(csa, csd, is_bg, cs, blk_ptr, currtn))
+ continue; /* error during CMT18, move on to next cs */
+ }
+# ifdef DEBUG
+ if (!cr_stopped_seen)
+ { /* We did not pick any crs in "secshr_finish_CMT08_to_CMT14" (those with cr->stopped non-zero).
+ * This means we can be sure when phase2 of commit is done, all crs have been unpinned. Assert accordingly.
+ */
+ if (dollar_tlevel)
+ {
+ crArray = si->cr_array;
+ crArrayIndex = si->cr_array_index;
+ } else
+ {
+ crArray = cr_array;
+ crArrayIndex = cr_array_index;
+ }
+ ASSERT_CR_ARRAY_IS_UNPINNED(csd, crArray, crArrayIndex);
+ }
+# endif
+ if (dollar_tlevel)
+ si->cr_array_index = 0;
+ else
+ cr_array_index = 0; /* Take this opportunity to reset cr_array_index */
+ /* Now that phase2 of commit (all block builds) is done, set wc_blocked to trigger cache recovery */
+ /* If csa->t_commit_crit is TRUE, even if csa->now_crit is FALSE, we might need cache
+ * cleanup (e.g. cleanup of orphaned cnl->wcs_phase2_commit_pidcnt counter in case
+ * a process gets shot in the midst of DECR_WCS_PHASE2_COMMIT_PIDCNT macro before
+ * decrementing the shared counter but after committing the transaction otherwise)
+ * so set wc_blocked.
+ */
+ SET_TRACEABLE_VAR(cnl->wc_blocked, TRUE);
+ wcblocked_ptr = WCBLOCKED_PHASE2_CLNUP_LIT;
+ BG_TRACE_PRO_ANY(csa, wcb_secshr_db_clnup_phase2_clnup);
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_WCBLOCKED, 6, LEN_AND_STR(wcblocked_ptr),
+ process_id, &csd->trans_hist.curr_tn, DB_LEN_STR(csa->region));
+ /* Now that wc_blocked has been set, clean up the phase2 commit for this pid */
+ if (csa->wcs_pidcnt_incremented)
+ DECR_WCS_PHASE2_COMMIT_PIDCNT(csa, cnl);
+ /* Phase 2 commits are completed for the current region. See if we had done a snapshot
+ * init (csa->snapshot_in_prog == TRUE). If so, try releasing the resources obtained
+ * while snapshot init.
+ */
+ if (SNAPSHOTS_IN_PROG(csa))
+ {
+ assert(NULL != first_cw_set);
+ SS_RELEASE_IF_NEEDED(csa, cnl);
+ }
+ }
+ csa->t_commit_crit = FALSE; /* Step CMT19 */
+}
diff --git a/sr_port/secshr_rel_crit.c b/sr_port/secshr_rel_crit.c
new file mode 100644
index 0000000..6c04de8
--- /dev/null
+++ b/sr_port/secshr_rel_crit.c
@@ -0,0 +1,83 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "gdsroot.h"
+#include "gtm_facility.h"
+#include "fileinfo.h"
+#include "gdsbt.h"
+#include "gdsfhead.h"
+#include "filestruct.h"
+#include "jnl.h"
+#include "mutex.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
+#include "secshr_db_clnup.h"
+#ifdef DEBUG
+#include "caller_id.h" /* for CRIT_TRACE macro */
+#endif
+
+GBLREF short crash_count;
+GBLREF volatile int4 crit_count;
+GBLREF uint4 process_id;
+#ifdef DEBUG
+GBLREF node_local_ptr_t locknl;
+GBLREF jnl_gbls_t jgbl;
+#endif
+
+/* Routine to release crit on a db or jnlpool region ("reg" parameter) called from "secshr_db_clnup".
+ * "is_repl_reg" is TRUE if "reg" is a jnlpool region and FALSE if it is a db region.
+ * "is_exiting" is TRUE if the caller is secshr_db_clnup(NORMAL_TERMINATION)
+ * and FALSE if the caller is secshr_db_clnup(COMMIT_INCOMPLETE).
+ */
+void secshr_rel_crit(gd_region *reg, boolean_t is_exiting, boolean_t is_repl_reg)
+{
+ sgmnt_addrs *csa;
+ node_local_ptr_t cnl;
+ int crashcnt;
+
+# ifdef DEBUG
+ if (!is_repl_reg)
+ {
+ assert(NULL != reg);
+ assert(reg->open);
+ }
+# endif
+ if (is_repl_reg && ((NULL == reg) || !reg->open))
+ return;
+ csa = REG2CSA(reg);
+ assert(NULL != csa);
+ /* ONLINE ROLLBACK can come here holding crit, only due to commit errors (COMMIT_INCOMPLETE) but NOT during
+ * process exiting as "secshr_db_clnup" during process exiting is always preceded by "mur_close_files" which
+ * does the "rel_crit" anyways. Assert that.
+ */
+ assert(!csa->now_crit || !csa->hold_onto_crit || !jgbl.onlnrlbk || !is_exiting);
+ cnl = csa->nl;
+ if (!csa->hold_onto_crit || is_exiting)
+ { /* Release crit but since it involves modifying more than one field, make sure we prevent interrupts while
+ * in this code. The global variable "crit_count" does this for us. See similar usage in rel_crit.c.
+ */
+ assert(0 == crit_count);
+ crit_count++; /* prevent interrupts */
+ CRIT_TRACE(csa, crit_ops_rw); /* see gdsbt.h for comment on placement */
+ if (cnl->in_crit == process_id)
+ cnl->in_crit = 0;
+ csa->hold_onto_crit = FALSE;
+ DEBUG_ONLY(locknl = cnl;) /* for DEBUG_ONLY LOCK_HIST macro */
+ crashcnt = (is_repl_reg ? 0 : crash_count);
+ mutex_unlockw(reg, crashcnt); /* roll forward Step (CMT15) */
+ assert(!csa->now_crit);
+ DEBUG_ONLY(locknl = NULL;) /* restore "locknl" to default value */
+ crit_count = 0;
+ }
+}
diff --git a/sr_port/secshr_send_DBCLNUPINFO_msg.c b/sr_port/secshr_send_DBCLNUPINFO_msg.c
new file mode 100644
index 0000000..dcb8670
--- /dev/null
+++ b/sr_port/secshr_send_DBCLNUPINFO_msg.c
@@ -0,0 +1,44 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+
+#include "gtm_string.h"
+
+#include "gdsroot.h"
+#include "gdsbt.h"
+#include "gdsblk.h"
+#include "gdsfhead.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
+#include "secshr_db_clnup.h"
+#include "send_msg.h" /* for send_msg prototype */
+
+error_def(ERR_DBCLNUPINFO);
+
+void secshr_send_DBCLNUPINFO_msg(sgmnt_addrs *csa, int numargs, gtm_uint64_t *argarray)
+{
+ int i;
+ char secshr_string[2048];
+ char secshr_string_delta[256];
+
+ secshr_string[0] = '\0';
+ for (i = 0; i < numargs; i += 2)
+ {
+ if (0 != i)
+ strcat(secshr_string, " : ");
+ SPRINTF(secshr_string_delta, "%s = [0x%08lx]", argarray[i], argarray[i+1]);
+ strcat(secshr_string, secshr_string_delta);
+ }
+ assert(ARRAYSIZE(secshr_string) > strlen(secshr_string));
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(6) ERR_DBCLNUPINFO, 4, DB_LEN_STR(csa->region), RTS_ERROR_TEXT(secshr_string));
+}
diff --git a/sr_port/sgnl_gvnulsubsc.c b/sr_port/sgnl_gvnulsubsc.c
index d13da52..7c3e73f 100755
--- a/sr_port/sgnl_gvnulsubsc.c
+++ b/sr_port/sgnl_gvnulsubsc.c
@@ -25,6 +25,8 @@ GBLREF gv_key *gv_currkey;
error_def(ERR_GVIS);
error_def(ERR_NULSUBSC);
+#define NONULLSUBS "Update failed because"
+
void sgnl_gvnulsubsc(void)
{
unsigned char buff[MAX_ZWR_KEY_SZ], *end;
@@ -33,6 +35,6 @@ void sgnl_gvnulsubsc(void)
{ end = &buff[MAX_ZWR_KEY_SZ - 1];
}
gv_currkey->end = 0;
- rts_error_csa(NULL, VARLSTCNT(8) ERR_NULSUBSC, 2, gv_cur_region->rname_len, &gv_cur_region->rname[0],
+ rts_error_csa(NULL, VARLSTCNT(8) ERR_NULSUBSC, 2, STRLEN(NONULLSUBS), NONULLSUBS,
ERR_GVIS, 2, end - &buff[0], &buff[0]);
}
diff --git a/sr_port/stp_gcol_src.h b/sr_port/stp_gcol_src.h
index 661aa79..3473f97 100644
--- a/sr_port/stp_gcol_src.h
+++ b/sr_port/stp_gcol_src.h
@@ -88,8 +88,8 @@ GBLREF io_log_name *io_root_log_name;
GBLREF lvzwrite_datablk *lvzwrite_block;
GBLREF mliteral literal_chain;
GBLREF mstr *comline_base, **stp_array;
-GBLREF mval dollar_etrap, dollar_system, dollar_zerror, dollar_zgbldir, dollar_zstatus, dollar_zstep;
-GBLREF mval dollar_ztrap, dollar_zyerror, zstep_action, dollar_zinterrupt, dollar_zsource, dollar_ztexit;
+GBLREF mval dollar_system, dollar_zerror, dollar_zgbldir, dollar_zstatus;
+GBLREF mval dollar_zyerror, zstep_action, dollar_zinterrupt, dollar_zsource, dollar_ztexit;
GBLREF mv_stent *mv_chain;
GBLREF sgm_info *first_sgm_info;
GBLREF spdesc indr_stringpool, rts_stringpool, stringpool;
@@ -114,6 +114,8 @@ OS_PAGE_SIZE_DECLARE
static mstr **topstr, **array, **arraytop;
error_def(ERR_STPEXPFAIL);
+error_def(ERR_STPCRIT);
+error_def(ERR_STPOFLOW);
/* See comment inside LV_NODE_KEY_STPG_ADD macro for why the ASSERT_LV_NODE_MSTR_EQUIVALENCE macro does what it does */
#define ASSERT_LV_NODE_MSTR_EQUIVALENCE \
@@ -697,14 +699,14 @@ void stp_gcol(size_t space_asked) /* BYPASSOK */
}
}
}
- MVAL_STPG_ADD(&dollar_etrap);
+ MVAL_STPG_ADD(&(TREF(dollar_etrap)));
MVAL_STPG_ADD(&dollar_system);
MVAL_STPG_ADD(&dollar_zsource);
- MVAL_STPG_ADD(&dollar_ztrap);
+ MVAL_STPG_ADD(&(TREF(dollar_ztrap)));
MVAL_STPG_ADD(&dollar_zstatus);
MVAL_STPG_ADD(&dollar_zgbldir);
MVAL_STPG_ADD(&dollar_zinterrupt);
- MVAL_STPG_ADD(&dollar_zstep);
+ MVAL_STPG_ADD(&(TREF(dollar_zstep)));
MVAL_STPG_ADD(&zstep_action);
MVAL_STPG_ADD(&dollar_zerror);
MVAL_STPG_ADD(&dollar_ztexit);
@@ -979,6 +981,10 @@ void stp_gcol(size_t space_asked) /* BYPASSOK */
expansion_failed = FALSE; /* will be set to TRUE by condition handler if can't get memory */
assert((stp_incr + stringpool.top - stringpool.base) >= (space_needed + blklen));
DBGSTPGCOL((stderr, "incr_factor=%i stp_incr=%i space_needed=%i\n", *incr_factor, stp_incr, space_needed));
+ if ((TREF(gtm_strpllimwarned)) /* previously warned */
+ && (0 < TREF(gtm_strpllim)) /* watching a stp limit */
+ && ((stp_incr + stringpool.top - stringpool.base) > TREF(gtm_strpllim))) /* expanding larger */
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_STPOFLOW);
expand_stp((ssize_t)(stp_incr + stringpool.top - stringpool.base));
# ifdef DEBUG
/* If expansion failed and stp_gcol_ch did an UNWIND and we were already in exit handling code,
@@ -1091,5 +1097,11 @@ void stp_gcol(size_t space_asked) /* BYPASSOK */
lvmon_compare_value_slots(1, 2); /* Make sure they are the same */
}
# endif /* !STP_MOVE */
+ if ((0 < TREF(gtm_strpllim)) /* monitoring stp limit */
+ && ((stringpool.top - stringpool.base) > TREF(gtm_strpllim))) /* past the stp limit */
+ {
+ TREF(gtm_strpllimwarned) = TRUE;
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_STPCRIT);
+ }
return;
}
diff --git a/sr_port/stpg_sort.c b/sr_port/stpg_sort.c
index 20f1e51..50a5a9b 100755
--- a/sr_port/stpg_sort.c
+++ b/sr_port/stpg_sort.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2007 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -56,14 +57,7 @@ void stpg_sort (mstr **base, mstr **top)
{
ix = l;
jx = r;
- kx = l + ((int)(r - l) / 2);
- kx = ((*ix)->addr > (*jx)->addr) ?
- (((*jx)->addr > (*kx)->addr) ?
- jx :
- (((*ix)->addr > (*kx)->addr) ? kx : ix)) :
- (((*jx)->addr < (*kx)->addr) ?
- jx :
- (((*ix)->addr > (*kx)->addr) ? ix : kx));
+ kx = l + ((int)(r - l) / 2); /* kx is middle */
v = *kx;
*kx = *jx;
*jx = v;
@@ -74,11 +68,11 @@ void stpg_sort (mstr **base, mstr **top)
do
{
ix++;
- } while ((*ix)->addr < tval);
+ } while (ix < r && (*ix)->addr < tval);
do
{
jx--;
- } while ((*jx)->addr > tval);
+ } while (jx > l && (*jx)->addr > tval);
t = *ix;
*ix = *jx;
*jx = t;
diff --git a/sr_port/stx_error.c b/sr_port/stx_error.c
index a43ee04..47c27a2 100755
--- a/sr_port/stx_error.c
+++ b/sr_port/stx_error.c
@@ -53,6 +53,7 @@ error_def(ERR_PATNOTFOUND);
error_def(ERR_SRCLIN);
error_def(ERR_SRCLOC);
error_def(ERR_SRCNAM);
+error_def(ERR_TEXT);
void stx_error(int in_error, ...)
{
@@ -106,6 +107,15 @@ void stx_error_va(int in_error, va_list args)
}
if (TREF(for_stack_ptr) > (oprtype **)TADR(for_stack))
FOR_POP(BLOWN_FOR);
+ if (&(TREF(dollar_etrap)) == TREF(ind_source))
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) in_error, 0, ERR_TEXT, 2, RTS_ERROR_TEXT("in $gtm_etrap" ));
+ # ifdef GTM_TRIGGER
+ if (&(TREF(gtm_trigger_etrap)) == TREF(ind_source))
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) in_error, 0, ERR_TEXT, 2,
+ RTS_ERROR_TEXT("in $gtm_trigger_etrap" ));
+# endif
+ if (&(TREF(dollar_zstep)) == TREF(ind_source))
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) in_error, 0, ERR_TEXT, 2, RTS_ERROR_TEXT("in $gtm_zstep" ));
if (ERR_BADCHAR == in_error)
{
cnt = va_arg(args, VA_ARG_TYPE);
diff --git a/sr_port/svnames.h b/sr_port/svnames.h
index 7ef5a13..6ba6fba 100755
--- a/sr_port/svnames.h
+++ b/sr_port/svnames.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -87,6 +87,7 @@ enum
SV_ZPOUT, /* 72 */
SV_ZHOROLOG, /* 73 */
SV_ZUT, /* 74 */
+ SV_ZSTRPLLIM, /* 75 */
SV_NUM_SV, /* count - should be next to last SV entry just prior to dummy entry below */
SV_DUMMY_TO_FORCE_INT = 0x0FFFFFFF /* to ensure an int on S390 */
};
diff --git a/sr_port/symb_line.c b/sr_port/symb_line.c
index e24aee6..a4800a1 100644
--- a/sr_port/symb_line.c
+++ b/sr_port/symb_line.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2010 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -21,7 +22,6 @@
GBLREF unsigned char *stackbase, *stacktop;
GBLREF unsigned short proc_act_type;
GBLREF mstr *err_act;
-GBLREF mval dollar_ztrap;
unsigned char *symb_line(unsigned char *in_addr, unsigned char *out, unsigned char **b_line, rhdtyp *routine)
{
@@ -30,7 +30,9 @@ unsigned char *symb_line(unsigned char *in_addr, unsigned char *out, unsigned ch
lnr_tabent *line_table, *last_line;
int4 len, ct, offset, in_addr_offset;
boolean_t mpc_reset_to_linestart;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
if (!ADDR_IN_CODE(in_addr, routine))
return out;
routine = CURRENT_RHEAD_ADR(routine);
@@ -44,7 +46,7 @@ unsigned char *symb_line(unsigned char *in_addr, unsigned char *out, unsigned ch
);
assert(routine->labtab_len >= 0);
assert(routine->lnrtab_len >= 0);
- if ((SFT_DEV_ACT == proc_act_type) || ((SFT_ZTRAP == proc_act_type) && (err_act == &dollar_ztrap.str)))
+ if ((SFT_DEV_ACT == proc_act_type) || ((SFT_ZTRAP == proc_act_type) && (err_act == &((TREF(dollar_ztrap)).str))))
{ /* This means we got an error while trying to compile the device-exception or ZTRAP string as
* part of handling yet another primary error. The primary error would have reset fp->mpc to
* the beginning of the line so note this down.
diff --git a/sr_port/t_commit_cleanup.c b/sr_port/t_commit_cleanup.c
index 154e572..fc4e71c 100644
--- a/sr_port/t_commit_cleanup.c
+++ b/sr_port/t_commit_cleanup.c
@@ -28,11 +28,11 @@
#include "buddy_list.h" /* needed for tp.h */
#include "hashtab_int4.h" /* needed for tp.h */
#include "tp.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs structure definition */
#include "secshr_db_clnup.h"
#include "t_commit_cleanup.h"
#include "process_deferred_stale.h"
-#include "repl_msg.h" /* for gtmsource.h */
-#include "gtmsource.h" /* for jnlpool_addrs structure definition */
#include "send_msg.h"
#include "have_crit.h"
#include "aswp.h"
@@ -50,8 +50,7 @@ GBLREF sgm_info *first_tp_si_by_ftok; /* List of participating regions in the T
GBLREF tp_region *tp_reg_list; /* List of tp_regions for this transaction */
GBLREF gd_region *gv_cur_region;
GBLREF gv_namehead *gv_target;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF unsigned int t_tries;
GBLREF boolean_t unhandled_stale_timer_pop;
@@ -82,7 +81,7 @@ error_def(ERR_DBCOMMITCLNUP);
} \
}
-#define T_COMMIT_CLEANUP_DB(CR_ARRAY, CR_ARRAY_INDEX, CS_ADDRS, UPDATE_TRANS, JNLPOOL_CTL, JGBL, RELEASE_CRIT, GV_CUR_REGION) \
+#define T_COMMIT_CLEANUP_DB(CR_ARRAY, CR_ARRAY_INDEX, CS_ADDRS, UPDATE_TRANS, JNLPOOL, JGBL, RELEASE_CRIT, GV_CUR_REGION) \
MBSTART { \
cache_rec_ptr_t *crArray; \
sgmnt_addrs *csa; \
@@ -97,7 +96,7 @@ MBSTART { \
csa = CS_ADDRS; \
assert(!csa->t_commit_crit); \
assert(!csa->now_crit || (csa->ti->curr_tn == csa->ti->early_tn)); \
- ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csa->hdr, JNLPOOL_CTL); /* debug-only sanity check between \
+ ASSERT_JNL_SEQNO_FILEHDR_JNLPOOL(csa, JNLPOOL); /* debug-only sanity check between \
* seqno of filehdr and jnlpool */ \
csd = csa->hdr; \
/* Note: Below code is slightly similar to that in "mutex_salvage" */ \
@@ -136,8 +135,9 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
{
boolean_t update_underway, reg_seqno_reset = FALSE, release_crit;
cache_rec_ptr_t cr;
- sgm_info *si;
- sgmnt_addrs *csa;
+ sgm_info *si, *jnlpool_si = NULL;
+ sgmnt_addrs *csa, *jpl_csa = NULL, *jnlpool_csa = NULL;
+ jnlpool_addrs_ptr_t save_jnlpool, save2_jnlpool, update_jnlpool = NULL;
tp_region *tr;
char *trstr;
gd_region *xactn_err_region, *jpl_reg = NULL;
@@ -155,6 +155,12 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
* the roll-back and one the roll-forward). update_underway is set to TRUE to indicate the commit is beyond rollback.
*/
update_underway = FALSE;
+ save_jnlpool = jnlpool;
+ if (cs_addrs->jnlpool && (jnlpool != cs_addrs->jnlpool))
+ {
+ jnlpool_csa = cs_addrs;
+ jnlpool = cs_addrs->jnlpool;
+ }
if (dollar_tlevel)
{
trstr = "TP";
@@ -177,11 +183,20 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
if (NULL != si->first_cw_set)
{
csa = si->tp_csa;
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ {
+ assert(!update_jnlpool || (!csa->jnlpool || (update_jnlpool == csa->jnlpool)));
+ jnlpool_si = si;
+ jnlpool_csa = csa;
+ jnlpool = csa->jnlpool;
+ }
if (T_UPDATE_UNDERWAY(csa))
{
update_underway = TRUE;
break;
}
+ if (!update_jnlpool && REPL_ALLOWED(csa))
+ update_jnlpool = jnlpool;
}
}
} else
@@ -191,6 +206,7 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
update_underway = T_UPDATE_UNDERWAY(cs_addrs);
if (NULL != gv_target) /* gv_target can be NULL in case of DSE MAPS command etc. */
gv_target->clue.end = 0; /* in case t_end() had set history's tn to be "valid_thru++", undo it */
+ update_jnlpool = cs_addrs->jnlpool ? cs_addrs->jnlpool : jnlpool;
}
if (!update_underway)
{ /* Rollback (undo) the transaction. the comments below refer to CMTxx step numbers described in secshr_db_clnup.
@@ -201,12 +217,14 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
* to the error trap thereby avoiding any unintended crit hangs.
*/
release_crit = (0 == signal) ? NEED_TO_RELEASE_CRIT(t_tries, status) : TRUE;
- if ((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open)
+ assert(!dollar_tlevel || !update_jnlpool || !jnlpool_si || (!jnlpool || (update_jnlpool == jnlpool)));
+ if (update_jnlpool && update_jnlpool->jnlpool_dummy_reg && update_jnlpool->jnlpool_dummy_reg->open)
{
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = &FILE_INFO(update_jnlpool->jnlpool_dummy_reg)->s_addrs;
if (csa->now_crit)
{ /* Undo Step CMT03. Note: The below code is similar to that in "mutex_salvage" for the jnlpool */
- jpl = jnlpool.jnlpool_ctl;
+ assert(update_jnlpool->jnlpool_ctl);
+ jpl = update_jnlpool->jnlpool_ctl;
index1 = jpl->phase2_commit_index1;
index2 = jpl->phase2_commit_index2;
if (index1 != index2)
@@ -224,7 +242,7 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
}
}
if (!csa->hold_onto_crit)
- jpl_reg = jnlpool.jnlpool_dummy_reg; /* note down to release crit later */
+ jpl_reg = update_jnlpool->jnlpool_dummy_reg; /* note down to release crit later */
}
}
if (dollar_tlevel)
@@ -234,13 +252,15 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
* we release crit on all the regions.
*/
DEBUG_ONLY(lcl_t_tries = t_tries);
+ save2_jnlpool = jnlpool;
for (si = first_sgm_info; NULL != si; si = si->next_sgm_info)
{
- TP_CHANGE_REG(si->gv_cur_region);
+ TP_CHANGE_REG(si->gv_cur_region); /* sets jnlpool */
/* Undo CMT06, CMT04 and CMT01 */
T_COMMIT_CLEANUP_DB(&si->cr_array[0], si->cr_array_index, cs_addrs, si->update_trans, \
- jnlpool_ctl, jgbl, release_crit, gv_cur_region);
+ jnlpool, jgbl, release_crit, gv_cur_region);
}
+ jnlpool = save2_jnlpool;
if (release_crit)
{ /* If final retry and released crit (in the above loop), do the following
* Decrement t_tries to ensure that we don't have an out-of-design situation
@@ -272,11 +292,11 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
{
/* Undo CMT06, CMT04 and CMT01 */
T_COMMIT_CLEANUP_DB(cr_array, cr_array_index, cs_addrs, update_trans, \
- jnlpool_ctl, jgbl, release_crit, gv_cur_region);
+ jnlpool, jgbl, release_crit, gv_cur_region);
RELEASE_JNLPOOL_LOCK_IF_NEEDED(jpl_reg); /* Undo Step (CMT02) */
}
# ifdef DEBUG
- csa = (NULL == jpl_reg) ? NULL : &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = (NULL == jpl_reg) ? NULL : &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
assert((NULL == csa) || !csa->now_crit || csa->hold_onto_crit);
# endif
/* Do any pending buffer flush (wcs_wtstart) if we missed a flush timer. We should do this ONLY if we don't hold
@@ -306,5 +326,7 @@ boolean_t t_commit_cleanup(enum cdb_sc status, int signal)
if (unhandled_stale_timer_pop)
process_deferred_stale();
}
+ if (jnlpool != save_jnlpool)
+ jnlpool = save_jnlpool;
return update_underway;
}
diff --git a/sr_port/t_end.c b/sr_port/t_end.c
index f405565..5d3b607 100644
--- a/sr_port/t_end.c
+++ b/sr_port/t_end.c
@@ -99,8 +99,7 @@ GBLREF unsigned int t_tries;
GBLREF uint4 t_err, process_id;
GBLREF unsigned char cw_set_depth, cw_map_depth;
GBLREF unsigned char rdfail_detail;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_updproc;
GBLREF seq_num seq_num_one;
GBLREF boolean_t mu_reorg_process;
@@ -124,7 +123,7 @@ GBLREF inctn_opcode_t inctn_opcode;
GBLREF inctn_detail_t inctn_detail; /* holds detail to fill in to inctn jnl record */
GBLREF boolean_t block_is_free;
GBLREF boolean_t gv_play_duplicate_kills;
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
GBLREF gv_key *gv_currkey;
GBLREF recvpool_addrs recvpool;
GBLREF int4 strm_index;
@@ -188,6 +187,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
jnl_private_control *jpc;
jnl_buffer_ptr_t jbp, jbbp; /* jbp is non-NULL if journaling, jbbp is non-NULL only if before-image journaling */
sgmnt_addrs *csa, *repl_csa;
+ DEBUG_ONLY(sgmnt_addrs *jnlpool_csa = NULL;)
sgmnt_data_ptr_t csd;
node_local_ptr_t cnl;
sgm_info *dummysi = NULL; /* needed as a dummy parameter for {mm,bg}_update */
@@ -198,6 +198,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
uint4 total_jnl_rec_size, tmp_cw_set_depth, prev_cw_set_depth;
DEBUG_ONLY(unsigned int tot_jrec_size;)
jnlpool_ctl_ptr_t jpl;
+ jnlpool_addrs_ptr_t save_jnlpool, tmp_jnlpool;
boolean_t replication = FALSE;
boolean_t supplementary = FALSE; /* this variable is initialized ONLY if "replication" is TRUE. */
seq_num strm_seqno, next_strm_seqno;
@@ -254,6 +255,13 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
csd = csa->hdr;
cnl = csa->nl;
is_mm = (dba_mm == csd->acc_meth);
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ {
+ DEBUG_ONLY(jnlpool_csa = csa);
+ jnlpool = csa->jnlpool;
+ }
+ tmp_jnlpool = jnlpool;
DEBUG_ONLY(in_mu_truncate = (cnl != NULL && process_id == cnl->trunc_pid);)
TREF(rlbk_during_redo_root) = FALSE;
status = cdb_sc_normal;
@@ -364,14 +372,17 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
* database to a state back in time, and we can complete the read.
*/
assert(!csa->now_crit);
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
grab_crit(reg);
rel_crit(reg);
+ assert(tmp_jnlpool == jnlpool);
}
if (MISMATCH_ROOT_CYCLES(csa, cnl))
{ /* If a root block has moved, we might have started the read from the wrong root block, in which
* case we cannot trust the entire search. Need to redo root search.
* If an online rollback concurrently finished, we will come into this "if" block and restart.
*/
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
was_crit = csa->now_crit;
if (!was_crit)
grab_crit(reg);
@@ -387,6 +398,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
SYNC_ROOT_CYCLES(csa);
if (!was_crit)
rel_crit(reg);
+ assert(tmp_jnlpool == jnlpool);
goto failed_skip_revert;
}
if (start_tn <= cnl->last_wcs_recover_tn)
@@ -398,15 +410,23 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
/* Assert that if gtm_gvundef_fatal is non-zero, then we better not be about to signal a GVUNDEF */
assert(!TREF(gtm_gvundef_fatal) || !ready2signal_gvundef_lcl);
assert(!TREF(donot_commit)); /* We should never commit a transaction that was determined restartable */
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
if (csa->now_crit && !csa->hold_onto_crit)
rel_crit(reg);
if (unhandled_stale_timer_pop)
process_deferred_stale();
+ assert(tmp_jnlpool == jnlpool);
CWS_RESET;
assert(!csa->now_crit || csa->hold_onto_crit); /* shouldn't hold crit unless asked to */
t_tries = 0; /* commit was successful so reset t_tries */
INCR_GVSTATS_COUNTER(csa, cnl, n_nontp_readonly, 1);
INCR_GVSTATS_COUNTER(csa, cnl, n_nontp_blkread, n_blks_validated);
+ assert(tmp_jnlpool == jnlpool);
+ if (save_jnlpool != jnlpool)
+ {
+ assert(!jnlpool_csa || (jnlpool_csa == csa));
+ jnlpool = save_jnlpool;
+ }
return cti->curr_tn;
}
assert(update_trans);
@@ -456,6 +476,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
{ /* Caution : since csa->backup_in_prog and read_before_image are initialized below
* only if (cw_depth), these variables should be used below only within an if (cw_depth).
*/
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
lcl_ss_in_prog = SNAPSHOTS_IN_PROG(csa); /* store in local variable to avoid pointer access */
reorg_ss_in_prog = (mu_reorg_process && lcl_ss_in_prog); /* store in local variable if both snapshots and MUPIP
* REORG are in progress */
@@ -487,6 +508,11 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
end = &buff[MAX_ZWR_KEY_SZ - 1];
send_msg_csa(CSA_ARG(csa) VARLSTCNT(6) ERR_GBLOFLOW, 0,
ERR_GVIS, 2, end - buff, buff);
+ if (save_jnlpool != jnlpool)
+ {
+ assert(!jnlpool_csa || (jnlpool_csa == csa));
+ jnlpool = save_jnlpool;
+ }
rts_error_csa(CSA_ARG(csa) VARLSTCNT(6) ERR_GBLOFLOW, 0,
ERR_GVIS, 2, end - buff, buff);
}
@@ -502,7 +528,9 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
else
{
block_is_free = WAS_FREE(cs->blk_prior_state);
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
cs->old_block = t_qread(cs->blk, (sm_int_ptr_t)&cs->cycle, &cs->cr);
+ assert(tmp_jnlpool == jnlpool);
old_block = (blk_hdr_ptr_t)cs->old_block;
if (NULL == old_block)
{
@@ -551,7 +579,9 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
{
block_is_free = TRUE; /* To tell t_qread that the block it's trying to read is
* actually a FREE block */
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
cs->old_block = t_qread(cs->blk, (sm_int_ptr_t)&cs->cycle, &cs->cr);
+ assert(tmp_jnlpool == jnlpool);
if (NULL == cs->old_block)
{
status = (enum cdb_sc)rdfail_detail;
@@ -561,6 +591,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
}
}
}
+ assert(tmp_jnlpool == jnlpool);
}
if (JNL_ENABLED(csa))
{ /* compute the total journal record size requirements before grab_crit.
@@ -601,14 +632,21 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
/* Get more space if needed. This is done outside crit so that any necessary IO has a chance of occurring
* outside crit. The available space must be double-checked inside crit.
*/
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
if (!is_mm && !WCS_GET_SPACE(reg, cw_set_depth + 1, NULL))
assert(FALSE); /* wcs_get_space should have returned TRUE unconditionally in this case */
+ assert(tmp_jnlpool == jnlpool);
for (;;)
{
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
grab_crit(reg); /* Step CMT01 (see secshr_db_clnup.c for CMTxx step descriptions) */
- if (!FROZEN_HARD(csd))
+ if (!FROZEN_HARD(csa))
+ {
+ assert(tmp_jnlpool == jnlpool);
break;
+ }
rel_crit(reg);
+ assert(tmp_jnlpool == jnlpool);
/* We are about to wait for freeze. Assert that we are not in phase2 of a bitmap free operation
* (part of an M-kill or REORG operation). Most freeze operations (e.g. MUPIP FREEZE) wait for the
* phase2 to complete. Some (e.g. MUPIP EXTRACT -FREEZE) don't. The cnl->freezer_waited_for_kip flag
@@ -616,8 +654,9 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
*/
assert(!cnl->freezer_waited_for_kip
|| (inctn_bmp_mark_free_gtm != inctn_opcode) && (inctn_bmp_mark_free_mu_reorg != inctn_opcode));
- while (FROZEN_HARD(csd))
+ while (FROZEN_HARD(csa))
hiber_start(1000);
+ assert(tmp_jnlpool == jnlpool);
}
} else
{ /* We expect the process to be in its final retry as it is holding crit. The only exception is if hold_onto_crit
@@ -626,7 +665,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
* about whether we are about to update a frozen db. DSE is the only utility allowed to update frozen databases.
*/
assert((CDB_STAGNATE == t_tries) || csa->hold_onto_crit || IS_DSE_IMAGE);
- if (FROZEN_HARD(csd) && !IS_DSE_IMAGE)
+ if (FROZEN_HARD(csa) && !IS_DSE_IMAGE)
{ /* We are about to update a frozen database. This is possible in rare cases even though
* we waited for the freeze to be lifted in t_retry (see GTM-7004). Restart in this case.
*/
@@ -635,7 +674,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
}
}
/* We should never proceed to update a frozen database. Only exception is DSE */
- assert(!FROZEN_HARD(csd) || IS_DSE_IMAGE);
+ assert(!FROZEN_HARD(csa) || IS_DSE_IMAGE);
/* We never expect to come here with file_corrupt set to TRUE (in case of an online rollback) because
* grab_crit done above will make sure of that. The only exception is RECOVER/ROLLBACK itself coming
* here in the forward phase
@@ -644,6 +683,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
if (MISMATCH_ROOT_CYCLES(csa, cnl))
{
status = cdb_sc_gvtrootmod2;
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
if (MISMATCH_ONLN_RLBK_CYCLES(csa, cnl))
{
assert(!mupip_jnl_recover);
@@ -653,6 +693,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
SYNC_ROOT_CYCLES(NULL);
} else
SYNC_ROOT_CYCLES(csa);
+ assert(tmp_jnlpool == jnlpool);
goto failed;
}
/* We should never proceed to commit if the global variable - only_reset_clues_if_onln_rlbk - is TRUE AND if the prior
@@ -685,7 +726,9 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
* (2) Journal recover operates in standalone mode. So, it should NOT see any concurrent
* trigger changes as well
*/
- assert(!is_updproc || jnlpool.repl_inst_filehdr->is_supplementary && !jnlpool.jnlpool_ctl->upd_disabled);
+ assert(!is_updproc || (csa->jnlpool && (csa->jnlpool == jnlpool)));
+ assert(!is_updproc || (jnlpool && jnlpool->repl_inst_filehdr->is_supplementary
+ && !jnlpool->jnlpool_ctl->upd_disabled));
assert(!jgbl.forw_phase_recovery);
assert(cycle > csa->db_trigger_cycle);
/* csa->db_trigger_cycle will be set to csd->db_trigger_cycle in t_retry */
@@ -755,6 +798,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
}
}
/* in crit, ensure cache-space is available. the out-of-crit check done above might not have been enough */
+ DEBUG_ONLY(tmp_jnlpool = jnlpool;)
if (!is_mm && !WCS_GET_SPACE(reg, cw_set_depth + 1, NULL))
{
assert(cnl->wc_blocked); /* only reason we currently know why wcs_get_space could fail */
@@ -762,8 +806,10 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
SET_TRACEABLE_VAR(cnl->wc_blocked, TRUE);
BG_TRACE_PRO_ANY(csa, wc_blocked_t_end_hist);
SET_CACHE_FAIL_STATUS(status, csd);
+ assert(tmp_jnlpool == jnlpool);
goto failed;
}
+ assert(tmp_jnlpool == jnlpool);
if (inctn_invalid_op != inctn_opcode)
{
assert(cw_set_depth || mu_reorg_process);
@@ -1196,6 +1242,11 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
GTM_WHITE_BOX_TEST(WBTEST_T_END_JNLFILOPN, jnl_status, ERR_JNLFILOPN);
if (0 != jnl_status)
{
+ if (save_jnlpool != jnlpool)
+ {
+ assert(!jnlpool_csa || (jnlpool_csa == csa));
+ jnlpool = save_jnlpool;
+ }
if (SS_NORMAL != jpc->status)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(7) jnl_status, 4, JNL_LEN_STR(csd),
DB_LEN_STR(reg), jpc->status);
@@ -1239,7 +1290,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
if (MAXUINT4 == jbp->next_epoch_time)
jbp->next_epoch_time = (uint4)(jgbl.gbl_jrec_time + jbp->epoch_interval);
if (((jbp->next_epoch_time <= jgbl.gbl_jrec_time) UNCONDITIONAL_EPOCH_ONLY(|| TRUE))
- && !FROZEN_CHILLED(csd))
+ && !FROZEN_CHILLED(csa))
{ /* Flush the cache. Since we are in crit, defer syncing epoch */
if (!wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_WRITE_EPOCH | WCSFLU_IN_COMMIT | WCSFLU_SPEEDUP_NOBEFORE))
{
@@ -1253,19 +1304,19 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
}
/* At this point, we are done with validation and so we need to assert that donot_commit is set to FALSE */
assert(!TREF(donot_commit)); /* We should never commit a transaction that was determined restartable */
- assert(jnlpool_ctl == jnlpool.jnlpool_ctl);
jrs = NULL;
- if (REPL_ALLOWED(csa) && (NULL != (jpl = jnlpool.jnlpool_ctl))) /* note: assignment of "jpl" */
+ if (REPL_ALLOWED(csa) && ((NULL != jnlpool) && (NULL != (jpl = jnlpool->jnlpool_ctl)))) /* note: assignment of "jpl" */
{
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ assert(!csa->jnlpool || (csa->jnlpool == jnlpool));
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
if (!repl_csa->hold_onto_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK); /* Step CMT02 */
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK); /* Step CMT02 */
assert(repl_csa->now_crit);
jnlpool_crit_acquired = TRUE;
/* With jnlpool lock held, check instance freeze, and retry if set. */
if (jpl->freeze)
{
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
status = cdb_sc_instancefreeze;
goto failed;
}
@@ -1279,7 +1330,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
supplementary = TRUE;
assert(0 <= strm_index);
strm_seqno = jpl->strm_seqno[strm_index];
- ASSERT_INST_FILE_HDR_HAS_HISTREC_FOR_STRM(strm_index);
+ ASSERT_INST_FILE_HDR_HAS_HISTREC_FOR_STRM(strm_index, jnlpool);
jnl_fence_ctl.strm_seqno = SET_STRM_INDEX(strm_seqno, strm_index);
} else
{ /* Note: "supplementary == FALSE" if strm_seqno is 0 is relied upon by "mutex_salvage" */
@@ -1609,7 +1660,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
update_trans |= UPDTRNS_TCOMMIT_STARTED_MASK; /* Step CMT11 */
assert(cdb_sc_normal == status);
/* should never increment curr_tn on a frozen database except if DSE */
- assert(!(FROZEN_HARD(csd) || (replication && jnlpool.jnlpool_ctl->freeze)) || IS_DSE_IMAGE);
+ assert(!(FROZEN_HARD(csa) || (replication && jnlpool && jnlpool->jnlpool_ctl->freeze)) || IS_DSE_IMAGE);
/* To avoid confusing concurrent processes, MM requires a barrier before incrementing db TN. For BG, cr->in_tend
* serves this purpose so no barrier is needed. See comment in tp_tend.
*/
@@ -1623,7 +1674,7 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
* otherwise do it here every HEADER_UPDATE_COUNT transactions.
*/
assert(!JNL_ENABLED(csa) || (jbp == csa->jnl->jnl_buff));
- if (!JNL_ENABLED(csa) && !(csd->trans_hist.curr_tn & (HEADER_UPDATE_COUNT - 1)) && !FROZEN_CHILLED(csd))
+ if (!JNL_ENABLED(csa) && !(csd->trans_hist.curr_tn & (HEADER_UPDATE_COUNT - 1)) && !FROZEN_CHILLED(csa))
fileheader_sync(reg);
assert((MUSWP_INCR_ROOT_CYCLE != TREF(in_mu_swap_root_state)) || need_kip_incr);
if (need_kip_incr) /* increment kill_in_prog */
@@ -1651,14 +1702,14 @@ trans_num t_end(srch_hist *hist1, srch_hist *hist2, trans_num ctn)
*/
if (jnlpool_crit_acquired)
{
- assert((NULL != jnlpool_ctl) && repl_csa->now_crit && REPL_ALLOWED(csa));
- rel_lock(jnlpool.jnlpool_dummy_reg); /* Step CMT15 */
+ assert((NULL != jnlpool->jnlpool_ctl) && repl_csa->now_crit && REPL_ALLOWED(csa));
+ rel_lock(jnlpool->jnlpool_dummy_reg); /* Step CMT15 */
}
/* If BG, check that we have not pinned any more buffers than we are updating */
DBG_CHECK_PINNED_CR_ARRAY_CONTENTS(csd, is_mm, cr_array, cr_array_index);
assert((NULL == jrs) || JNL_ALLOWED(csa));
- assert((NULL == jrs) || !jrs->tot_jrec_len || !replication || jnlpool.jrs.tot_jrec_len);
- assert((NULL == jrs) || jrs->tot_jrec_len || !replication || !jnlpool.jrs.tot_jrec_len);
+ assert((NULL == jrs) || !jrs->tot_jrec_len || !replication || jnlpool->jrs.tot_jrec_len);
+ assert((NULL == jrs) || jrs->tot_jrec_len || !replication || !jnlpool->jrs.tot_jrec_len);
if (NEED_TO_FINISH_JNL_PHASE2(jrs))
NONTP_FINISH_JNL_PHASE2_IN_JNLBUFF_AND_JNLPOOL(csa, jrs, replication, jnlpool); /* Step CMT16 & CMT17 */
if (cw_set_depth)
@@ -1751,6 +1802,11 @@ skip_cr_array:
if (unhandled_stale_timer_pop)
process_deferred_stale();
wcs_timer_start(reg, TRUE);
+ if (save_jnlpool != jnlpool)
+ {
+ assert(!jnlpool_csa || (jnlpool_csa == csa));
+ jnlpool = save_jnlpool;
+ }
return dbtn;
failed:
assert(cdb_sc_normal != status);
@@ -1799,5 +1855,10 @@ failed_skip_revert:
CWS_RESET;
cw_map_depth = 0;
assert(0 == cr_array_index);
+ if (save_jnlpool != jnlpool)
+ {
+ assert(!jnlpool_csa || (jnlpool_csa == csa));
+ jnlpool = save_jnlpool;
+ }
return 0;
}
diff --git a/sr_port/t_end_sysops.c b/sr_port/t_end_sysops.c
index 6f880cb..0d449fe 100644
--- a/sr_port/t_end_sysops.c
+++ b/sr_port/t_end_sysops.c
@@ -165,6 +165,7 @@ GBLREF volatile int4 fast_lock_count;
GBLREF boolean_t unhandled_stale_timer_pop;
GBLREF jnl_gbls_t jgbl;
GBLREF boolean_t is_updproc;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
void fileheader_sync(gd_region *reg)
{
@@ -1206,7 +1207,7 @@ enum cdb_sc bg_update_phase2(cw_set_element *cs, trans_num ctn, trans_num effect
return cdb_sc_cacheprob;
}
}
- RESET_CR_IN_TEND_AFTER_PHASE2_COMMIT(cr); /* resets cr->in_tend & cr->in_cw_set (for older twin too if needed) */
+ RESET_CR_IN_TEND_AFTER_PHASE2_COMMIT(cr, csa, csd); /* resets cr->in_tend & cr->in_cw_set (for older twin too if needed) */
VERIFY_QUEUE_LOCK(&cache_state->cacheq_active, &cnl->db_latch);
cs->old_mode = -cs->old_mode; /* negate it back to indicate phase2 is complete for this cse (used by secshr_db_clnup) */
assert(0 < cs->old_mode);
@@ -1277,7 +1278,7 @@ void wcs_timer_start(gd_region *reg, boolean_t io_ok)
{
EPOCH_TAPER_IF_NEEDED(csa, csd, cnl, reg, TRUE, buffs_per_flush, flush_target);
}
- if ((flush_target <= cnl->wcs_active_lvl) && !FROZEN_CHILLED(csd))
+ if ((flush_target <= cnl->wcs_active_lvl) && !FROZEN_CHILLED(csa))
{ /* Already in need of a good flush */
BG_TRACE_PRO_ANY(csa, active_lvl_trigger);
wtstart_errno = wcs_wtstart(reg, buffs_per_flush, NULL, NULL);
@@ -1296,6 +1297,7 @@ void wcs_stale(TID tid, int4 hd_len, gd_region **region)
sgmnt_addrs *csa, *save_csaddrs, *check_csaddrs;
sgmnt_data_ptr_t csd, save_csdata;
gd_region *reg;
+ jnlpool_addrs_ptr_t save_jnlpool;
enum db_acc_method acc_meth;
node_local_ptr_t cnl;
jnl_private_control *jpc;
@@ -1305,6 +1307,7 @@ void wcs_stale(TID tid, int4 hd_len, gd_region **region)
save_region = gv_cur_region; /* Certain debugging calls expect gv_cur_region to be correct */
save_csaddrs = cs_addrs;
save_csdata = cs_data;
+ save_jnlpool = jnlpool;
check_csaddrs = (NULL == save_region || FALSE == save_region->open) ? NULL : &FILE_INFO(save_region)->s_addrs;
/* Save to see if we are in crit anywhere */
reg = *region;
@@ -1340,6 +1343,7 @@ void wcs_stale(TID tid, int4 hd_len, gd_region **region)
gv_cur_region = save_region;
cs_addrs = save_csaddrs;
cs_data = save_csdata;
+ jnlpool = save_jnlpool;
}
return;
}
@@ -1369,7 +1373,6 @@ void wcs_stale(TID tid, int4 hd_len, gd_region **region)
if ((0 == crit_count) && !in_mutex_deadlock_check
&& ((NULL == check_csaddrs) || !T_IN_CRIT_OR_COMMIT_OR_WRITE(check_csaddrs))
&& (0 == fast_lock_count)
- && !FROZEN_CHILLED(csd)
&& (!(TREF(in_ext_call) && csd->is_encrypted))
&& OK_TO_INTERRUPT)
{
@@ -1377,13 +1380,20 @@ void wcs_stale(TID tid, int4 hd_len, gd_region **region)
switch (acc_meth)
{
case dba_bg:
- /* Flush at least some of our cache */
- wcs_wtstart(reg, 0, NULL, NULL);
- /* If there is no dirty buffer left in the active queue, then no need for new timer */
- if (0 == csa->acc_meth.bg.cache_state->cacheq_active.fl)
- need_new_timer = FALSE;
+ if (!FROZEN_CHILLED(csa))
+ { /* Flush at least some of our cache */
+ wcs_wtstart(reg, 0, NULL, NULL);
+ /* If there is no dirty buffer left in the active queue, then no need for new timer */
+ if (0 == csa->acc_meth.bg.cache_state->cacheq_active.fl)
+ need_new_timer = FALSE;
+ }
+ else
+ { /* We can't flush to the file, but we can flush the journal */
+ jnl_wait(reg);
+ }
break;
case dba_mm:
+ assert(!FROZEN_CHILLED(csa));
wcs_wtstart(reg, 0, NULL, NULL);
assert(csd == csa->hdr);
need_new_timer = FALSE;
@@ -1425,5 +1435,6 @@ void wcs_stale(TID tid, int4 hd_len, gd_region **region)
gv_cur_region = save_region;
cs_addrs = save_csaddrs;
cs_data = save_csdata;
+ jnlpool = save_jnlpool;
return;
}
diff --git a/sr_port/t_retry.c b/sr_port/t_retry.c
old mode 100755
new mode 100644
index d644472..bbda709
--- a/sr_port/t_retry.c
+++ b/sr_port/t_retry.c
@@ -12,10 +12,6 @@
#include "mdef.h"
-#if defined(VMS) && defined(DEBUG)
-#include <descrip.h>
-#endif
-
#include "gdsroot.h"
#include "gtm_facility.h"
#include "fileinfo.h"
@@ -54,12 +50,10 @@
#ifdef GTM_TRIGGER
#include "gtm_trigger_trc.h"
#endif
-#ifdef UNIX
#include "gvcst_protos.h"
#include "gtmimagename.h"
#include "caller_id.h"
#include "mupip_reorg_encrypt.h"
-#endif
#ifdef DEBUG
#include "repl_msg.h"
#include "gtmsource.h"
@@ -114,12 +108,10 @@ GBLREF boolean_t mupip_jnl_recover;
GBLREF uint4 process_id;
#endif
-#ifdef UNIX
GBLREF boolean_t is_updproc;
GBLREF boolean_t need_kip_incr;
GBLREF sgmnt_addrs *kip_csa;
-GBLREF jnlpool_addrs jnlpool;
-#endif
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_DBROLLEDBACK);
error_def(ERR_GVFAILCORE);
@@ -148,6 +140,7 @@ void t_retry(enum cdb_sc failure)
mstr gvname_mstr, reg_mstr;
gd_region *restart_reg;
mval t_restart_entryref;
+ jnlpool_addrs_ptr_t save_jnlpool;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -169,6 +162,7 @@ void t_retry(enum cdb_sc failure)
DEBUG_ONLY(TREF(donot_commit) = FALSE;)
csa = cs_addrs;
cnl = csa ? csa->nl : NULL; /* making sure we do not try to dereference a NULL pointer */
+ save_jnlpool = jnlpool;
if (!dollar_tlevel)
{
# ifdef DEBUG
@@ -176,15 +170,15 @@ void t_retry(enum cdb_sc failure)
t_tries_dbg = 0;
assert(ARRAYSIZE(t_fail_hist_dbg) > t_tries_dbg);
t_fail_hist_dbg[t_tries_dbg++] = (unsigned char)failure;
+ if (csa && csa->jnlpool)
+ jnlpool = csa->jnlpool;
TRACE_TRANS_RESTART(failure);
# endif
-# ifdef UNIX
if (cdb_sc_instancefreeze == failure)
{
assert(REPL_ALLOWED(csa->hdr)); /* otherwise, a cdb_sc_instancefreeze retry would not have been signalled */
WAIT_FOR_REPL_INST_UNFREEZE(csa);
}
-# endif
/* Even though rollback and recover operate standalone, there are certain kind of restarts that can still happen
* either due to whitebox test cases or stomping on our own buffers causing cdb_sc_lostcr/cdb_sc_rmisalign. Assert
* accordingly
@@ -303,6 +297,7 @@ void t_retry(enum cdb_sc failure)
* time in the final retry.
*/
assert(cdb_sc_optrestart != failure);
+ assert(cdb_sc_wcs_recover != failure); /* This restart code is possible in final retry only in TP */
if (IS_FINAL_RETRY_CODE(failure))
{
/* t_tries should never be greater than t_tries_dbg. The only exception is if this is DSE or online
@@ -310,7 +305,7 @@ void t_retry(enum cdb_sc failure)
* But that's possible only if white box test cases to induce Phase 1 and Phase 2 errors are set.
* So, assert accordingly.
*/
- assert((t_tries <= t_tries_dbg) UNIX_ONLY(|| (csa->hold_onto_crit && WB_COMMIT_ERR_ENABLED)));
+ assert((t_tries <= t_tries_dbg) || (csa->hold_onto_crit && WB_COMMIT_ERR_ENABLED));
/* Assert that the same kind of restart code can never occur more than once once we go to the
* final retry. The only exception is cdb_sc_helpedout which can happen due to other processes
* setting cnl->wc_blocked to TRUE without holding crit.
@@ -378,7 +373,6 @@ void t_retry(enum cdb_sc failure)
* on the next restart.
*/
}
-# ifdef UNIX
if (MISMATCH_ROOT_CYCLES(csa, cnl))
{ /* We came in to handle a different restart code in the penultimate retry and grab_crit before going
* to final retry. As part of grabbing crit, we detected an online rollback. Although we could treat
@@ -401,17 +395,16 @@ void t_retry(enum cdb_sc failure)
redo_root_search_done = TRUE;
}
}
-# endif
assert(csa->now_crit);
DEBUG_ONLY(TREF(ok_to_call_wcs_recover) = FALSE;)
csd = cs_data;
if (CDB_STAGNATE == t_tries)
{
- if (FROZEN_HARD(csd) && update_trans)
+ if (FROZEN_HARD(csa) && update_trans)
{ /* Final retry on an update transaction and region is frozen.
* Wait for it to be unfrozen and only then grab crit.
*/
- GRAB_UNFROZEN_CRIT(gv_cur_region, csa, csd);
+ GRAB_UNFROZEN_CRIT(gv_cur_region, csa);
}
} else
{
@@ -437,15 +430,13 @@ void t_retry(enum cdb_sc failure)
assert(ERR_GVPUTFAIL == t_err);
t_err = ERR_GVINCRFAIL; /* print more specific error message */
}
- UNIX_ONLY(send_msg_csa(CSA_ARG(csa) VARLSTCNT(9) t_err, 2, local_t_tries, t_fail_hist,
- ERR_GVIS, 2, end-buff, buff, ERR_GVFAILCORE));
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(9) t_err, 2, local_t_tries, t_fail_hist,
+ ERR_GVIS, 2, end-buff, buff, ERR_GVFAILCORE);
# ifdef DEBUG
/* Core is not needed. We intentionally create this error. */
if (!gtm_white_box_test_case_enabled)
# endif
- UNIX_ONLY(gtm_fork_n_core());
- VMS_ONLY(send_msg_csa(CSA_ARG(csa) VARLSTCNT(8) t_err, 2, local_t_tries, t_fail_hist,
- ERR_GVIS, 2, end-buff, buff));
+ gtm_fork_n_core();
rts_error_csa(CSA_ARG(csa) VARLSTCNT(8) t_err, 2, local_t_tries, t_fail_hist, ERR_GVIS, 2, end-buff,
buff);
}
diff --git a/sr_port/tp.h b/sr_port/tp.h
index dd4a302..7823134 100644
--- a/sr_port/tp.h
+++ b/sr_port/tp.h
@@ -10,8 +10,8 @@
* *
****************************************************************/
-#ifndef __TP_H__
-#define __TP_H__
+#ifndef TP_H
+#define TP_H
#include <sys/types.h>
@@ -400,13 +400,13 @@ typedef struct trans_restart_hist_struct
# define TRACE_TRANS_RESTART(RETRY_CODE) \
{ \
- GBLREF jnlpool_addrs jnlpool; \
- GBLREF unsigned int t_tries; \
- GBLREF unsigned int dollar_tlevel; \
- GBLREF sgmnt_addrs *cs_addrs; \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; \
+ GBLREF unsigned int t_tries; \
+ GBLREF unsigned int dollar_tlevel; \
+ GBLREF sgmnt_addrs *cs_addrs; \
\
- uint4 curidx; \
- trans_restart_hist_t *this_restart_hist; \
+ uint4 curidx; \
+ trans_restart_hist_t *this_restart_hist; \
\
assert(dollar_tlevel || (NULL != cs_addrs)); \
curidx = ++(TREF(trans_restart_hist_index)); \
@@ -417,8 +417,8 @@ typedef struct trans_restart_hist_struct
this_restart_hist->dollar_tlevel = dollar_tlevel; \
this_restart_hist->retry_code = RETRY_CODE; \
this_restart_hist->call_from = (caddr_t)caller_id(); \
- if (NULL != jnlpool.jnlpool_ctl) \
- this_restart_hist->seq_or_tn.jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno; \
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl)) \
+ this_restart_hist->seq_or_tn.jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno; \
else \
this_restart_hist->seq_or_tn.curr_tn = (NULL != cs_addrs) ? cs_addrs->ti->curr_tn : 0; \
this_restart_hist->csa = dollar_tlevel ? NULL : cs_addrs; \
@@ -939,31 +939,33 @@ GBLREF unsigned int t_tries;
} \
}
-#define SAVE_REGION_INFO(SAVE_KEY, SAVE_TARGET, SAVE_CUR_REG, SAVE_SI_PTR) \
-MBSTART { \
- SAVE_TARGET = gv_target; \
- SAVE_CUR_REG = gv_cur_region; \
- SAVE_SI_PTR = sgm_info_ptr; \
- assert(NULL != gv_currkey); \
- assert((SIZEOF(gv_key) + gv_currkey->end) <= SIZEOF(SAVE_KEY)); \
- memcpy(&SAVE_KEY[0], gv_currkey, SIZEOF(gv_key) + gv_currkey->end); \
+#define SAVE_REGION_INFO(SAVE_KEY, SAVE_TARGET, SAVE_CUR_REG, SAVE_SI_PTR, SAVE_JNLPOOL) \
+MBSTART { \
+ SAVE_TARGET = gv_target; \
+ SAVE_CUR_REG = gv_cur_region; \
+ SAVE_SI_PTR = sgm_info_ptr; \
+ SAVE_JNLPOOL = jnlpool; \
+ assert(NULL != gv_currkey); \
+ assert((SIZEOF(gv_key) + gv_currkey->end) <= SIZEOF(SAVE_KEY)); \
+ memcpy(&SAVE_KEY[0], gv_currkey, SIZEOF(gv_key) + gv_currkey->end); \
} MBEND
-#define RESTORE_REGION_INFO(SAVE_KEY, SAVE_TARGET, SAVE_CUR_REG, SAVE_SI_PTR) \
-MBSTART { \
- gv_target = SAVE_TARGET; \
- sgm_info_ptr = SAVE_SI_PTR; \
- /* check no keysize expansion occurred inside gvcst_root_search */ \
- assert(gv_currkey->top == SAVE_KEY[0].top); \
- memcpy(gv_currkey, &SAVE_KEY[0], SIZEOF(gv_key) + SAVE_KEY[0].end); \
- if (NULL != SAVE_CUR_REG) \
- { \
- TP_CHANGE_REG_IF_NEEDED(SAVE_CUR_REG); \
- } else \
- { \
- gv_cur_region = NULL; \
- cs_data = NULL; \
- cs_addrs = NULL; \
- } \
+#define RESTORE_REGION_INFO(SAVE_KEY, SAVE_TARGET, SAVE_CUR_REG, SAVE_SI_PTR, SAVE_JNLPOOL) \
+MBSTART { \
+ gv_target = SAVE_TARGET; \
+ sgm_info_ptr = SAVE_SI_PTR; \
+ /* check no keysize expansion occurred inside gvcst_root_search */ \
+ assert(gv_currkey->top == SAVE_KEY[0].top); \
+ memcpy(gv_currkey, &SAVE_KEY[0], SIZEOF(gv_key) + SAVE_KEY[0].end); \
+ if (NULL != SAVE_CUR_REG) \
+ { \
+ TP_CHANGE_REG_IF_NEEDED(SAVE_CUR_REG); \
+ } else \
+ { \
+ gv_cur_region = NULL; \
+ cs_data = NULL; \
+ cs_addrs = NULL; \
+ } \
+ jnlpool = SAVE_JNLPOOL; \
} MBEND
/* Any retry transition where the destination state is the 3rd retry, we don't want to release crit, i.e. for 2nd to 3rd retry
diff --git a/sr_port/tp_change_reg.c b/sr_port/tp_change_reg.c
old mode 100755
new mode 100644
index d30db14..9c8c547
--- a/sr_port/tp_change_reg.c
+++ b/sr_port/tp_change_reg.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -16,11 +17,14 @@
#include "gdsbt.h"
#include "gdsfhead.h"
#include "filestruct.h"
+#include "repl_msg.h" /* needed for gtmsource.h */
+#include "gtmsource.h" /* needed for jnlpool_addrs typedef */
#include "tp_change_reg.h"
-GBLREF gd_region *gv_cur_region;
-GBLREF sgmnt_data_ptr_t cs_data;
-GBLREF sgmnt_addrs *cs_addrs;
+GBLREF gd_region *gv_cur_region;
+GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
void
tp_change_reg(void)
@@ -33,6 +37,8 @@ tp_change_reg(void)
case dba_bg:
cs_addrs = &FILE_INFO(gv_cur_region)->s_addrs;
cs_data = cs_addrs->hdr;
+ if (cs_addrs->jnlpool && (jnlpool != cs_addrs->jnlpool))
+ jnlpool = cs_addrs->jnlpool;
return;
case dba_usr:
case dba_cm:
@@ -40,7 +46,7 @@ tp_change_reg(void)
cs_data = (sgmnt_data_ptr_t)0;
return;
default:
- GTMASSERT;
+ assertpro(gv_cur_region->dyn.addr->acc_meth != gv_cur_region->dyn.addr->acc_meth);
}
}
diff --git a/sr_port/tp_clean_up.c b/sr_port/tp_clean_up.c
index 621d74b..47d4549 100644
--- a/sr_port/tp_clean_up.c
+++ b/sr_port/tp_clean_up.c
@@ -207,6 +207,7 @@ void tp_clean_up(tp_cleanup_state clnup_state)
FREE_KILL_SET(ks);
si->kill_set_tail = NULL;
si->kill_set_head = NULL;
+ assert((NULL == si->kip_csa) || (!gv_cur_region->open || gv_cur_region->was_open));
}
if (NULL != si->jnl_head)
{
diff --git a/sr_port/tp_hist.c b/sr_port/tp_hist.c
index 3528f10..7bf51bd 100755
--- a/sr_port/tp_hist.c
+++ b/sr_port/tp_hist.c
@@ -471,9 +471,14 @@ enum cdb_sc tp_hist(srch_hist *hist1)
rel_crit(gv_cur_region);
}
if (si->start_tn <= cnl->last_wcs_recover_tn)
- {
+ { /* Note that it is possible that gvt->clue.end is non-zero even in the final retry (e.g. if we encounter
+ * this gvt for the first time in the final retry). If so, t1->tn would be set (by "gvcst_search" done in
+ * the caller) to the tn when the clue got set which could be stale compared to cnl->last_wcs_recover_tn
+ * (if this gvt was never accessed after the most recent "wcs_recover"). In that case, t1->tn would get
+ * copied over to si->start_tn above and we will reach here. We should restart in this situation
+ * (i.e. cdb_sc_wcs_recover is a valid final retry restart code in TP).
+ */
status = cdb_sc_wcs_recover;
- assert(CDB_STAGNATE > t_tries);
}
/* If validation has succeeded, assert that if gtm_gvundef_fatal is non-zero, then we better not signal a GVUNDEF */
assert((cdb_sc_normal != status) || !TREF(gtm_gvundef_fatal) || !ready2signal_gvundef_lcl);
diff --git a/sr_port/tp_incr_clean_up.c b/sr_port/tp_incr_clean_up.c
index 6952329..895c698 100644
--- a/sr_port/tp_incr_clean_up.c
+++ b/sr_port/tp_incr_clean_up.c
@@ -377,6 +377,7 @@ void rollbk_sgm_tlvl_info(uint4 newlevel, sgm_info *si)
temp_kill_set = si->kill_set_head;
FREE_KILL_SET(temp_kill_set);
si->kill_set_head = si->kill_set_tail = NULL;
+ assert(NULL == si->kip_csa);
}
FREE_JFB_INFO_IF_NEEDED(csa, si, tli, FALSE);
DEBUG_ONLY(invalidate = FALSE;)
@@ -385,24 +386,24 @@ void rollbk_sgm_tlvl_info(uint4 newlevel, sgm_info *si)
deleted = delete_hashtab_int4(si->blks_in_use, (uint4 *)&th->blk_num);
assert(deleted);
si->num_of_blks--;
- DEBUG_ONLY(
- /* this is prior code which is no longer deemed necessary since invalidating clues of all
- * blk_targets is now done above and the directory tree should also be covered by that.
- * hence the DEBUG_ONLY surrounding for the statements below. --- nars -- 2002/07/26
- */
- if ((csa->dir_tree->read_local_tn == local_tn) && !invalidate)
+# ifdef DEBUG
+ /* this is prior code which is no longer deemed necessary since invalidating clues of all
+ * blk_targets is now done above and the directory tree should also be covered by that.
+ * hence the DEBUG_ONLY surrounding for the statements below. --- nars -- 2002/07/26
+ */
+ if ((csa->dir_tree->read_local_tn == local_tn) && !invalidate)
+ {
+ for (tp_srch_status = csa->dir_tree->hist.h;
+ HIST_TERMINATOR != (blk = tp_srch_status->blk_num); tp_srch_status++)
{
- for (tp_srch_status = csa->dir_tree->hist.h;
- HIST_TERMINATOR != (blk = tp_srch_status->blk_num); tp_srch_status++)
+ if (tp_srch_status->first_tp_srch_status == th)
{
- if (tp_srch_status->first_tp_srch_status == th)
- {
- invalidate = TRUE;
- break;
- }
+ invalidate = TRUE;
+ break;
}
}
- )
+ }
+# endif
}
assert(!invalidate || (0 == csa->dir_tree->clue.end));
si->last_tp_hist = tli->tlvl_tp_hist_info;
@@ -413,6 +414,7 @@ void rollbk_sgm_tlvl_info(uint4 newlevel, sgm_info *si)
temp_kill_set = si->kill_set_head;
FREE_KILL_SET(temp_kill_set);
si->kill_set_head = si->kill_set_tail = NULL;
+ assert(NULL == si->kip_csa);
FREE_JFB_INFO_IF_NEEDED(csa, si, tli, TRUE);
reinitialize_hashtab_int4(si->blks_in_use);
si->num_of_blks = 0;
diff --git a/sr_port/tp_restart.c b/sr_port/tp_restart.c
index 986c28a..c41a8cd 100644
--- a/sr_port/tp_restart.c
+++ b/sr_port/tp_restart.c
@@ -88,8 +88,9 @@ GBLREF sgm_info *first_sgm_info;
GBLREF unsigned int t_tries;
GBLREF int process_id;
GBLREF gd_region *gv_cur_region;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF bool caller_id_flag;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
+GBLREF boolean_t caller_id_flag;
GBLREF unsigned char *tpstackbase, *tpstacktop;
GBLREF trans_num local_tn; /* transaction number for THIS PROCESS */
GBLREF sgmnt_addrs *cs_addrs;
@@ -147,12 +148,13 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
mv_stent *mvc;
tp_region *tr;
mval beganHere;
- sgmnt_addrs *csa;
+ sgmnt_addrs *csa, *jpl_csa;
int4 num_closed = 0;
boolean_t tp_tend_status;
boolean_t reset_clues_done = FALSE;
mstr gvname_mstr, reg_mstr;
gd_region *restart_reg, *reg;
+ jnlpool_addrs_ptr_t save_jnlpool, local_jnlpool;
int tprestart_rc, len;
gv_namehead *gvt;
enum cdb_sc status;
@@ -190,6 +192,7 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
}
# ifdef GTM_TRIGGER
DBGTRIGR((stderr, "tp_restart: Entry state: %d\n", tprestart_state));
+ save_jnlpool = jnlpool;
if (TPRESTART_STATE_NORMAL == tprestart_state)
{ /* Only do if a normal invocation - otherwise we've already done this code for this TP restart */
# endif
@@ -374,17 +377,33 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
* before retry */
}
}
- DEBUG_ONLY(
+# ifdef DEBUG
/* The journal pool crit lock is currently obtained only inside commit logic at
* which point we will never signal a cdb_sc_needcrit restart code.
* So no need to verify if we need to release crit there. Assert this though.
*/
- if ((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open)
- {
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
- assert(!csa->now_crit);
+ if (jnlpool_head)
+ { /* at least one jnlpool setup */
+ for (tr = tp_reg_list; NULL != tr; tr = tr->fPtr)
+ {
+ reg = tr->reg;
+ if (reg->open)
+ {
+ csa = &FILE_INFO(reg)->s_addrs;
+ assert(csa);
+ assert(jnlpool);
+ if (csa && csa->jnlpool && (csa->jnlpool != jnlpool))
+ jnlpool = csa->jnlpool;
+ if (jnlpool && jnlpool->jnlpool_dummy_reg
+ && jnlpool->jnlpool_dummy_reg->open)
+ {
+ jpl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
+ assert(!jpl_csa->now_crit);
+ }
+ }
+ }
}
- )
+# endif
/* If retry due to M-locks, sleep so needed locks have a chance to get released */
break;
case cdb_sc_reorg_encrypt:
@@ -460,6 +479,8 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
* "grab_crit" & "wcs_recover" which will fix the phase2-commit/non-zero-"cr->in_tend" issue.
*/
case cdb_sc_phase2waitfail:
+ /* cdb_sc_wcs_recover is possible in final retry in TP (see comment in "tp_hist" */
+ case cdb_sc_wcs_recover:
assert(IS_FINAL_RETRY_CODE(status));
if (CDB_STAGNATE <= t_tries)
{
@@ -489,6 +510,8 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
|| (WBTEST_TP_HIST_CDB_SC_BLKMOD != gtm_white_box_test_case_number))
)
gtm_fork_n_core();
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_TPFAIL, 2, hist_index, t_fail_hist);
return 0; /* for the compiler only -- never executed */
} else
@@ -528,7 +551,7 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
reg = tr->reg;
if (!reg->open)
{
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
assert(reg->open);
}
}
@@ -771,6 +794,8 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
* be continued if an error handler has a mind to do that.
*/
GTMTRIG_ONLY(DBGTRIGR((stderr, "tp_restart: Leaving tp_restart via TRESTNOT error - state reset to 0\n")));
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
if (IS_MCODE_RUNNING)
{
getzposition(&beganHere);
@@ -807,5 +832,7 @@ int tp_restart(int newlevel, boolean_t handle_errors_internally)
REVERT;
TREF(expand_prev_key) = FALSE; /* in case we did a "t_retry" in the middle of "gvcst_zprevious2" */
GTMTRIG_ONLY(DBGTRIGR((stderr, "tp_restart: completed\n")));
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return 0;
}
diff --git a/sr_port/tp_set_sgm.c b/sr_port/tp_set_sgm.c
index 89bbbf9..05356c3 100644
--- a/sr_port/tp_set_sgm.c
+++ b/sr_port/tp_set_sgm.c
@@ -49,6 +49,9 @@ void tp_set_sgm(void)
csa = cs_addrs;
assert(csa == &FILE_INFO(gv_cur_region)->s_addrs);
si = csa->sgm_info_ptr;
+ assert(NULL != si);
+ if (NULL == si)
+ return; /* not expected but be safe */
assert(si->tp_csa == csa);
assert(si->tp_csd == cs_data);
assert(csa->hdr == cs_data);
diff --git a/sr_port/tp_tend.c b/sr_port/tp_tend.c
index e0766d3..6aa00c5 100644
--- a/sr_port/tp_tend.c
+++ b/sr_port/tp_tend.c
@@ -94,8 +94,7 @@ GBLREF unsigned char t_fail_hist[CDB_MAX_TRIES];
GBLREF int4 n_pvtmods, n_blkmods;
GBLREF unsigned int t_tries;
GBLREF jnl_fence_control jnl_fence_ctl;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_updproc;
GBLREF boolean_t is_replicator;
GBLREF seq_num seq_num_zero;
@@ -186,7 +185,7 @@ boolean_t tp_crit_all_regions()
* crit on any region. So take care of that explicitly here just like csd->freeze.
*/
assert(!(tmpsi->update_trans & ~UPDTRNS_VALID_MASK));
- if (FROZEN_HARD(tmpcsd) && tmpsi->update_trans)
+ if (FROZEN_HARD(tmpcsa) && tmpsi->update_trans)
{
tr = tr->fPtr; /* Increment so we release the crit lock we actually got */
x_lock = FALSE;
@@ -217,7 +216,7 @@ boolean_t tp_crit_all_regions()
}
if (NULL != frozen_csa)
{ /* Wait for region to be unfrozen before re-grabbing crit on ALL regions */
- WAIT_FOR_REGION_TO_UNFREEZE(frozen_csa, tmpcsd);
+ WAIT_FOR_REGION_TO_UNFREEZE(frozen_csa);
}
if (NULL != encr_csa)
{
@@ -259,6 +258,7 @@ boolean_t tp_tend()
uint4 jnl_status, leafmods, indexmods;
uint4 total_jnl_rec_size, in_tend;
uint4 lcl_update_trans;
+ jnlpool_addrs_ptr_t save_jnlpool, update_jnlpool, local_jnlpool;
jnlpool_ctl_ptr_t jpl;
boolean_t read_before_image; /* TRUE if before-image journaling or online backup in progress */
blk_hdr_ptr_t old_block;
@@ -282,6 +282,8 @@ boolean_t tp_tend()
assert(dollar_tlevel);
assert(0 == jnl_fence_ctl.level);
status = cdb_sc_normal;
+ save_jnlpool = jnlpool;
+ update_jnlpool = NULL;
/* if the transaction does no updates and the transaction history has not changed, we do not need any more validation */
do_validation = FALSE; /* initially set to FALSE, but set to TRUE below */
assert(NULL == first_tp_si_by_ftok);
@@ -333,7 +335,7 @@ boolean_t tp_tend()
assert((UPDTRNS_JNL_LOGICAL_MASK & lcl_update_trans) || (NULL == si->jnl_head));
assert(!(UPDTRNS_JNL_LOGICAL_MASK & lcl_update_trans) || (NULL != si->jnl_head));
assert(!tr->reg->read_only || !lcl_update_trans);
- region_is_frozen = (lcl_update_trans && FROZEN_HARD(csd));
+ region_is_frozen = (lcl_update_trans && FROZEN_HARD(csa));
if ((CDB_STAGNATE > t_tries)
? (csa->now_crit && !csa->hold_onto_crit)
: (!csa->now_crit || region_is_frozen))
@@ -401,7 +403,19 @@ boolean_t tp_tend()
assert(JNL_ENABLED(csa) || REPL_WAS_ENABLED(csa));
replication = TRUE;
if (is_replicator)
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ {
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ local_jnlpool = csa->jnlpool;
+ else
+ local_jnlpool = jnlpool;
+ if (!update_jnlpool)
+ {
+ update_jnlpool = local_jnlpool;
+ assert(update_jnlpool && update_jnlpool->jnlpool_dummy_reg);
+ repl_csa = &FILE_INFO(update_jnlpool->jnlpool_dummy_reg)->s_addrs;
+ } else
+ assert(update_jnlpool == local_jnlpool);
+ }
jnl_participants++;
} else if (JNL_ENABLED(csa))
{
@@ -414,7 +428,7 @@ boolean_t tp_tend()
{ /* Wait for it to be unfrozen before proceeding to commit. This reduces the
* chances that we find it frozen after we grab crit further down below.
*/
- WAIT_FOR_REGION_TO_UNFREEZE(csa, csd);
+ WAIT_FOR_REGION_TO_UNFREEZE(csa);
}
} /* for (tr... ) */
*prev_tp_si_by_ftok = NULL;
@@ -431,8 +445,12 @@ boolean_t tp_tend()
if (replication)
{
if (yes_jnl_no_repl)
+ {
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(REG2CSA(save_gv_cur_region)) VARLSTCNT(4) ERR_REPLOFFJNLON, 2,
DB_LEN_STR(save_gv_cur_region));
+ }
/* If caller does NOT want this update to be replicated, turn "replication" local variable off.
* The only such caller known at this time is "trigger_upgrade" - 2014/05/02.
*/
@@ -453,8 +471,12 @@ boolean_t tp_tend()
rel_crit(tr->reg);
}
} /* else we are online rollback and we already hold crit on all regions */
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return TRUE;
}
+ if (jnlpool && (NULL == update_jnlpool))
+ update_jnlpool = jnlpool;
/* Because secshr_db_clnup uses first_tp_si_by_ftok to determine if a TP transaction is underway and expects
* a well-formed linked list if it is non-zero, the following assignment to the head of the region list must occur
* after the loop above
@@ -538,7 +560,7 @@ boolean_t tp_tend()
* that they become frozen just before we grab crit. In this case (should be rare though) release
* crit on ALL regions that we have grabbed uptil this point and wait for the freeze to be removed.
*/
- if (FROZEN_HARD(csd) && lcl_update_trans)
+ if (FROZEN_HARD(csa) && lcl_update_trans)
{
x_lock = FALSE;
break;
@@ -578,8 +600,9 @@ boolean_t tp_tend()
* concurrent trigger changes. Assert accordingly.
*/
assert(CDB_STAGNATE > t_tries);
- assert(!is_updproc || (jnlpool.repl_inst_filehdr->is_supplementary
- && !jnlpool.jnlpool_ctl->upd_disabled));
+ assert(!is_updproc || (update_jnlpool && (!csa->jnlpool || (update_jnlpool == csa->jnlpool))));
+ assert(!is_updproc || (update_jnlpool && (update_jnlpool->repl_inst_filehdr->is_supplementary
+ && !update_jnlpool->jnlpool_ctl->upd_disabled)));
assert(csd->db_trigger_cycle > csa->db_trigger_cycle);
/* csa->db_trigger_cycle will be set to csd->db_trigger_cycle for all participating
* regions when they are each first referenced in the next retry (in tp_set_sgm)\
@@ -716,6 +739,8 @@ boolean_t tp_tend()
{
ctn = csd->trans_hist.curr_tn;
assert(csd->trans_hist.early_tn == ctn);
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
if (SS_NORMAL != jpc->status)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(7) jnl_status, 4, JNL_LEN_STR(csd),
DB_LEN_STR(gv_cur_region), jpc->status);
@@ -750,7 +775,7 @@ boolean_t tp_tend()
if (MAXUINT4 == jbp->next_epoch_time)
jbp->next_epoch_time = (uint4)(jgbl.gbl_jrec_time + jbp->epoch_interval);
if (((jbp->next_epoch_time <= jgbl.gbl_jrec_time) UNCONDITIONAL_EPOCH_ONLY(|| TRUE))
- && !FROZEN_CHILLED(csd))
+ && !FROZEN_CHILLED(csa))
{ /* Flush the cache. Since we are in crit, defer syncing the epoch */
/* Note that at this point, jgbl.gbl_jrec_time has been computed taking into
* account the current system time & the last journal record timestamp of ALL
@@ -1177,7 +1202,7 @@ boolean_t tp_tend()
*/
assert(jgbl.onlnrlbk || (0 == have_crit(CRIT_HAVE_ANY_REG | CRIT_IN_COMMIT)));
/* Wait for it to be unfrozen before re-grabbing crit on ALL regions */
- WAIT_FOR_REGION_TO_UNFREEZE(csa, csd);
+ WAIT_FOR_REGION_TO_UNFREEZE(csa);
assert(CDB_STAGNATE > t_tries);
} /* for (;;) */
/* At this point, we are done with validation and so we need to assert that donot_commit is set to FALSE */
@@ -1186,13 +1211,19 @@ boolean_t tp_tend()
assert(tmp_jnl_participants == jnl_participants);
assert(cdb_sc_normal == status);
DEBUG_ONLY(if (!jgbl.forw_phase_recovery) jnl_fence_ctl.token = 0;)
- jnl_fence_ctl.replication = replication; /* used by "secshr_db_clnup" to finish CMT09 if needed */
+ jnl_fence_ctl.replication = replication; /* used by "secshr_finish_CMT08_to_CMT14" to finish CMT09 if needed */
if (replication)
{
- jpl = jnlpool_ctl;
+ assert(update_jnlpool);
+ jpl = update_jnlpool->jnlpool_ctl;
+ assert(jpl);
+ assert(update_jnlpool->pool_init);
if (!repl_csa->hold_onto_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK); /* Step CMT02 */
- if (jnlpool.jnlpool_ctl->freeze)
+ {
+ jnlpool = update_jnlpool; /* required by grab lock */
+ grab_lock(update_jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK); /* Step CMT02 */
+ }
+ if (update_jnlpool->jnlpool_ctl->freeze)
{
status = cdb_sc_instancefreeze; /* break the possible deadlock by signalling a restart */
TP_TRACE_HIST(CR_BLKEMPTY, NULL);
@@ -1205,7 +1236,7 @@ boolean_t tp_tend()
supplementary = TRUE;
assert(0 <= strm_index);
strm_seqno = jpl->strm_seqno[strm_index];
- ASSERT_INST_FILE_HDR_HAS_HISTREC_FOR_STRM(strm_index);
+ ASSERT_INST_FILE_HDR_HAS_HISTREC_FOR_STRM(strm_index, update_jnlpool);
jnl_fence_ctl.strm_seqno = SET_STRM_INDEX(strm_seqno, strm_index);
} else
{ /* Note: "supplementary == FALSE" if strm_seqno is 0 is relied upon by "mutex_salvage" */
@@ -1221,7 +1252,8 @@ boolean_t tp_tend()
* with a potentially lower value than the final adjusted time written in the jnl record.
*/
ADJUST_GBL_JREC_TIME_JNLPOOL(jgbl, jpl);
- UPDATE_JPL_RSRV_WRITE_ADDR(jpl, jnlpool, jgbl.cumul_jnl_rec_len); /* updates jpl->rsrv_write_addr. Step CMT03 */
+ /* updates jpl->rsrv_write_addr. Step CMT03 */
+ UPDATE_JPL_RSRV_WRITE_ADDR(jpl, update_jnlpool, jgbl.cumul_jnl_rec_len);
/* Source server does not read in crit. It relies on the transaction data, lastwrite_len,
* rsrv_write_addr being updated in that order. To ensure this order, we have to force out
* rsrv_write_addr to its coherency point now. If not, the source server may read data that
@@ -1562,7 +1594,7 @@ boolean_t tp_tend()
*/
jrs = si->jbuf_rsrv_ptr;
if (NEED_TO_FINISH_JNL_PHASE2(jrs))
- FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Step CMT06a */
+ FINISH_JNL_PHASE2_IN_JNLBUFF(csa, jrs); /* Step CMT10a */
status = bg_update_phase2(cse, ctn, ctn, si); /* Step CMT10a */
if (cdb_sc_normal == status)
cse->mode = gds_t_committed;
@@ -1607,7 +1639,7 @@ boolean_t tp_tend()
assert(!(UPDTRNS_TCOMMIT_STARTED_MASK & lcl_update_trans));
si->update_trans = lcl_update_trans | UPDTRNS_TCOMMIT_STARTED_MASK; /* Step CMT11 */
/* should never increment curr_tn on a frozen database */
- assert(!(FROZEN_HARD(csd) || (replication && IS_REPL_INST_FROZEN)));
+ assert(!(FROZEN_HARD(csa) || (replication && IS_REPL_INST_FROZEN_JPL(update_jnlpool))));
/* For MM, barrier ensures blocks updates complete before incrementing db TN. Otherwise concurrent
* processes could note a premature db TN value in gvcst_search and later fail to detect a block
* modification.
@@ -1644,7 +1676,7 @@ boolean_t tp_tend()
/* If db is journaled, then db header is flushed periodically when writing the EPOCH record,
* otherwise do it here every HEADER_UPDATE_COUNT transactions.
*/
- if (!JNL_ENABLED(csa) && !(csd->trans_hist.curr_tn & (HEADER_UPDATE_COUNT - 1)) && !FROZEN_CHILLED(csd))
+ if (!JNL_ENABLED(csa) && !(csd->trans_hist.curr_tn & (HEADER_UPDATE_COUNT - 1)) && !FROZEN_CHILLED(csa))
fileheader_sync(gv_cur_region);
if (NULL != si->kill_set_head)
INCR_KIP(csd, csa, si->kip_csa);
@@ -1665,15 +1697,19 @@ boolean_t tp_tend()
*/
if (replication)
{
+ assert(update_jnlpool);
+ assert(update_jnlpool->jnlpool_ctl == jpl);
+ assert(NULL != repl_csa);
+ assert(update_jnlpool && update_jnlpool->pool_init);
assert(repl_csa->now_crit);
if (!repl_csa->hold_onto_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg); /* Step CMT15 */
+ rel_lock(update_jnlpool->jnlpool_dummy_reg); /* Step CMT15 */
}
/* Check that we DON'T own crit on ANY region. The only exception is online mupip journal rollback/recovery
* or MUPIP TRIGGER -UPGRADE which holds crit for the entire process lifetime. */
assert(jgbl.onlnrlbk || TREF(in_trigger_upgrade) || (0 == have_crit(CRIT_HAVE_ANY_REG)));
/* the following section is the actual commitment of the journal records */
- TP_FINISH_JNL_PHASE2_IN_JNLBUFF_AND_JNLPOOL(jnl_fence_ctl, replication, jnlpool); /* Step CMT16 & CMT17 */
+ TP_FINISH_JNL_PHASE2_IN_JNLBUFF_AND_JNLPOOL(jnl_fence_ctl, replication, update_jnlpool); /* Step CMT16 & CMT17 */
/* The following section is the actual commitment of the changes in the database (phase2 for BG) */
for (si = first_tp_si_by_ftok; (NULL != si); si = si->next_tp_si_by_ftok)
{
@@ -1778,7 +1814,8 @@ failed:
if (replication && repl_csa->now_crit && release_crit)
{ /* The only restart that is possible once we acquired the journal pool lock is due to instance freeze */
assert(cdb_sc_instancefreeze == status);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ assert(update_jnlpool && update_jnlpool->pool_init);
+ rel_lock(update_jnlpool->jnlpool_dummy_reg);
}
/* Check that we DON'T own crit/commit on ANY region. The only exception is online mupip journal rollback/recovery
* which holds crit for the entire process lifetime.
@@ -1840,6 +1877,8 @@ skip_failed:
DEFERRED_EXIT_HANDLING_CHECK; /* now that all crits are released, check if deferred signal/exit handling needs to be done */
if (cdb_sc_normal == status)
{
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
first_tp_si_by_ftok = NULL; /* Signal t_commit_cleanup/secshr_db_clnup that TP transaction is NOT underway */
return TRUE;
}
@@ -1849,6 +1888,8 @@ failed_skip_revert:
SET_WC_BLOCKED_FINAL_RETRY_IF_NEEDED(csa, cnl, status);
TP_RETRY_ACCOUNTING(csa, cnl);
first_tp_si_by_ftok = NULL; /* Signal t_commit_cleanup/secshr_db_clnup that TP transaction is NOT underway */
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return FALSE;
}
diff --git a/sr_port/tp_timeout.c b/sr_port/tp_timeout.c
index 20d2999..59fcd64 100755
--- a/sr_port/tp_timeout.c
+++ b/sr_port/tp_timeout.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -96,8 +97,6 @@
/* External variables */
GBLREF dollar_ecode_type dollar_ecode;
-GBLREF mval dollar_etrap;
-GBLREF mval dollar_ztrap;
GBLREF volatile int4 outofband;
GBLREF xfer_entry_t xfer_table[];
GBLREF boolean_t in_timed_tn;
@@ -145,9 +144,9 @@ STATICFNDEF void tp_expire_now(void)
*/
STATICFNDEF void tptimeout_set(int4 dummy_param)
{
- VMS_ONLY(int4 status;)
+ DCL_THREADGBL_ACCESS;
-# ifdef UNIX
+ SETUP_THREADGBL_ACCESS;
/* TP timeout deferral is UNIX-only. This is because the mechanism becomes much more complicated on VMS
* due to the mixing of timers and TP timeout, both of which use the same event flag so don't play well
* together. It could be fixed for VMS with some perhaps non-trivial work but with VMS approaching EOL,
@@ -172,7 +171,6 @@ STATICFNDEF void tptimeout_set(int4 dummy_param)
DBGWTIME((stderr, "%s tptimeout_set: TP timeout *NOT* deferred - ecode index: %d etrap: %d\n" VMS_ONLY("\n"),
asccurtime, dollar_ecode.index, ETRAP_IN_EFFECT));
}
-# endif
if (tptimeout != outofband)
{
FIX_XFER_ENTRY(xf_linefetch, op_fetchintrrpt);
@@ -324,5 +322,5 @@ void tp_timeout_action(void)
*/
DBGWTIME((stderr, "%s tp_timeout_action: Driving TP timeout error\n" VMS_ONLY("\n"), asccurtime));
tp_clear_timeout();
- rts_error(VARLSTCNT(1) ERR_TPTIMEOUT);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_TPTIMEOUT);
}
diff --git a/sr_port/trans_code.c b/sr_port/trans_code.c
index 17d3367..3152806 100644
--- a/sr_port/trans_code.c
+++ b/sr_port/trans_code.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -42,16 +43,14 @@
# include "gtm_trigger.h"
#endif
-#define POP_SPECIFIED ((ztrap_form & ZTRAP_POP) && (level2go = MV_FORCE_INTD(&ztrap_pop2level))) /* note: assignment */
+#define POP_SPECIFIED (ZTRAP_POP & (TREF(ztrap_form)) && (level2go = MV_FORCE_INTD(&ztrap_pop2level))) /* note: assignment */
GBLREF stack_frame *frame_pointer, *zyerr_frame, *error_frame;
GBLREF unsigned short proc_act_type;
GBLREF spdesc rts_stringpool, stringpool, indr_stringpool;
GBLREF mstr *err_act;
GBLREF boolean_t is_tracing_on;
-GBLREF mval dollar_zyerror, dollar_ztrap, ztrap_pop2level;
-GBLREF int ztrap_form;
-GBLREF mval dollar_etrap;
+GBLREF mval dollar_zyerror, ztrap_pop2level;
GBLREF unsigned char *msp, *stackwarn, *stacktop;
GBLREF mv_stent *mv_chain;
GBLREF unsigned char *restart_pc, *restart_ctxt;
@@ -135,8 +134,8 @@ CONDITION_HANDLER(trans_code_ch)
|| (int)ERR_STACKCRIT == SIGNAL /* Successfully compiled ${Z,E}TRAP code but encountered STACK error while
* attempting to push new frame, OR, STACK error while executing $ZTRAP entryref
*/
- || !(ztrap_form & ZTRAP_ENTRYREF) /* User doesn't want ENTRYREF form for $ZTRAP */
- || !(ztrap_form & ZTRAP_CODE) /* Error during $ZTRAP ENTRYREF processing */
+ || !(ZTRAP_ENTRYREF & TREF(ztrap_form)) /* User doesn't want ENTRYREF form for $ZTRAP */
+ || !(ZTRAP_CODE & TREF(ztrap_form)) /* Error during $ZTRAP ENTRYREF processing */
|| IS_ETRAP) /* Error compiling $ETRAP code */
{
NEXTCH;
@@ -202,7 +201,7 @@ void trans_code(void)
*/
if (IS_ETRAP)
SET_ERROR_FRAME(frame_pointer); /* reset error_frame to point to frame_pointer */
- if (!(ztrap_form & ZTRAP_CODE) && !IS_ETRAP && POP_SPECIFIED)
+ if (!(ZTRAP_CODE & TREF(ztrap_form)) && !IS_ETRAP && POP_SPECIFIED)
{
GOLEVEL(level2go, TRUE);
}
@@ -210,15 +209,13 @@ void trans_code(void)
dummy.str = *err_act;
TREF(trans_code_pop) = push_mval(&dummy);
ESTABLISH(trans_code_ch);
- op_commarg(TREF(trans_code_pop), ((ztrap_form & ZTRAP_CODE) || IS_ETRAP) ? indir_linetail : indir_goto);
+ op_commarg(TREF(trans_code_pop), (ZTRAP_CODE & (TREF(ztrap_form)) || IS_ETRAP) ? indir_linetail : indir_goto);
REVERT;
if (NULL != gtm_err_dev)
{
-# ifdef UNIX
if (gtmsocket != gtm_err_dev->type)
remove_rms(gtm_err_dev);
-# endif
- if ((gtmsocket == gtm_err_dev->type) && gtm_err_dev->newly_created)
+ else if (gtm_err_dev->newly_created)
{
assert(gtm_err_dev->state != dev_open);
iosocket_destroy(gtm_err_dev);
diff --git a/sr_port/trans_code_cleanup.c b/sr_port/trans_code_cleanup.c
index ad134e9..7887e06 100644
--- a/sr_port/trans_code_cleanup.c
+++ b/sr_port/trans_code_cleanup.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -30,7 +30,6 @@ GBLREF unsigned short proc_act_type;
GBLREF stack_frame *frame_pointer;
GBLREF spdesc stringpool;
GBLREF spdesc rts_stringpool;
-GBLREF mval dollar_ztrap, dollar_etrap;
GBLREF mstr *err_act;
GBLREF io_desc *active_device;
GBLREF boolean_t ztrap_explicit_null;
@@ -51,7 +50,7 @@ void trans_code_cleanup(void)
*/
if (SFT_ZTRAP == proc_act_type)
{
- if (0 < dollar_ztrap.str.len)
+ if (0 < (TREF(dollar_ztrap)).str.len)
errmsg = ERR_ERRWZTRAP;
else
errmsg = ERR_ERRWETRAP;
@@ -84,11 +83,11 @@ void trans_code_cleanup(void)
/* Turn off any device exception related flags now that we are going to handle errors using
* $ETRAP or $ZTRAP AT THE PARENT LEVEL only (no more device exceptions).
*/
- dollar_ztrap.str.len = 0;
+ (TREF(dollar_ztrap)).str.len = 0;
ztrap_explicit_null = FALSE;
fp->flags &= SFF_DEV_ACT_ERR_OFF;
fp->flags &= SFF_ZTRAP_ERR_OFF;
- err_act = &dollar_etrap.str;
+ err_act = &((TREF(dollar_etrap)).str);
break;
} else if (ERR_ERRWIOEXC == errmsg)
{ /* Error while compiling device exception. Set SFF_ETRAP_ERR bit so control is transferred to
diff --git a/sr_port/trans_code_cleanup.h b/sr_port/trans_code_cleanup.h
index 954e129..8426f16 100755
--- a/sr_port/trans_code_cleanup.h
+++ b/sr_port/trans_code_cleanup.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2011 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -33,9 +34,9 @@ error_def(ERR_ERRWZTRAP);
errmsg = ERR_ERRWIOEXC; \
break; \
case SFT_ZTRAP: \
- if (err_act == &dollar_etrap.str) \
+ if (&((TREF(dollar_etrap)).str) == err_act) \
errmsg = ERR_ERRWETRAP; \
- else if (err_act == &dollar_ztrap.str) \
+ else if (&(TREF(dollar_ztrap)).str == err_act) \
errmsg = ERR_ERRWZTRAP; \
else \
assertpro(FALSE && err_act); \
diff --git a/sr_port/trap_env_init.c b/sr_port/trap_env_init.c
new file mode 100644
index 0000000..67f9c7c
--- /dev/null
+++ b/sr_port/trap_env_init.c
@@ -0,0 +1,143 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+
+#include "mdef.h"
+#include "iosp.h" /* for SS_ */
+#include "gtm_logicals.h"
+#include "min_max.h"
+#include "gtm_string.h"
+#include "gtm_strings.h" /* for STRNCASECMP */
+#include "trans_log_name.h"
+#include "trap_env_init.h"
+#include "gtmio.h"
+#include "gtmimagename.h"
+#include "trans_numeric.h"
+#include "logical_truth_value.h"
+#include "compiler.h"
+#include "op.h"
+#include "stack_frame.h"
+#include "indir_enum.h"
+
+#define ZTRAP_FORM_CODE "code"
+#define ZTRAP_FORM_ENTRYREF "entryref"
+#define ZTRAP_FORM_ADAPTIVE "adaptive"
+#define ZTRAP_FORM_POP "pop"
+
+GBLREF boolean_t is_updproc, run_time;
+GBLREF enum gtmImageTypes image_type;
+
+#ifdef GTM_TRIGGER
+LITREF mval default_etrap;
+#endif
+
+error_def(ERR_LOGTOOLONG);
+error_def(ERR_TRNLOGFAIL);
+
+static readonly unsigned char init_break[1] = {'B'};
+/* Initialize ztrap_form appropriately. Note this routine is not resident in gtm_env_init() because it raises errors
+ * and error handling is not set up yet in gtm_env_init().
+ */
+void trap_env_init(void)
+{
+ int4 status;
+ mstr val, trans;
+ char buf[MAX_SRCLINE + 1], *buf_ptr = &buf[0];
+ DCL_THREADGBL_ACCESS;
+
+ SETUP_THREADGBL_ACCESS;
+ assertpro(IS_MUMPS_IMAGE || is_updproc);
+ assert(run_time || is_updproc);
+ run_time = TRUE; /* so updproc gets a pass if there's an error */
+ /* Initialize which ever error trap we are using (ignored in the utilities except the update process) */
+ val.addr = GTM_ETRAP;
+ val.len = SIZEOF(GTM_ETRAP) - 1;
+ if ((SS_NORMAL == (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), do_sendmsg_on_log2long))) && (0 < trans.len))
+ {
+ (TREF(dollar_etrap)).str.addr = malloc(trans.len + 1); /* +1 for '\0'; This memory is never freed */
+ memcpy((TREF(dollar_etrap)).str.addr, trans.addr, trans.len);
+ (TREF(dollar_etrap)).str.addr[trans.len] = '\0';
+ (TREF(dollar_etrap)).str.len = trans.len;
+ (TREF(dollar_etrap)).mvtype = MV_STR;
+ TREF(ind_source) = &(TREF(dollar_etrap));
+ op_commarg(TREF(ind_source), indir_linetail);
+ op_unwind();
+ } else if (0 == (TREF(dollar_etrap)).mvtype)
+ { /* If didn't setup $ETRAP, set default $ZTRAP instead */
+ (TREF(dollar_ztrap)).mvtype = MV_STR;
+ (TREF(dollar_ztrap)).str.len = SIZEOF(init_break);
+ (TREF(dollar_ztrap)).str.addr = (char *)init_break;
+ }
+# ifdef GTM_TRIGGER
+ val.addr = GTM_TRIGGER_ETRAP;
+ val.len = SIZEOF(GTM_TRIGGER_ETRAP) - 1;
+ (TREF(gtm_trigger_etrap)).mvtype = MV_STR;
+ if ((SS_NORMAL == (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), do_sendmsg_on_log2long))) && (0 < trans.len))
+ {
+ (TREF(gtm_trigger_etrap)).str.addr = malloc(trans.len + 1); /* +1 for '\0'; This memory is never freed */
+ memcpy((TREF(gtm_trigger_etrap)).str.addr, trans.addr, trans.len);
+ (TREF(gtm_trigger_etrap)).str.addr[trans.len] = '\0';
+ (TREF(gtm_trigger_etrap)).str.len = trans.len;
+ TREF(ind_source) = &(TREF(gtm_trigger_etrap));
+ op_commarg(TREF(ind_source), indir_linetail);
+ op_unwind();
+ } else if (IS_MUPIP_IMAGE)
+ (TREF(gtm_trigger_etrap))= default_etrap;
+# endif
+ /* Initialize $ZSTEP from $gtm_zstep enviroment variable. */
+ val.addr = GTM_ZSTEP;
+ val.len = SIZEOF(GTM_ZSTEP) - 1;
+ if ((SS_NORMAL == (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), do_sendmsg_on_log2long))) && (0 < trans.len))
+ {
+ (TREF(dollar_zstep)).str.addr = malloc(trans.len + 1); /* +1 for '\0'; This memory is never freed */
+ memcpy((TREF(dollar_zstep)).str.addr, trans.addr, trans.len);
+ (TREF(dollar_zstep)).str.addr[trans.len] = '\0';
+ (TREF(dollar_zstep)).str.len = trans.len;
+ (TREF(dollar_zstep)).mvtype = MV_STR;
+ TREF(ind_source) = &(TREF(dollar_zstep));
+ op_commarg(TREF(ind_source), indir_linetail);
+ op_unwind();
+ } else if (0 == (TREF(dollar_zstep)).mvtype)
+ {
+ (TREF(dollar_zstep)).mvtype = MV_STR;
+ (TREF(dollar_zstep)).str.len = SIZEOF(init_break);
+ (TREF(dollar_zstep)).str.addr = (char *)init_break;
+ }
+ run_time = !is_updproc; /* restore to appropriate state */
+ TREF(ind_source) = NULL; /* probably superfluous, but profilactic */
+ TREF(ztrap_form) = ZTRAP_CODE; /* default */
+ val.addr = ZTRAP_FORM;
+ val.len = STR_LIT_LEN(ZTRAP_FORM);
+ if (SS_NORMAL != (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), dont_sendmsg_on_log2long)))
+ {
+ if (SS_NOLOGNAM == status)
+ return;
+ else if (SS_LOG2LONG == status)
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_LOGTOOLONG, 3, val.len, val.addr, SIZEOF(buf) - 1);
+ else
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_TRNLOGFAIL, 2, LEN_AND_LIT(ZTRAP_FORM), status);
+ }
+ if ((STR_LIT_LEN(ZTRAP_FORM_POP) < trans.len) && !STRNCASECMP(buf_ptr, ZTRAP_FORM_POP, STR_LIT_LEN(ZTRAP_FORM_POP)))
+ { /* "pop" can be a prefix to both entryref and adaptive */
+ buf_ptr += STR_LIT_LEN(ZTRAP_FORM_POP);
+ trans.len -= STR_LIT_LEN(ZTRAP_FORM_POP);
+ TREF(ztrap_form) |= ZTRAP_POP;
+ }
+ if ((STR_LIT_LEN(ZTRAP_FORM_ENTRYREF) == trans.len)
+ && !STRNCASECMP(buf_ptr, ZTRAP_FORM_ENTRYREF, MIN(STR_LIT_LEN(ZTRAP_FORM_ENTRYREF), trans.len)))
+ {
+ TREF(ztrap_form) |= ZTRAP_ENTRYREF;
+ TREF(ztrap_form) &= ~ZTRAP_CODE;
+ } else if ((STR_LIT_LEN(ZTRAP_FORM_ADAPTIVE) == trans.len)
+ && !STRNCASECMP(buf_ptr, ZTRAP_FORM_ADAPTIVE, MIN(STR_LIT_LEN(ZTRAP_FORM_ADAPTIVE), trans.len)))
+ TREF(ztrap_form) |= ZTRAP_ENTRYREF;
+ return;
+}
diff --git a/sr_port/ztrap_form_init.h b/sr_port/trap_env_init.h
old mode 100755
new mode 100644
similarity index 65%
rename from sr_port/ztrap_form_init.h
rename to sr_port/trap_env_init.h
index ef0e368..c23872c
--- a/sr_port/ztrap_form_init.h
+++ b/sr_port/trap_env_init.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001 Sanchez Computer Associates, Inc. *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -9,9 +10,9 @@
* *
****************************************************************/
-#ifndef __ZTRAP_FORM_INIT_H__
-#define __ZTRAP_FORM_INIT_H__
+#ifndef __TRAP_ENV_INIT_H__
+#define __TRAP_ENV_INIT_H__
-void ztrap_form_init(void);
+void trap_env_init(void);
#endif
diff --git a/sr_port/unary_tail.c b/sr_port/unary_tail.c
index fb9e444..c95f397 100644
--- a/sr_port/unary_tail.c
+++ b/sr_port/unary_tail.c
@@ -22,6 +22,8 @@
LITREF octabstruct oc_tab[];
+error_def(ERR_NUMOFLOW);
+
void unary_tail(oprtype *opr)
{ /* collapse any string of unary operators that cam be simplified
* opr is a pointer to a operand structure to process
@@ -125,7 +127,15 @@ void unary_tail(oprtype *opr)
} else if (MV_NM & mv->mvtype)
mv->sgn = !mv->sgn;
} else
+ {
s2n(mv);
+ if (!(MV_NM & mv->mvtype))
+ {
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NUMOFLOW);
+ assert(TREF(rts_error_in_parse));
+ return;
+ }
+ }
n2s(mv);
v = mv;
put_lit_s(v, t);
diff --git a/sr_port/unw_mv_ent.c b/sr_port/unw_mv_ent.c
index 78c0878..6e09a18 100644
--- a/sr_port/unw_mv_ent.c
+++ b/sr_port/unw_mv_ent.c
@@ -61,8 +61,6 @@ GBLREF gv_namehead *gv_target;
GBLREF gd_addr *gd_header;
GBLREF dollar_ecode_type dollar_ecode;
GBLREF dollar_stack_type dollar_stack;
-GBLREF mval dollar_etrap;
-GBLREF mval dollar_ztrap;
GBLREF mval dollar_zgbldir;
GBLREF volatile boolean_t dollar_zininterrupt;
GBLREF boolean_t ztrap_explicit_null; /* whether $ZTRAP was explicitly set to NULL in this frame */
@@ -127,19 +125,19 @@ void unw_mv_ent(mv_stent *mv_st_ent)
{
case MVST_MSAV:
*mv_st_ent->mv_st_cont.mvs_msav.addr = mv_st_ent->mv_st_cont.mvs_msav.v;
- if (&dollar_etrap == mv_st_ent->mv_st_cont.mvs_msav.addr)
+ if (&(TREF(dollar_etrap)) == mv_st_ent->mv_st_cont.mvs_msav.addr)
{
ztrap_explicit_null = FALSE;
- dollar_ztrap.str.len = 0;
- } else if (&dollar_ztrap == mv_st_ent->mv_st_cont.mvs_msav.addr)
+ (TREF(dollar_ztrap)).str.len = 0;
+ } else if (&(TREF(dollar_ztrap)) == mv_st_ent->mv_st_cont.mvs_msav.addr)
{
- if (STACK_ZTRAP_EXPLICIT_NULL == dollar_ztrap.str.len)
+ if (STACK_ZTRAP_EXPLICIT_NULL == (TREF(dollar_ztrap)).str.len)
{
- dollar_ztrap.str.len = 0;
+ (TREF(dollar_ztrap)).str.len = 0;
ztrap_explicit_null = TRUE;
} else
ztrap_explicit_null = FALSE;
- dollar_etrap.str.len = 0;
+ (TREF(dollar_etrap)).str.len = 0;
if (tp_timeout_deferred UNIX_ONLY( && !dollar_zininterrupt))
/* A tp timeout was deferred. Now that $ETRAP is no longer in effect and we are not in a
* job interrupt, the timeout can no longer be deferred and needs to be recognized.
@@ -453,8 +451,8 @@ void unw_mv_ent(mv_stent *mv_st_ent)
gtm_trigger_depth = mv_st_ent->mv_st_cont.mvs_trigr.gtm_trigger_depth_save;
if (0 == gtm_trigger_depth)
{ /* Only restore error handling environment if returning out of trigger-world */
- dollar_etrap = mv_st_ent->mv_st_cont.mvs_trigr.dollar_etrap_save;
- dollar_ztrap = mv_st_ent->mv_st_cont.mvs_trigr.dollar_ztrap_save;
+ TREF(dollar_etrap) = mv_st_ent->mv_st_cont.mvs_trigr.dollar_etrap_save;
+ TREF(dollar_ztrap) = mv_st_ent->mv_st_cont.mvs_trigr.dollar_ztrap_save;
ztrap_explicit_null = mv_st_ent->mv_st_cont.mvs_trigr.ztrap_explicit_null_save;
}
DEFER_INTERRUPTS(INTRPT_IN_CONDSTK, prev_intrpt_state);
diff --git a/sr_port/updhelper_writer.c b/sr_port/updhelper_writer.c
old mode 100755
new mode 100644
index a4ec53b..112d297
--- a/sr_port/updhelper_writer.c
+++ b/sr_port/updhelper_writer.c
@@ -71,9 +71,8 @@
#define UPDHELPER_EARLY_EPOCH 5
#define THRESHOLD_FOR_PAUSE 10
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF void (*call_on_signal)();
-GBLREF recvpool_addrs recvpool;
GBLREF upd_helper_entry_ptr_t helper_entry;
GBLREF uint4 process_id;
GBLREF int updhelper_log_fd;
@@ -131,7 +130,7 @@ int updhelper_writer(void)
}
wcs_timer_start(reg, TRUE);
if ((cnl->wcs_active_lvl >= csd->flush_trigger * csd->writer_trigger_factor / 100.0)
- && !FROZEN_CHILLED(csd))
+ && !FROZEN_CHILLED(csa))
{
JNL_ENSURE_OPEN_WCS_WTSTART(csa, reg, 0, NULL, FALSE, dummy_errno);
flushed = TRUE;
@@ -147,7 +146,7 @@ int updhelper_writer(void)
SET_GBL_JREC_TIME;
assert(jgbl.gbl_jrec_time);
if (((jbp->next_epoch_time - UPDHELPER_EARLY_EPOCH) <= jgbl.gbl_jrec_time)
- && !FROZEN_CHILLED(csd))
+ && !FROZEN_CHILLED(csa))
{
DO_DB_FSYNC_OUT_OF_CRIT_IF_NEEDED(reg, csa, jpc, jbp);
if (grab_crit_immediate(reg, OK_FOR_WCS_RECOVER_TRUE))
diff --git a/sr_port/updproc.c b/sr_port/updproc.c
index b0d8712..f2bd057 100644
--- a/sr_port/updproc.c
+++ b/sr_port/updproc.c
@@ -57,7 +57,7 @@
#ifdef GTM_TRIGGER
#include <rtnhdr.h> /* for rtn_tabent in gv_trigger.h */
#include "gv_trigger.h"
-# include "gtm_trigger.h"
+#include "gtm_trigger.h"
#include "targ_alloc.h"
#include "trigger.h"
#include "hashtab_str.h"
@@ -90,6 +90,7 @@
#include "tp_frame.h"
#include "gvcst_jrt_null.h" /* for gvcst_jrt_null prototype */
#include "preemptive_db_clnup.h"
+#include "trap_env_init.h"
#ifdef DEBUG
#include "repl_filter.h" /* needed by an assert in UPD_GV_BIND_NAME_APPROPRIATE macro */
#endif
@@ -107,8 +108,7 @@ GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF recvpool_addrs recvpool;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_updproc;
GBLREF seq_num seq_num_zero, seq_num_one;
GBLREF gd_addr *gd_header;
@@ -175,7 +175,7 @@ error_def(ERR_UPDREPLSTATEOFF);
* jpl->prev_jnlseqno_time. Doing it the other way around would mean the reset will happen \
* with a potentially lower value than the final adjusted time written in the jnl record. \
*/ \
- ADJUST_GBL_JREC_TIME_JNLPOOL(jgbl, jnlpool_ctl); \
+ ADJUST_GBL_JREC_TIME_JNLPOOL(jgbl, jnlpool->jnlpool_ctl); \
if (JNL_ENABLED(CSA)) \
{ \
reg = JPC->region; \
@@ -205,7 +205,7 @@ error_def(ERR_UPDREPLSTATEOFF);
csa = &FILE_INFO(REG)->s_addrs; \
assert(csa->now_crit); \
SYNC_ONLN_RLBK_CYCLES; \
- if (REG == jnlpool.jnlpool_dummy_reg) \
+ if (REG == jnlpool->jnlpool_dummy_reg) \
rel_lock(REG); \
else \
rel_crit(REG); \
@@ -235,7 +235,7 @@ error_def(ERR_UPDREPLSTATEOFF);
#define LOG_ONLINE_ROLLBACK_EVENT \
{ \
repl_log(updproc_log_fp, TRUE, TRUE, "Starting afresh due to ONLINE ROLLBACK\n"); \
- repl_log(updproc_log_fp, TRUE, TRUE, "REPL INFO - Current Jnlpool Seqno : %llu\n", jnlpool.jnlpool_ctl->jnl_seqno); \
+ repl_log(updproc_log_fp, TRUE, TRUE, "REPL INFO - Current Jnlpool Seqno : %llu\n", jnlpool->jnlpool_ctl->jnl_seqno); \
repl_log(updproc_log_fp, TRUE, TRUE, "REPL INFO - Current Update process Read Seqno : %llu\n", \
upd_proc_local->read_jnl_seqno); \
assert(recvpool_ctl->jnl_seqno); \
@@ -389,6 +389,7 @@ int updproc(void)
*/
TREF(error_on_jnl_file_lost) = JNL_FILE_LOST_ERRORS;
is_updproc = TRUE;
+ trap_env_init();
is_replicator = TRUE; /* as update process goes through t_end() and can write jnl recs to the jnlpool for replicated db */
TREF(ok_to_see_statsdb_regs) = TRUE;
gv_play_duplicate_kills = TRUE; /* needed to ensure seqnos are kept in sync between source and receiver instances */
@@ -401,7 +402,7 @@ int updproc(void)
}
OPERATOR_LOG_MSG;
/* Initialization of all the relevant global datastructures and allocation for TP */
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
mu_gv_stack_init();
upd_proc_local = recvpool.upd_proc_local;
recvpool_ctl = recvpool.recvpool_ctl;
@@ -426,7 +427,7 @@ int updproc(void)
* update process cannot proceed. Wait for this to finish and update local copy of seqnos accordingly. The receiver
* server will set upd_proc_local->read_jnl_seqno to a non-zero value to signal completion of this step.
*/
- if (jnlpool.repl_inst_filehdr->is_supplementary && !jnlpool.jnlpool_ctl->upd_disabled)
+ if (jnlpool->repl_inst_filehdr->is_supplementary && !jnlpool->jnlpool_ctl->upd_disabled)
{
repl_log(updproc_log_fp, TRUE, TRUE, "Waiting for Receiver Server to write read_jnl_seqno\n");
while (!upd_proc_local->read_jnl_seqno)
@@ -448,13 +449,13 @@ int updproc(void)
recvpool.upd_helper_ctl->pre_read_offset = 0;
}
}
- if (repl_csa->onln_rlbk_cycle != jnlpool_ctl->onln_rlbk_cycle)
+ if (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle)
{ /* A concurrent online rollback. Handle it */
LOG_ONLINE_ROLLBACK_EVENT;
assert(!repl_csa->now_crit && !set_onln_rlbk_flg);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
SYNC_ONLN_RLBK_CYCLES;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
upd_proc_local->onln_rlbk_flg = TRUE; /* let receiver know about the online rollback */
WAIT_FOR_ZERO_RECVPOOL_JNL_SEQNO;
upd_proc_local->read = 0;
@@ -484,8 +485,8 @@ int updproc(void)
* But the receive pool jnl_seqno is the seqno of the specific non-supplementary stream. So those
* cannot be compared at all. But they are guaranteed to be equal in all other cases. Assert that.
*/
- assert((jnlpool_ctl->jnl_seqno == start_jnl_seqno)
- || (jnlpool.repl_inst_filehdr->is_supplementary && !jnlpool.jnlpool_ctl->upd_disabled));
+ assert((jnlpool->jnlpool_ctl->jnl_seqno == start_jnl_seqno)
+ || (jnlpool->repl_inst_filehdr->is_supplementary && !jnlpool->jnlpool_ctl->upd_disabled));
assert(updproc_continue && !set_onln_rlbk_flg);
/* We should be the only one acquiring the lock, so a single try should be sufficient. */
status = pthread_mutex_trylock(&recvpool.recvpool_ctl->write_updated_ctl);
@@ -515,7 +516,7 @@ int updproc(void)
assert(!dollar_tlevel);
assert(!dollar_trestart);
}
- start_jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno; /* needed when we go back to the beginning of the loop */
+ start_jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno; /* needed when we go back to the beginning of the loop */
} else if (!updproc_continue)
break;
}
@@ -572,11 +573,12 @@ void updproc_actions(gld_dbname_list *gld_db_files)
const char *trigdef_inst = NULL, *no_trigdef_inst = NULL;
# endif
gvnh_reg_t *gvnh_reg;
+ gd_addr *starting_gd_header;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
DEBUG_ONLY(
assert(!repl_csa->hold_onto_crit); /* so we can do unconditional grab_lock/rel_lock below */
ASSERT_VALID_JNLPOOL(repl_csa);
@@ -593,9 +595,9 @@ void updproc_actions(gld_dbname_list *gld_db_files)
jnl_seqno = upd_proc_local->read_jnl_seqno;
log_interval = upd_proc_local->log_interval;
lastlog_seqno = jnl_seqno - log_interval; /* to ensure we log the first transaction */
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{
- if (!jnlpool.jnlpool_ctl->upd_disabled)
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{
suppl_root_primary = TRUE;
suppl_propagate_primary = FALSE;
@@ -612,7 +614,7 @@ void updproc_actions(gld_dbname_list *gld_db_files)
/* Since update process does not invoke op_gvname but directly invokes op_gvput/kill etc. we set TREF(gd_targ_addr)
* here (this is normally set by op_gvname in mumps).
*/
- TREF(gd_targ_addr) = gd_header;
+ TREF(gd_targ_addr) = starting_gd_header = gd_header;
while (TRUE)
{
incr_seqno = FALSE;
@@ -692,10 +694,10 @@ void updproc_actions(gld_dbname_list *gld_db_files)
if ((0 != status) && (ETIMEDOUT != status))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_mutex_timedwait"), CALLFROM, status, 0);
- if (!upd_proc_local->onln_rlbk_flg && (repl_csa->onln_rlbk_cycle != jnlpool.jnlpool_ctl->onln_rlbk_cycle))
+ if (!upd_proc_local->onln_rlbk_flg && (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle))
{ /* A concurrent online rollback happened. Start afresh */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
- UPDPROC_ONLN_RLBK_CLNUP(jnlpool.jnlpool_dummy_reg); /* No return */
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ UPDPROC_ONLN_RLBK_CLNUP(jnlpool->jnlpool_dummy_reg); /* No return */
} /* else onln_rlbk_flag is already set and the receiver should take the next appropriate action */
continue;
}
@@ -827,7 +829,7 @@ void updproc_actions(gld_dbname_list *gld_db_files)
upd_rec_seqno = tupd_num = tcom_num = 0;
continue;
}
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{
assert(0 <= histinfo.strm_index);
assert((0 == histinfo.strm_index) || IS_REPL_INST_UUID_NON_NULL(histinfo.lms_group));
@@ -882,24 +884,24 @@ void updproc_actions(gld_dbname_list *gld_db_files)
rel_crit(gv_cur_region);
}
TP_CHANGE_REG(save_reg);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
- if (repl_csa->onln_rlbk_cycle != jnlpool_ctl->onln_rlbk_cycle)
- UPDPROC_ONLN_RLBK_CLNUP(jnlpool.jnlpool_dummy_reg); /* No return */
- jnlpool_ctl->strm_seqno[histinfo.strm_index] = strm_seqno;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ if (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle)
+ UPDPROC_ONLN_RLBK_CLNUP(jnlpool->jnlpool_dummy_reg); /* No return */
+ jnlpool->jnlpool_ctl->strm_seqno[histinfo.strm_index] = strm_seqno;
+ rel_lock(jnlpool->jnlpool_dummy_reg);
/* Ideally we also want to do a "repl_inst_flush_filehdr" to make the strm_seqno in the
* instance file header also uptodate but that is anyways going to be done as part of
* the "repl_inst_histinfo_add" call below so we skip doing it separately here.
*/
}
- assert(jnlpool.jnlpool_ctl->upd_disabled || (strm_index == histinfo.strm_index));
+ assert(jnlpool->jnlpool_ctl->upd_disabled || (strm_index == histinfo.strm_index));
}
/* Now that we have constructed the history, add it to the instance file. */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
- if (repl_csa->onln_rlbk_cycle != jnlpool_ctl->onln_rlbk_cycle)
- UPDPROC_ONLN_RLBK_CLNUP(jnlpool.jnlpool_dummy_reg); /* No return */
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ if (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle)
+ UPDPROC_ONLN_RLBK_CLNUP(jnlpool->jnlpool_dummy_reg); /* No return */
repl_inst_histinfo_add(&histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
/* Dump the history contents AFTER the "repl_inst_histinfo_add" and "wcs_flu" above.
* This way, in case of a -updateresync or -noresync history record addition,
* (particularly for the first A->P connection), the user is guaranteed that
@@ -1008,13 +1010,14 @@ void updproc_actions(gld_dbname_list *gld_db_files)
rec_strm_seqno = GET_STRM_SEQNO(rec);
strm_index = GET_STRM_INDEX(rec_strm_seqno);
rec_strm_seqno = GET_STRM_SEQ60(rec_strm_seqno);
- strm_seqno = jnlpool_ctl->strm_seqno[strm_index];
+ strm_seqno = jnlpool->jnlpool_ctl->strm_seqno[strm_index];
/* In the event of a concurrent ONLINE ROLLBACK, it is likely that the strm_seqno is less than
* rec_strm_seqno. In that case, do not issue STRMSEQMISMTCH error as that would be incorrect.
* Instead, continue and eventually, either the update process or the transaction processing logic
* will detect the online rollback and take appropriate action.
*/
- if ((rec_strm_seqno != strm_seqno) && (repl_csa->onln_rlbk_cycle == jnlpool_ctl->onln_rlbk_cycle))
+ if ((rec_strm_seqno != strm_seqno)
+ && (repl_csa->onln_rlbk_cycle == jnlpool->jnlpool_ctl->onln_rlbk_cycle))
{
assert(FALSE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_STRMSEQMISMTCH, 3,
@@ -1226,6 +1229,11 @@ void updproc_actions(gld_dbname_list *gld_db_files)
&jnl_seqno);
}
}
+ /* Triggers can change the GLD references. Verify and restore as needed */
+ if (gd_header != starting_gd_header)
+ gd_header = starting_gd_header;
+ if (TREF(gd_targ_addr) != gd_header)
+ TREF(gd_targ_addr) = gd_header;
# endif
if ((upd_good_record == bad_trans_type) && !IS_TP(rectype))
incr_seqno = TRUE;
@@ -1372,7 +1380,8 @@ void updproc_actions(gld_dbname_list *gld_db_files)
* non-supplementary stream of interest (strm_index) that this update process is processing.
*/
assert(!suppl_root_primary || ((0 < strm_index) && (MAX_SUPPL_STRMS > strm_index)));
- jnlpool_ctl_seqno = (!suppl_root_primary ? jnlpool_ctl->jnl_seqno : jnlpool_ctl->strm_seqno[strm_index]);
+ jnlpool_ctl_seqno = (!suppl_root_primary ? jnlpool->jnlpool_ctl->jnl_seqno
+ : jnlpool->jnlpool_ctl->strm_seqno[strm_index]);
if (jnlpool_ctl_seqno)
{ /* Now that the update process has played an incoming seqno, we expect it to have incremented
* the corresponding jnl_seqno and strm_seqno fields in the current instance's journal pool
@@ -1389,7 +1398,7 @@ void updproc_actions(gld_dbname_list *gld_db_files)
* before that in the idle wait loop) and take appropriate action.
*/
if ((upd_proc_local->read_jnl_seqno != jnlpool_ctl_seqno)
- && (repl_csa->onln_rlbk_cycle == jnlpool_ctl->onln_rlbk_cycle))
+ && (repl_csa->onln_rlbk_cycle == jnlpool->jnlpool_ctl->onln_rlbk_cycle))
{
repl_log(updproc_log_fp, TRUE, TRUE,
"JNLSEQNO last updated by update process = "INT8_FMT" "INT8_FMTX"\n",
diff --git a/sr_port/updproc_end.c b/sr_port/updproc_end.c
index a4f6fcd..159728f 100644
--- a/sr_port/updproc_end.c
+++ b/sr_port/updproc_end.c
@@ -64,9 +64,8 @@
GBLREF gd_region *gv_cur_region;
GBLREF recvpool_addrs recvpool;
GBLREF gld_dbname_list *upd_db_files;
-GBLREF boolean_t pool_init;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF int pool_init;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF void (*call_on_signal)();
GBLREF FILE *updproc_log_fp;
@@ -83,15 +82,15 @@ void updproc_stop(boolean_t exit)
call_on_signal = NULL; /* Don't reenter on error */
if (pool_init)
{
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit);
- jnlpool_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ jnlpool_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
- jnlpool_strm_seqno[idx] = jnlpool.jnlpool_ctl->strm_seqno[idx];
+ jnlpool_strm_seqno[idx] = jnlpool->jnlpool_ctl->strm_seqno[idx];
log_seqno = recvpool.recvpool_ctl->jnl_seqno;
log_seqno1 = recvpool.upd_proc_local->read_jnl_seqno;
strm_idx = recvpool.gtmrecv_local->strm_index;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
repl_log(updproc_log_fp, TRUE, TRUE, "REPL INFO - Current Jnlpool Seqno : %llu\n", jnlpool_seqno);
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
{
@@ -105,12 +104,13 @@ void updproc_stop(boolean_t exit)
repl_log(updproc_log_fp, TRUE, TRUE, "REPL INFO - Current Receive Pool Seqno : %llu\n", log_seqno);
if (!INST_FREEZE_ON_ERROR_POLICY)
{
- mutex_cleanup(jnlpool.jnlpool_dummy_reg);
+ mutex_cleanup(jnlpool->jnlpool_dummy_reg);
JNLPOOL_SHMDT(jnlpool, status, save_errno);
if (0 > status)
repl_log(stderr, TRUE, TRUE, "Error detaching from jnlpool : %s\n", STRERROR(save_errno));
assert(!pool_init);
}
+ pool_init--;
}
recvpool.upd_proc_local->upd_proc_shutdown = NORMAL_SHUTDOWN;
/* The receiver server needs to do a WAITPID on the update process so that the STOPed update process can be
diff --git a/sr_port/updproc_init.c b/sr_port/updproc_init.c
old mode 100755
new mode 100644
index 73dc6e4..484c460
--- a/sr_port/updproc_init.c
+++ b/sr_port/updproc_init.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -39,11 +39,11 @@
#include "updproc.h"
#include "repl_dbg.h"
-GBLREF boolean_t pool_init;
-GBLREF gd_addr *gd_header;
-GBLREF recvpool_addrs recvpool;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF FILE *updproc_log_fp;
+GBLREF int pool_init;
+GBLREF gd_addr *gd_header;
+GBLREF recvpool_addrs recvpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF FILE *updproc_log_fp;
error_def(ERR_RECVPOOLSETUP);
error_def(ERR_TEXT);
@@ -59,10 +59,10 @@ int updproc_init(gld_dbname_list **gld_db_files , seq_num *start_jnl_seqno)
gld_dbname_list *curr;
/* Do jnlpool_init ahead of recvpool_init so in case we have a ftok_counter_halted situation we have
- * jnlpool.repl_inst_filehdr initialized to set it to TRUE. This is later relied upon by "gtmsource_shutdown"
+ * jnlpool->repl_inst_filehdr initialized to set it to TRUE. This is later relied upon by "gtmsource_shutdown"
* or "gtmrecv_shutdown" when they do the "ftok_sem_release".
*/
- jnlpool_init((jnlpool_user)GTMPROC, (boolean_t)FALSE, (boolean_t *)NULL);
+ jnlpool_init((jnlpool_user)GTMPROC, (boolean_t)FALSE, (boolean_t *)NULL, NULL);
recvpool_init(UPDPROC, FALSE);
/* The log file can be initialized only after having attached to the receive pool as the update process log file name
* is derived from the receiver server log file name which is in turn available only in the receive pool.
@@ -82,9 +82,9 @@ int updproc_init(gld_dbname_list **gld_db_files , seq_num *start_jnl_seqno)
RTS_ERROR_LITERAL("Receive pool semop error"), save_errno);
}
repl_log(updproc_log_fp, TRUE, TRUE, "Attached to existing jnlpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->jnlpool_shmid, jnlpool.repl_inst_filehdr->jnlpool_semid);
+ jnlpool->repl_inst_filehdr->jnlpool_shmid, jnlpool->repl_inst_filehdr->jnlpool_semid);
repl_log(updproc_log_fp, TRUE, TRUE, "Attached to existing recvpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->recvpool_shmid, jnlpool.repl_inst_filehdr->recvpool_semid);
+ jnlpool->repl_inst_filehdr->recvpool_shmid, jnlpool->repl_inst_filehdr->recvpool_semid);
/* Note: dpzgbini() is already called as part of gtm_startup which in turn is invoked by init_gtm.
* So no need to do this initialization.
*/
diff --git a/sr_port/updproc_open_files.c b/sr_port/updproc_open_files.c
old mode 100755
new mode 100644
index 00126c0..edf3695
--- a/sr_port/updproc_open_files.c
+++ b/sr_port/updproc_open_files.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2005, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2005-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -21,9 +22,6 @@
#include <sys/mman.h>
#include <errno.h>
-#ifdef VMS
-#include <descrip.h> /* Required for gtmsource.h */
-#endif
#include "gtm_string.h"
#include "gdsroot.h"
@@ -43,18 +41,6 @@
#include "repl_msg.h"
#include "gtmsource.h"
-#ifdef VMS
-#include <ssdef.h>
-#include <fab.h>
-#include <rms.h>
-#include <iodef.h>
-#include <secdef.h>
-#include <psldef.h>
-#include <lckdef.h>
-#include <syidef.h>
-#include <xab.h>
-#include <prtdef.h>
-#endif
#include "util.h"
#include "op.h"
#include "gvcst_protos.h" /* for gvcst_init prototype */
@@ -76,12 +62,10 @@ GBLREF FILE *updproc_log_fp;
GBLREF struct_jrec_tcom tcom_record;
GBLREF jnl_gbls_t jgbl;
GBLREF uint4 process_id;
-#ifndef UNIX
GBLREF boolean_t secondary_side_std_null_coll;
-#endif
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
#ifdef DEBUG
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
#endif
error_def(ERR_NOREPLCTDREG);
@@ -105,7 +89,7 @@ boolean_t updproc_open_files(gld_dbname_list **gld_db_files, seq_num *start_jnl_
reg = curr->gd;
fn = (char *)reg->dyn.addr->fname;
csa = &FILE_INFO(reg)->s_addrs; /* Work of dbfilopn - assigning file_cntl already done db_files_from_gld */
- gvcst_init(reg);
+ gvcst_init(reg, NULL);
csd = csa->hdr;
/* Check whether all regions have same null collation order */
if (this_side_std_null_coll != csd->std_null_coll)
@@ -132,13 +116,6 @@ boolean_t updproc_open_files(gld_dbname_list **gld_db_files, seq_num *start_jnl_
continue;
} else
assertpro(!REPL_ENABLED(csd) || JNL_ENABLED(csd));
-# ifdef VMS
- if (recvpool.upd_proc_local->updateresync)
- {
- TP_CHANGE_REG(reg);
- wcs_flu(WCSFLU_FLUSH_HDR);
- }
-# endif
prev = curr;
curr = curr->next;
prev->next = *gld_db_files;
@@ -152,47 +129,34 @@ boolean_t updproc_open_files(gld_dbname_list **gld_db_files, seq_num *start_jnl_
* region, there is no reason for the update process to continue.
*/
assert(FALSE);
- /* Unix and VMS have different field names */
- UNIX_ONLY(gld_fn = (sm_uc_ptr_t)recvpool.recvpool_ctl->recvpool_id.instfilename;)
- VMS_ONLY(gld_fn = (sm_uc_ptr_t)recvpool.recvpool_ctl->recvpool_id.gtmgbldir;)
+ gld_fn = (sm_uc_ptr_t)recvpool.recvpool_ctl->recvpool_id.instfilename;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_NOREPLCTDREG, 3,
- LEN_AND_LIT(UNIX_ONLY("instance file") VMS_ONLY("global directory")), gld_fn);
+ LEN_AND_LIT("instance file"), gld_fn);
}
/* Now that all the databases are opened, compute the MAX region sequence number across all regions */
- assert((NULL != jnlpool.jnlpool_ctl) && pool_init); /* jnlpool_init should have already been done */
- VMS_ONLY(jgbl.max_resync_seqno = 0;)
+ assert(pool_init && jnlpool && (NULL != jnlpool->jnlpool_ctl)); /* jnlpool_init should have already been done */
lcl_seqno = 0;
/* Before looking at the region sequence numbers (to compute the MAX of them), we need to ensure that NO concurrent
* online rollback happens. So, grab the journal pool lock as rollback needs it. The reason we do it in two separate
* loops instead of one is because we don't want to do gvcst_init while holding the journal pool lock as the former
* acquires ftok and access control semaphores and holding the journal pool lock is a potential recipe for deadlocks
*/
- UNIX_ONLY(grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY));
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
for (curr = *gld_db_files; NULL != curr; curr = curr->next)
{
reg = curr->gd;
csa = &FILE_INFO(reg)->s_addrs; /* Work of dbfilopn - assigning file_cntl already done db_files_from_gld */
csd = csa->hdr;
-# ifdef UNIX
+ if (NULL == csa->jnlpool)
+ csa->jnlpool = jnlpool;
if (lcl_seqno < csd->reg_seqno)
lcl_seqno = csd->reg_seqno;
-# else
- if (recvpool.upd_proc_local->updateresync)
- csd->resync_seqno = csd->reg_seqno;
- if (lcl_seqno < csd->resync_seqno)
- lcl_seqno = csd->resync_seqno;
- /* jgbl.max_resync_seqno should be set only after the test for updateresync because resync_seqno gets
- * modified to reg_seqno in case receiver is started with -updateresync option */
- if (jgbl.max_resync_seqno < csd->resync_seqno)
- jgbl.max_resync_seqno = csd->resync_seqno;
-# endif
}
repl_log(updproc_log_fp, TRUE, TRUE, " --------> start_jnl_seqno = "INT8_FMT" "INT8_FMTX"\n",
INT8_PRINT(lcl_seqno), INT8_PRINTX(lcl_seqno));
- UNIX_ONLY(rel_lock(jnlpool.jnlpool_dummy_reg));
+ rel_lock(jnlpool->jnlpool_dummy_reg);
assert(0 != lcl_seqno);
*start_jnl_seqno = lcl_seqno;
- UNIX_ONLY(recvpool.recvpool_ctl->this_side.is_std_null_coll = this_side_std_null_coll;)
- VMS_ONLY(secondary_side_std_null_coll = this_side_std_null_coll;)
+ recvpool.recvpool_ctl->this_side.is_std_null_coll = this_side_std_null_coll;
return TRUE;
}
diff --git a/sr_port/viewtab.h b/sr_port/viewtab.h
old mode 100755
new mode 100644
index 18b5c85..ccc8814
--- a/sr_port/viewtab.h
+++ b/sr_port/viewtab.h
@@ -55,6 +55,7 @@ VIEWTAB("JNLACTIVE", VTP_DBREGION, VTK_JNLACTIVE, MV_NM),
VIEWTAB("JNLERROR", VTP_VALUE | VTP_NULL, VTK_JNLERROR, MV_NM),
VIEWTAB("JNLFILE", VTP_DBREGION, VTK_JNLFILE, MV_STR),
VIEWTAB("JNLFLUSH", VTP_DBREGION | VTP_NULL, VTK_JNLFLUSH, MV_STR),
+VIEWTAB("JNLPOOL", VTP_NULL, VTK_JNLPOOL, MV_STR),
VIEWTAB("JNLTRANSACTION", VTP_NULL, VTK_JNLTRANSACTION, MV_NM),
VIEWTAB("JNLWAIT", VTP_NULL, VTK_JNLWAIT, MV_STR),
VIEWTAB("JOBPID", VTP_VALUE | VTP_NULL, VTK_JOBPID, MV_STR),
diff --git a/sr_port/wbox_test_init.h b/sr_port/wbox_test_init.h
old mode 100755
new mode 100644
index fd6d277..0d5e1ee
--- a/sr_port/wbox_test_init.h
+++ b/sr_port/wbox_test_init.h
@@ -11,8 +11,8 @@
* *
****************************************************************/
-#ifndef __WBOX_TEST_INIT_
-#define __WBOX_TEST_INIT_
+#ifndef WBOX_TEST_INIT
+#define WBOX_TEST_INIT
/* The standalone routine gtmsecshr_wrapper needs these to be GBLDEFs so create a scheme to force that. If WBOX_GBLDEF is
* defined, create these as GBLDEFs instead of GBLREFs.
@@ -180,7 +180,10 @@ typedef enum {
WBTEST_LVMON_PSEUDO_FAIL, /* 133 : Create condition to cause lvmonitor to fail a comparison and report it */
WBTEST_REPLINSTSTNDALN, /* 134 : Expected case of REPLINSTSTNDALN error */
WBTEST_FORCE_SHMPLRECOV, /* 135 : Always invoke SHMPLRECOV abandoned block processing */
- WBTEST_GETPWUID_CHECK_OVERWRITE /* 136 : Check for getpwuid_struct variable overwrite condition */
+ WBTEST_GETPWUID_CHECK_OVERWRITE, /* 136 : Check for getpwuid_struct variable overwrite condition */
+ WBTEST_NO_REPLINSTMULTI_FAIL, /* 137 : Unless specified tests should not fail with REPLMULTINSTUPDATE */
+ WBTEST_DOLLARDEVICE_BUFFER, /* 138 : Force larger error messages for $device to exceed DD_BUFLEN */
+ WBTEST_LOWERED_JNLEPOCH /* 139 : Force larger error messages for $device to exceed DD_BUFLEN */
/* Note 1: when adding new white box test cases, please make use of WBTEST_ENABLED and WBTEST_ASSIGN_ONLY (defined below)
* whenever applicable
* Note 2: when adding a new white box test case, see if an existing WBTEST_UNUSED* slot can be leveraged.
diff --git a/sr_port/wcs_recover.c b/sr_port/wcs_recover.c
index 3d5833f..b96f52e 100644
--- a/sr_port/wcs_recover.c
+++ b/sr_port/wcs_recover.c
@@ -61,6 +61,8 @@
#include "gtm_c_stack_trace.h"
#include "wcs_wt.h"
#include "recover_truncate.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF boolean_t is_src_server;
GBLREF boolean_t mupip_jnl_recover;
@@ -74,6 +76,7 @@ GBLREF volatile boolean_t in_wcs_recover; /* TRUE if in "wcs_recover" */
GBLREF jnl_gbls_t jgbl;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF inctn_opcode_t inctn_opcode;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
#ifdef DEBUG
GBLREF unsigned int t_tries;
GBLREF int process_exiting;
@@ -111,6 +114,7 @@ void wcs_recover(gd_region *reg)
cache_rec_ptr_t cr, cr_alt, cr_lo, cr_hi, hash_hdr, cr_old, cr_new;
cache_que_head_ptr_t active_head, hq, wip_head, wq;
gd_region *save_reg;
+ jnlpool_addrs_ptr_t save_jnlpool;
que_ent_ptr_t back_link; /* should be crit & not need interlocked ops. */
sgmnt_addrs *csa;
sgmnt_data_ptr_t csd;
@@ -127,6 +131,9 @@ void wcs_recover(gd_region *reg)
jnl_private_control *jpc;
jnl_buffer_ptr_t jbp;
sgm_info *si;
+# ifdef DEBUG
+ blk_hdr_ptr_t cr_old_buff, cr_new_buff;
+# endif
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -139,11 +146,13 @@ void wcs_recover(gd_region *reg)
if (is_src_server)
return;
save_reg = gv_cur_region; /* protect against [at least] M LOCK code which doesn't maintain cs_addrs and cs_data */
+ save_jnlpool = jnlpool;
TP_CHANGE_REG(reg); /* which are needed by called routines such as wcs_wtstart and wcs_mm_recover */
if (dba_mm == reg->dyn.addr->acc_meth) /* MM uses wcs_recover to remap the database in case of a file extension */
{
wcs_mm_recover(reg);
TP_CHANGE_REG(save_reg);
+ jnlpool = save_jnlpool;
TREF(wcs_recover_done) = TRUE;
return;
}
@@ -345,7 +354,10 @@ void wcs_recover(gd_region *reg)
if (!asyncio)
cr->epid = 0;
if (0 != cr->twin)
+ {
cr->twin = 0; /* Clean up "twin" link. We will set it afresh further down below */
+ cr->backup_cr_is_twin = FALSE;
+ }
if (JNL_ENABLED(csd) && cr->dirty)
{
if (cr->jnl_addr > jbp->rsrv_freeaddr)
@@ -375,7 +387,7 @@ void wcs_recover(gd_region *reg)
if (cr->stopped && (CR_BLKEMPTY != cr->blk))
{ /* cache record attached to a buffer built by secshr_db_clnup: finish work; clearest case: do it 1st */
assert(LATCH_CLEAR == WRITE_LATCH_VAL(cr));
- if (!cert_blk(reg, cr->blk, (blk_hdr_ptr_t)GDS_REL2ABS(cr->buffaddr), 0, FALSE, NULL))
+ if (!cert_blk(reg, cr->blk, (blk_hdr_ptr_t)GDS_REL2ABS(cr->buffaddr), 0, RTS_ERROR_ON_CERT_FAIL, NULL))
{ /* always check the block and return - no assertpro, so last argument is FALSE */
if (!jgbl.mur_rollback)
send_msg_csa(CSA_ARG(csa) VARLSTCNT(7) ERR_DBDANGER, 5, cr->stopped, cr->stopped,
@@ -396,9 +408,12 @@ void wcs_recover(gd_region *reg)
if (CR_NOTVALID != bt->cache_index)
{ /* the bt already identifies another cache entry with this block */
cr_alt = (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, bt->cache_index);
- assert(((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr))->tn
- >= ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_alt->buffaddr))->tn);
+# ifdef DEBUG
+ cr_buff = ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr));
+ cr_alt_buff = ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_alt->buffaddr));
+ assert(cr_buff->tn >= cr_alt_buff->tn);
assert((bt_rec_ptr_t)GDS_ANY_REL2ABS(csa, cr_alt->bt_index) == bt);
+# endif
cr_alt->bt_index = 0; /* cr is more recent */
assert((LATCH_CLEAR <= WRITE_LATCH_VAL(cr_alt)) && (LATCH_CONFLICT >= WRITE_LATCH_VAL(cr_alt)));
if (LATCH_CLEAR < WRITE_LATCH_VAL(cr_alt))
@@ -439,14 +454,18 @@ void wcs_recover(gd_region *reg)
cr_alt->jnl_addr = 0;
cr_alt->refer = FALSE;
cr_alt->twin = 0;
+ cr_alt->backup_cr_is_twin = FALSE;
ADD_ENT_TO_FREE_QUE_CNT(cnl);
if (0 != cr->twin)
{ /* inherited a WIP twin from cr_alt, transfer the twin's affections */
cr_alt = (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, cr->twin);
- assert(((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr))->tn
- > ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_alt->buffaddr))->tn);
+# ifdef DEBUG
+ cr_buff = ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr->buffaddr));
+ cr_alt_buff = ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_alt->buffaddr));
+ assert(cr_buff->tn > cr_alt_buff->tn);
assert(LATCH_CONFLICT == WRITE_LATCH_VAL(cr_alt)); /* semaphore for wip twin */
assert(0 == cr_alt->bt_index);
+# endif
cr_alt->twin = GDS_ANY_ABS2REL(csa, cr);
}
} /* if (LATCH_CLEAR < WRITE_LATCH_VAL(cr_alt)) */
@@ -600,9 +619,12 @@ void wcs_recover(gd_region *reg)
cr_old = cr;
cr_new = cr_alt;
}
- assert(((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_old->buffaddr))->tn
- < ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_new->buffaddr))->tn);
+# ifdef DEBUG
+ cr_old_buff = ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_old->buffaddr));
+ cr_new_buff = ((blk_hdr_ptr_t)GDS_ANY_REL2ABS(csa, cr_new->buffaddr));
+ assert(cr_old_buff->tn < cr_new_buff->tn);
assert((bt_rec_ptr_t)GDS_ANY_REL2ABS(csa, cr_alt->bt_index) == bt);
+# endif
cr_old->bt_index = 0;
cr_new->bt_index = GDS_ANY_ABS2REL(csa, bt);
cr_alt->twin = GDS_ANY_ABS2REL(csa, cr);
@@ -634,7 +656,7 @@ void wcs_recover(gd_region *reg)
if (GDS_CREATE_BLK_MAX != cnl->highest_lbm_blk_changed)
{
csd->trans_hist.mm_tn++;
- if (!reg->read_only && !FROZEN_CHILLED(csd))
+ if (!reg->read_only && !FROZEN_CHILLED(csa))
fileheader_sync(reg);
}
assert((cnl->wcs_active_lvl + cnl->wcs_wip_lvl + cnl->wc_in_free) == csd->n_bts);
@@ -677,7 +699,7 @@ void wcs_recover(gd_region *reg)
csa->wbuf_dqd = 0; /* reset this so the wcs_wtstart below will work */
SIGNAL_WRITERS_TO_RESUME(cnl);
in_wcs_recover = FALSE;
- if (!reg->read_only && !FROZEN_CHILLED(csd))
+ if (!reg->read_only && !FROZEN_CHILLED(csa))
{
dummy_errno = wcs_wtstart(reg, 0, NULL, NULL);
/* Note: Just like in "db_csh_getn" (see comment there for more details), we do not rely on the call to
@@ -691,6 +713,7 @@ void wcs_recover(gd_region *reg)
}
}
TP_CHANGE_REG(save_reg);
+ jnlpool = save_jnlpool;
TREF(wcs_recover_done) = TRUE;
return;
}
diff --git a/sr_port/wcs_verify.c b/sr_port/wcs_verify.c
index 11827c9..b87f4bb 100644
--- a/sr_port/wcs_verify.c
+++ b/sr_port/wcs_verify.c
@@ -46,7 +46,6 @@ GBLREF sgmnt_addrs *cs_addrs;
error_def(ERR_DBADDRALIGN);
error_def(ERR_DBADDRANGE);
error_def(ERR_DBADDRANGE8);
-error_def(ERR_DBCLNUPINFO);
error_def(ERR_DBCRERR);
error_def(ERR_DBCRERR8);
error_def(ERR_DBFHEADERR4);
@@ -80,11 +79,9 @@ boolean_t wcs_verify(gd_region *reg, boolean_t expect_damage, boolean_t caller_i
th_rec_ptr_t th, th_prev;
cache_que_head_ptr_t que_head;
cache_state_rec_ptr_t cstt, cstt_prev;
- char secshr_string[2048];
- char secshr_string_delta[256];
sm_uc_ptr_t jnl_buff_expected;
boolean_t (*blkque_array)[] = NULL; /* TRUE indicates we saw the cr or bt of that array index */
- int4 i, n_bts; /* a copy of csd->n_bts since it is used frequently in this routine */
+ int4 n_bts; /* a copy of csd->n_bts since it is used frequently in this routine */
trans_num dummy_tn;
int4 bml_status, in_wtstart, intent_wtstart, wcs_phase2_commit_pidcnt;
block_id curbmp;
@@ -534,31 +531,6 @@ boolean_t wcs_verify(gd_region *reg, boolean_t expect_damage, boolean_t caller_i
bt_base_off = GDS_ANY_ABS2REL(csa, (sm_uc_ptr_t)csd + cnl->bt_base_off);
bt_top_off = GDS_ANY_ABS2REL(csa, (sm_uc_ptr_t)csd + offset);
- /* print info. that secshr_db_clnup stored */
- if (0 != cnl->secshr_ops_index)
- {
- assert(expect_damage);
- if (SECSHR_OPS_ARRAY_SIZE < cnl->secshr_ops_index)
- {
- SPRINTF(secshr_string,
- "secshr_max_index exceeded. max_index = %d [0x%08x] : ops_index = %d [0x%08x]",
- SECSHR_OPS_ARRAY_SIZE, SECSHR_OPS_ARRAY_SIZE,
- cnl->secshr_ops_index, cnl->secshr_ops_index);
- SEND_MSG_CSA(VARLSTCNT(6) ERR_DBCLNUPINFO, 4, DB_LEN_STR(reg), RTS_ERROR_TEXT(secshr_string));
- cnl->secshr_ops_index = SECSHR_OPS_ARRAY_SIZE;
- }
- for (i = 0; (i + 1) < cnl->secshr_ops_index; i += (int4)cnl->secshr_ops_array[i])
- {
- SPRINTF(secshr_string, "Line %3ld ", cnl->secshr_ops_array[i + 1]);
- for (lcnt = i + 2; lcnt < MIN(cnl->secshr_ops_index, i + cnl->secshr_ops_array[i]); lcnt++)
- {
- SPRINTF(secshr_string_delta, " : [0x%08lx]", cnl->secshr_ops_array[lcnt]);
- strcat(secshr_string, secshr_string_delta);
- }
- SEND_MSG_CSA(VARLSTCNT(6) ERR_DBCLNUPINFO, 4, DB_LEN_STR(reg), RTS_ERROR_TEXT(secshr_string));
- }
- cnl->secshr_ops_index = 0;
- }
/* loop through the cache_recs */
memset(blkque_array, 0, n_bts * SIZEOF(boolean_t)); /* initially, we did not find any cr in the cr blkques */
asyncio = csd->asyncio;
@@ -701,7 +673,7 @@ boolean_t wcs_verify(gd_region *reg, boolean_t expect_damage, boolean_t caller_i
*/
do_cert_blk = ((0 == cr->twin) || (0 != cr->bt_index));
}
- if (do_cert_blk && !cert_blk(reg, cr->blk, (blk_hdr_ptr_t)bptmp, 0, FALSE, NULL))
+ if (do_cert_blk && !cert_blk(reg, cr->blk, (blk_hdr_ptr_t)bptmp, 0, RTS_ERROR_ON_CERT_FAIL, NULL))
{
ret = FALSE;
SEND_MSG_CSA(VARLSTCNT(13) ERR_DBCRERR, 11, DB_LEN_STR(reg),
diff --git a/sr_port/xcmd.mpt b/sr_port/xcmd.mpt
index 2ccc8a0..9c26542 100644
--- a/sr_port/xcmd.mpt
+++ b/sr_port/xcmd.mpt
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2016 Fidelity National Information ;
+; Copyright (c) 2016-2017 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -25,6 +25,7 @@ CLIERR
. . write:$data(lasti) $piece($zstatus,",",lasti,i-1),!
. . set lasti=i
write $piece($zstatus,",",$get(lasti,3),i),!
+ set $etrap="zgoto 0"
zhalt +$piece($zstatus,",",1)
quit
@@ -61,9 +62,10 @@ cmd(cmd,%NR,%l,ltrap)
LOOPERR
; attempt to trap internal errors
set uecode=$piece($ecode,",",2),uemsg=$text(@uecode)
- if $length(uemsg) write $text(+0),@$piece(uemsg,";",2),! zhalt +$extract(uecode,2,$length(uecode))
+ if $length(uemsg) write $text(+0),@$piece(uemsg,";",2),! set $etrap="zgoto 0" zhalt +$extract(uecode,2,$length(uecode))
use $principal
write $zstatus,!
+ set $etrap="zgoto 0"
zhalt 1
quit
diff --git a/sr_port/xfer.h b/sr_port/xfer.h
index 1b422cf..1235653 100755
--- a/sr_port/xfer.h
+++ b/sr_port/xfer.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -72,7 +72,6 @@ XFER(xf_fnchar, op_fnchar),
XFER(xf_fnfind, op_fnfind),
XFER(xf_indset, opp_indset),
XFER(xf_fnascii, op_fnascii),
-XFER(xf_halt, op_halt),
XFER(xf_mul, op_mul),
XFER(xf_indtext, opp_indtext),
XFER(xf_indglvn, opp_indglvn),
diff --git a/sr_port/zshow.h b/sr_port/zshow.h
index ec57063..f478b5c 100755
--- a/sr_port/zshow.h
+++ b/sr_port/zshow.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -90,12 +91,12 @@ typedef struct zshow_out_struct
void zshow_stack(zshow_out *output, boolean_t show_checksum);
void zshow_devices(zshow_out *output);
void zshow_format_lock(zshow_out *output, mlk_pvtblk *temp);
-void zshow_locks(zshow_out *output);
+void zshow_locks(zshow_out *output, boolean_t total_only);
void zshow_output(zshow_out *out, const mstr *str);
void zshow_svn(zshow_out *output, int svn);
void zshow_zbreaks(zshow_out *output);
void zshow_zcalls(zshow_out *output);
-void zshow_gvstats(zshow_out *output);
+void zshow_gvstats(zshow_out *output, boolean_t total_only);
void zshow_zwrite(zshow_out *output);
boolean_t zwr2format(mstr *src, mstr *des);
int zwrkeyvallen(char* ptr, int len, char **val_off, int *val_len, int *val_off1, int *val_len1);
diff --git a/sr_port/zshow_gvstats.c b/sr_port/zshow_gvstats.c
index d5498fe..92f0907 100644
--- a/sr_port/zshow_gvstats.c
+++ b/sr_port/zshow_gvstats.c
@@ -71,7 +71,7 @@ STATICFNDEF void zshow_gvstats_output(zshow_out *output, mstr *gldname, mstr *re
zshow_output(output,&valmstr);
}
-void zshow_gvstats(zshow_out *output)
+void zshow_gvstats(zshow_out *output, boolean_t total_only)
{
mstr gldname;
mstr regname;
@@ -100,20 +100,23 @@ void zshow_gvstats(zshow_out *output)
}
cumul_gvstats.db_curr_tn = 0; /* nullify CTN field as it has no meaning in the "aggregated" sense */
zshow_gvstats_output(output, &stargldname, &starregname, &cumul_gvstats);
- for (addr_ptr = get_next_gdr(NULL); addr_ptr; addr_ptr = get_next_gdr(addr_ptr))
+ if (!total_only)
{
- get_first_gdr_name(addr_ptr, &gldname);
- for (reg = addr_ptr->regions, r_top = reg + addr_ptr->n_regions; reg < r_top; reg++)
+ for (addr_ptr = get_next_gdr(NULL); addr_ptr; addr_ptr = get_next_gdr(addr_ptr))
{
- if (!reg->open || IS_STATSDB_REG(reg))
- continue;
- acc_meth = reg->dyn.addr->acc_meth;
- if (!IS_ACC_METH_BG_OR_MM(acc_meth))
- continue;
- csa = &FILE_INFO(reg)->s_addrs;
- regname.len = reg->rname_len;
- regname.addr = (char *)®->rname[0];
- zshow_gvstats_output(output, &gldname, ®name, csa->gvstats_rec_p);
+ get_first_gdr_name(addr_ptr, &gldname);
+ for (reg = addr_ptr->regions, r_top = reg + addr_ptr->n_regions; reg < r_top; reg++)
+ {
+ if (!reg->open || IS_STATSDB_REG(reg))
+ continue;
+ acc_meth = reg->dyn.addr->acc_meth;
+ if (!IS_ACC_METH_BG_OR_MM(acc_meth))
+ continue;
+ csa = &FILE_INFO(reg)->s_addrs;
+ regname.len = reg->rname_len;
+ regname.addr = (char *)®->rname[0];
+ zshow_gvstats_output(output, &gldname, ®name, csa->gvstats_rec_p);
+ }
}
- }
+ }
}
diff --git a/sr_port/zshow_locks.c b/sr_port/zshow_locks.c
index a27aec5..d483b9b 100755
--- a/sr_port/zshow_locks.c
+++ b/sr_port/zshow_locks.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -19,7 +20,7 @@ GBLREF uint4 process_id;
GBLREF mlk_pvtblk *mlk_pvt_root;
GBLREF mlk_stats_t mlk_stats; /* Process-private M-lock statistics */
-void zshow_locks(zshow_out *output)
+void zshow_locks(zshow_out *output, boolean_t total_only)
{
static readonly char zal[] = "ZAL ";
static readonly char lck[] = "LOCK ";
@@ -40,7 +41,6 @@ void zshow_locks(zshow_out *output)
v.str.len = (mstr_len_t)(ptr - &valstr[0]);
v.str.addr = (char *)&valstr[0];
zshow_output(output, &v.str);
-
/* Print LUF statistic */
output->flush = FALSE;
v.str.addr = &mlt[0];
@@ -53,54 +53,56 @@ void zshow_locks(zshow_out *output)
output->flush = TRUE;
v.str.len = 0;
zshow_output(output,&v.str);
-
- for (temp = mlk_pvt_root; temp; temp = temp->next)
+ if (!total_only)
{
- if (!temp->granted)
- continue;
- if (temp->nodptr && (temp->nodptr->owner != process_id
- || temp->sequence != temp->nodptr->sequence))
- continue;
- output->flush = FALSE;
- if (temp->level && temp->zalloc)
+ for (temp = mlk_pvt_root; temp; temp = temp->next)
{
- v.str.addr = &zal[0];
- v.str.len = SIZEOF(zal) - 1;
- zshow_output(output,&v.str);
- zshow_format_lock(output,temp);
- output->flush = TRUE;
- v.str.len = 0;
- zshow_output(output,&v.str);
+ if (!temp->granted)
+ continue;
+ if (temp->nodptr && (temp->nodptr->owner != process_id
+ || temp->sequence != temp->nodptr->sequence))
+ continue;
output->flush = FALSE;
- v.str.addr = &lck[0];
- v.str.len = SIZEOF(lck) - 1;
- zshow_output(output,&v.str);
- zshow_format_lock(output,temp);
- v.str.addr = &lvl[0];
- v.str.len = SIZEOF(lvl) - 1;
- zshow_output(output,&v.str);
- MV_FORCE_MVAL(&v,(int)temp->level) ;
- mval_write(output,&v,TRUE);
- } else if (temp->level)
- {
- v.str.addr = &lck[0];
- v.str.len = SIZEOF(lck) - 1;
- zshow_output(output,&v.str);
- zshow_format_lock(output,temp);
- v.str.addr = &lvl[0];
- v.str.len = SIZEOF(lvl) - 1;
- zshow_output(output,&v.str);
- MV_FORCE_MVAL(&v,(int)temp->level) ;
- mval_write(output,&v,TRUE);
- } else if (temp->zalloc)
- {
- v.str.addr = &zal[0];
- v.str.len = SIZEOF(zal) - 1;
- zshow_output(output,&v.str);
- zshow_format_lock(output,temp);
- output->flush = TRUE;
- v.str.len = 0;
- zshow_output(output,&v.str);
+ if (temp->level && temp->zalloc)
+ {
+ v.str.addr = &zal[0];
+ v.str.len = SIZEOF(zal) - 1;
+ zshow_output(output,&v.str);
+ zshow_format_lock(output,temp);
+ output->flush = TRUE;
+ v.str.len = 0;
+ zshow_output(output,&v.str);
+ output->flush = FALSE;
+ v.str.addr = &lck[0];
+ v.str.len = SIZEOF(lck) - 1;
+ zshow_output(output,&v.str);
+ zshow_format_lock(output,temp);
+ v.str.addr = &lvl[0];
+ v.str.len = SIZEOF(lvl) - 1;
+ zshow_output(output,&v.str);
+ MV_FORCE_MVAL(&v,(int)temp->level) ;
+ mval_write(output,&v,TRUE);
+ } else if (temp->level)
+ {
+ v.str.addr = &lck[0];
+ v.str.len = SIZEOF(lck) - 1;
+ zshow_output(output,&v.str);
+ zshow_format_lock(output,temp);
+ v.str.addr = &lvl[0];
+ v.str.len = SIZEOF(lvl) - 1;
+ zshow_output(output,&v.str);
+ MV_FORCE_MVAL(&v,(int)temp->level) ;
+ mval_write(output,&v,TRUE);
+ } else if (temp->zalloc)
+ {
+ v.str.addr = &zal[0];
+ v.str.len = SIZEOF(zal) - 1;
+ zshow_output(output,&v.str);
+ zshow_format_lock(output,temp);
+ output->flush = TRUE;
+ v.str.len = 0;
+ zshow_output(output,&v.str);
+ }
}
- }
+ }
}
diff --git a/sr_port/zshow_svn.c b/sr_port/zshow_svn.c
index 8ed7827..444bef2 100644
--- a/sr_port/zshow_svn.c
+++ b/sr_port/zshow_svn.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -114,6 +114,7 @@ static readonly char zroutines_text[] = "$ZROUTINES";
static readonly char zsource_text[] = "$ZSOURCE";
static readonly char zstatus_text[] = "$ZSTATUS";
static readonly char zstep_text[] = "$ZSTEP";
+static readonly char zstrpllim_text[] = "$ZSTRPLLIM";
static readonly char zsystem_text[] = "$ZSYSTEM";
#ifdef GTM_TRIGGER
static readonly char ztname_text[] = "$ZTNAME";
@@ -148,18 +149,16 @@ GBLREF io_pair io_curr_device;
GBLREF io_pair *io_std_device;
GBLREF io_log_name *io_root_log_name;
GBLREF io_log_name *dollar_principal;
-GBLREF mval dollar_ztrap;
GBLREF mval dollar_zgbldir;
GBLREF mval dollar_job;
GBLREF uint4 dollar_zjob;
GBLREF mval dollar_zstatus;
-GBLREF mval dollar_zstep;
GBLREF mval dollar_zsource;
GBLREF int4 dollar_zsystem;
GBLREF int4 dollar_zeditor;
GBLREF uint4 dollar_tlevel;
GBLREF uint4 dollar_trestart;
-GBLREF mval dollar_etrap, dollar_estack_delta, dollar_zerror, dollar_zyerror, dollar_system;
+GBLREF mval dollar_estack_delta, dollar_zerror, dollar_zyerror, dollar_system;
GBLREF mval dollar_zinterrupt, dollar_ztexit;
GBLREF boolean_t dollar_zininterrupt;
GBLREF int4 zdir_form;
@@ -275,7 +274,7 @@ void zshow_svn(zshow_out *output, int one_sv)
/* CAUTION: fall through */
case SV_ETRAP:
var.mvtype = MV_STR;
- var.str = dollar_etrap.str;
+ var.str = (TREF(dollar_etrap)).str;
ZS_VAR_EQU(&x, etrap_text);
mval_write(output, &var, TRUE);
if (SV_ALL != one_sv)
@@ -708,7 +707,15 @@ void zshow_svn(zshow_out *output, int one_sv)
/* CAUTION: fall through */
case SV_ZSTEP:
ZS_VAR_EQU(&x, zstep_text);
- mval_write(output, &dollar_zstep, TRUE);
+ mval_write(output, &(TREF(dollar_zstep)), TRUE);
+ if (SV_ALL != one_sv)
+ break;
+ /* CAUTION: fall through */
+ case SV_ZSTRPLLIM:
+ count = TREF(gtm_strpllim);
+ MV_FORCE_MVAL(&var, count);
+ ZS_VAR_EQU(&x, zstrpllim_text);
+ mval_write(output, &var, TRUE);
if (SV_ALL != one_sv)
break;
/* CAUTION: fall through */
@@ -791,7 +798,7 @@ void zshow_svn(zshow_out *output, int one_sv)
/* CAUTION: fall through */
case SV_ZTRAP:
var.mvtype = MV_STR;
- var.str = dollar_ztrap.str;
+ var.str = (TREF(dollar_ztrap)).str;
ZS_VAR_EQU(&x, ztrap_text);
mval_write(output, &var, TRUE);
if (SV_ALL != one_sv)
diff --git a/sr_port/ztrap_form_init.c b/sr_port/ztrap_form_init.c
deleted file mode 100755
index 6a23317..0000000
--- a/sr_port/ztrap_form_init.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************
- * *
- * Copyright (c) 2001-2017 Fidelity National Information *
- * Services, Inc. and/or its subsidiaries. All rights reserved. *
- * *
- * This source code contains the intellectual property *
- * of its copyright holder(s), and is made available *
- * under a license. If you do not know the terms of *
- * the license, please stop and do not read further. *
- * *
- ****************************************************************/
-
-#include "mdef.h"
-#include "iosp.h"
-#include "gtm_logicals.h"
-#include "min_max.h"
-#include "gtm_string.h"
-#include "gtm_strings.h" /* for STRNCASECMP */
-#include "trans_log_name.h"
-#include "ztrap_form_init.h"
-
-#define ZTRAP_FORM_CODE "code"
-#define ZTRAP_FORM_ENTRYREF "entryref"
-#define ZTRAP_FORM_ADAPTIVE "adaptive"
-#define ZTRAP_FORM_POP "pop"
-
-GBLREF int ztrap_form;
-
-error_def(ERR_LOGTOOLONG);
-error_def(ERR_TRNLOGFAIL);
-
-/* Initialize ztrap_form appropriately. Note this routine is not resident in gtm_env_init() because it raises errors
- * and error handling is not set up yet in gtm_env_init().
- */
-void ztrap_form_init(void)
-{
- int4 status;
- mstr val, tn;
- char buf[1024], *buf_ptr = &buf[0];
-
- ztrap_form = ZTRAP_CODE; /* default */
- val.addr = ZTRAP_FORM;
- val.len = STR_LIT_LEN(ZTRAP_FORM);
- if (SS_NORMAL != (status = TRANS_LOG_NAME(&val, &tn, buf, SIZEOF(buf), dont_sendmsg_on_log2long)))
- {
- if (SS_NOLOGNAM == status)
- return;
- else if (SS_LOG2LONG == status)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_LOGTOOLONG, 3, val.len, val.addr, SIZEOF(buf) - 1);
- else
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_TRNLOGFAIL, 2, LEN_AND_LIT(ZTRAP_FORM), status);
- }
- if ((STR_LIT_LEN(ZTRAP_FORM_POP) < tn.len) && !STRNCASECMP(buf_ptr, ZTRAP_FORM_POP, STR_LIT_LEN(ZTRAP_FORM_POP)))
- { /* "pop" can be a prefix to both entryref and adaptive */
- buf_ptr += STR_LIT_LEN(ZTRAP_FORM_POP);
- tn.len -= STR_LIT_LEN(ZTRAP_FORM_POP);
- ztrap_form |= ZTRAP_POP;
- }
- if ((STR_LIT_LEN(ZTRAP_FORM_ENTRYREF) == tn.len)
- && !STRNCASECMP(buf_ptr, ZTRAP_FORM_ENTRYREF, MIN(STR_LIT_LEN(ZTRAP_FORM_ENTRYREF), tn.len)))
- {
- ztrap_form |= ZTRAP_ENTRYREF;
- ztrap_form &= ~ZTRAP_CODE;
- } else if ((STR_LIT_LEN(ZTRAP_FORM_ADAPTIVE) == tn.len)
- && !STRNCASECMP(buf_ptr, ZTRAP_FORM_ADAPTIVE, MIN(STR_LIT_LEN(ZTRAP_FORM_ADAPTIVE), tn.len)))
- ztrap_form |= ZTRAP_ENTRYREF;
- return;
-}
diff --git a/sr_port_cm/gtcmd_cst_init.c b/sr_port_cm/gtcmd_cst_init.c
old mode 100755
new mode 100644
index 98bb047..61e0db4
--- a/sr_port_cm/gtcmd_cst_init.c
+++ b/sr_port_cm/gtcmd_cst_init.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -39,11 +40,7 @@ void gtcmd_cst_init(cm_region_head *ptr)
sgmnt_addrs *csa;
reg = ptr->reg;
- if (VMS_ONLY(gtcm_ast_avail > 0) UNIX_ONLY(TRUE))
- gvcst_init(reg);
- else
- rts_error(VARLSTCNT(1) CMERR_CMEXCDASTLM);
- VMS_ONLY(gtcm_ast_avail--);
+ gvcst_init(reg, NULL);
# ifdef DEBUG
assert(gv_keysize >= DBKEYSIZE(reg->max_key_size));
csa = &FILE_INFO(reg)->s_addrs;
diff --git a/sr_port_cm/gtcmd_rundown.c b/sr_port_cm/gtcmd_rundown.c
index 91d984a..0b54018 100644
--- a/sr_port_cm/gtcmd_rundown.c
+++ b/sr_port_cm/gtcmd_rundown.c
@@ -32,6 +32,8 @@
#include "gtcmd.h"
#include "send_msg.h"
#include "targ_alloc.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF cm_region_head *reglist;
GBLREF gd_region *gv_cur_region;
diff --git a/sr_port_cm/gtcml_lklist.c b/sr_port_cm/gtcml_lklist.c
index f976c79..1591f6c 100755
--- a/sr_port_cm/gtcml_lklist.c
+++ b/sr_port_cm/gtcml_lklist.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -31,6 +31,7 @@
#include "mlk_pvtblk_equ.h"
#include "copy.h"
#include "gtcm_find_region.h"
+#include "mmrhash.h"
GBLREF connection_struct *curr_entry;
@@ -59,8 +60,7 @@ void gtcml_lklist(void)
len--; /* subtract size of regnum */
translev = *ptr++; len--;
subcnt = *ptr++; len--;
- new_entry = (mlk_pvtblk *)malloc(SIZEOF(mlk_pvtblk) + len - 1);
- memset(new_entry, 0, SIZEOF(mlk_pvtblk));
+ MLK_PVTBLK_ALLOC(len, subcnt, 0, new_entry);
memcpy(&new_entry->value[0], ptr, len);
ptr += len;
reg_ref->oper = PENDING;
@@ -68,8 +68,8 @@ void gtcml_lklist(void)
new_entry->translev = translev;
new_entry->subscript_cnt = subcnt;
new_entry->level = 0;
- new_entry->subscript_cnt = subcnt;
- new_entry->total_length = len;
+ new_entry->nref_length = len;
+ MLK_PVTBLK_SUBHASH_GEN(new_entry);
new_entry->ctlptr = (mlk_ctldata *)FILE_INFO(new_entry->region)->s_addrs.lock_addrs[0];
if (!reg_ref->lockdata)
{
diff --git a/sr_port_cm/gvcmz_lksublist.c b/sr_port_cm/gvcmz_lksublist.c
index 710cf18..3673902 100755
--- a/sr_port_cm/gvcmz_lksublist.c
+++ b/sr_port_cm/gvcmz_lksublist.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -45,7 +46,7 @@ void gvcmz_lksublist(struct CLB *lnk)
lk_walk = ((link_info *)(lnk->usr))->netlocks;
while (lk_walk)
{
- len = 1 + 1 + 1 + lk_walk->total_length; /* regnum + translev + subsc count + key */
+ len = 1 + 1 + 1 + lk_walk->nref_length; /* regnum + translev + subsc count + key */
if (msg_len + len + SIZEOF(len) >= lnk->mbl)
{
*hdr = CMMS_L_LKREQNODE;
@@ -62,15 +63,15 @@ void gvcmz_lksublist(struct CLB *lnk)
count = 0;
ptr = list_len + 1;
}
- len = 1 + 1 + 1 + lk_walk->total_length; /* regnum + translev + subsc count + key */
+ len = 1 + 1 + 1 + lk_walk->nref_length; /* regnum + translev + subsc count + key */
CM_PUT_USHORT(ptr, len, ((link_info *)(lnk->usr))->convert_byteorder);
ptr += SIZEOF(unsigned short);
*ptr++ = lk_walk->region->cmx_regnum;
*ptr++ = lk_walk->translev;
assert(256 > lk_walk->subscript_cnt); /* else the assignment "*ptr++ = lk_walk->subscript_cnt" could be lossy */
*ptr++ = lk_walk->subscript_cnt;
- memcpy(ptr, lk_walk->value, lk_walk->total_length);
- ptr += lk_walk->total_length;
+ memcpy(ptr, lk_walk->value, lk_walk->nref_length);
+ ptr += lk_walk->nref_length;
count++;
msg_len += len + SIZEOF(len);
lk_walk = lk_walk->next;
diff --git a/sr_unix/add_inter.c b/sr_unix/add_inter.c
index f59df78..5cda949 100755
--- a/sr_unix/add_inter.c
+++ b/sr_unix/add_inter.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -61,8 +61,13 @@ int4 add_inter(int val, sm_int_ptr_t addr, sm_global_latch_ptr_t latch)
not changed (SE 08/2007)
*/
assert(0 == OFFSETOF(global_latch_t, u.parts.latch_pid));
- IA64_ONLY(cswpsuccess = compswap_unlock(RECAST(sm_global_latch_ptr_t)cntrval_p, cntrval, newcntrval));
- NON_IA64_ONLY(cswpsuccess = compswap((sm_global_latch_ptr_t)cntrval_p, cntrval, newcntrval));
+# if defined(_AIX)
+ cswpsuccess = compswap_unlock(RECAST(sm_global_latch_ptr_t)cntrval_p, cntrval, newcntrval);
+# elif defined(__linux__)
+ cswpsuccess = compswap((sm_global_latch_ptr_t)cntrval_p, cntrval, newcntrval);
+# else
+# error "Don't know how to compswap on this platform"
+# endif
if (cswpsuccess)
{
--fast_lock_count;
diff --git a/sr_unix/anticipatory_freeze.c b/sr_unix/anticipatory_freeze.c
index 5ce35b3..03d144f 100644
--- a/sr_unix/anticipatory_freeze.c
+++ b/sr_unix/anticipatory_freeze.c
@@ -63,8 +63,7 @@ error_def(ERR_REPLINSTFROZEN);
error_def(ERR_TEXT);
error_def(ERR_INSTFRZDEFER);
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_src_server;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
#ifdef DEBUG
@@ -152,8 +151,8 @@ boolean_t is_anticipatory_freeze_needed(sgmnt_addrs *csa, int msg_id)
{
const err_ctl *ctl;
int idx;
+ jnlpool_addrs_ptr_t local_jnlpool;
- assert(NULL != jnlpool.jnlpool_ctl);
/* Certain error messages should NOT trigger a freeze even if they are so configured in the custom errors file as they might
* result in instance freezes that can be set indefinitely. Currently, we know of at least 3 such messages:
* 1. ENOSPCQIODEFER and INSTFRZDEFER : To ensure we don't set anticipatory freeze if we don't/can't hold crit
@@ -171,8 +170,10 @@ boolean_t is_anticipatory_freeze_needed(sgmnt_addrs *csa, int msg_id)
if (NULL != ctl)
{
GET_MSG_IDX(msg_id, ctl, idx);
- assert(idx < ARRAYSIZE(jnlpool_ctl->merrors_array));
- if (jnlpool_ctl->merrors_array[idx] & AFREEZE_MASK)
+ local_jnlpool = csa->jnlpool ? csa->jnlpool : jnlpool;
+ assert(local_jnlpool && local_jnlpool->jnlpool_ctl);
+ assert(idx < ARRAYSIZE(local_jnlpool->jnlpool_ctl->merrors_array));
+ if (local_jnlpool->jnlpool_ctl->merrors_array[idx] & AFREEZE_MASK)
return TRUE;
}
return FALSE;
@@ -184,29 +185,40 @@ void set_anticipatory_freeze(sgmnt_addrs *csa, int msg_id)
boolean_t was_crit;
sgmnt_addrs *repl_csa;
const err_msg *msginfo;
+ jnlpool_addrs_ptr_t save_jnlpool;
assert(is_anticipatory_freeze_needed(csa, msg_id));
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (csa->jnlpool != jnlpool))
+ jnlpool = csa->jnlpool;
+ assert(jnlpool && jnlpool->jnlpool_ctl);
+ assert(jnlpool->jnlpool_dummy_reg); /* other asserts in is anticipatory_freeze_needed */
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
assert(NULL != repl_csa);
was_crit = repl_csa->now_crit;
if (!was_crit)
{
if (csa->now_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
- else if (FALSE == grab_lock(jnlpool.jnlpool_dummy_reg, FALSE, GRAB_LOCK_ONLY))
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ else if (FALSE == grab_lock(jnlpool->jnlpool_dummy_reg, FALSE, GRAB_LOCK_ONLY))
{
MSGID_TO_ERRMSG(msg_id, msginfo);
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_INSTFRZDEFER, 4, LEN_AND_STR(msginfo->tag),
REG_LEN_STR(csa->region));
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return;
}
}
/* Now that we hold necessary locks, set the freeze and the comment field */
- jnlpool.jnlpool_ctl->freeze = TRUE;
- GENERATE_INST_FROZEN_COMMENT(jnlpool.jnlpool_ctl->freeze_comment, SIZEOF(jnlpool.jnlpool_ctl->freeze_comment), msg_id);
+ jnlpool->jnlpool_ctl->freeze = TRUE;
+ GENERATE_INST_FROZEN_COMMENT(jnlpool->jnlpool_ctl->freeze_comment,
+ SIZEOF(jnlpool->jnlpool_ctl->freeze_comment), msg_id);
/* TODO : Do we need a SHM_WRITE_MEMORY_BARRIER ? */
if (!was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
}
/* initialize jnlpool_ctl->merrors_array to set up the list of errors that should trigger anticipatory freeze errors */
@@ -226,7 +238,8 @@ boolean_t init_anticipatory_freeze_errors()
* to check if cmerrors/cmierrors also need to be included in this list or not.
*/
assert(IS_MUPIP_IMAGE); /* is_src_server is not initialized at this point */
- assert(jnlpool_ctl && !jnlpool_ctl->instfreeze_environ_inited); /* invoke when not previously initialized */
+ /* invoke when not previously initialized */
+ assert(jnlpool && jnlpool->jnlpool_ctl && !jnlpool->jnlpool_ctl->instfreeze_environ_inited);
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]); /* should hold journal pool access control semaphore */
/* Now, read the custom errors file and populate the journal pool */
custom_err_file = TREF(gtm_custom_errors);
@@ -307,7 +320,7 @@ boolean_t init_anticipatory_freeze_errors()
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_CUSTERRNOTFND, 2, mnemonic_len, mnemonic_buf);
return FALSE;
}
- jnlpool_ctl->merrors_array[offset] |= AFREEZE_MASK; /* duplicate entries are not considered an error */
+ jnlpool->jnlpool_ctl->merrors_array[offset] |= AFREEZE_MASK; /* duplicate entries are not an error */
}
assert(ISSPACE_ASCII(*buffptr) || (COMMENT_DELIMITER == *buffptr));
if (EOL_REACHED == (buffptr = scan_space(handle, buff, buffptr, buff_top)))
@@ -351,7 +364,7 @@ boolean_t init_anticipatory_freeze_errors()
custom_err_file.addr, save_errno);
return FALSE;
}
- jnlpool_ctl->instfreeze_environ_inited = TRUE;
+ jnlpool->jnlpool_ctl->instfreeze_environ_inited = TRUE;
return TRUE;
}
@@ -363,7 +376,9 @@ void clear_fake_enospc_if_master_dead(void)
sgmnt_addrs *csa;
assert(!multi_thread_in_use); /* fake-enospc would not have been set if in threaded-code */
- if((jnlpool_ctl->jnlpool_creator_pid != process_id) && !is_proc_alive(jnlpool_ctl->jnlpool_creator_pid, 0))
+ assert(jnlpool && jnlpool->jnlpool_ctl);
+ if((jnlpool->jnlpool_ctl->jnlpool_creator_pid != process_id)
+ && !is_proc_alive(jnlpool->jnlpool_ctl->jnlpool_creator_pid, 0))
{
for (addr_ptr = get_next_gdr(NULL); addr_ptr; addr_ptr = get_next_gdr(addr_ptr))
{
diff --git a/sr_unix/bin_load.c b/sr_unix/bin_load.c
index 7c13e5d..9dfa4a0 100644
--- a/sr_unix/bin_load.c
+++ b/sr_unix/bin_load.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -89,10 +89,11 @@ error_def(ERR_NULSUBSC);
error_def(ERR_DBDUPNULCOL);
#define BIN_PUT 0
-#define BIN_BIND 1
-#define ERR_COR 2
-#define BIN_KILL 3
+#define BIN_BIND 1
+#define ERR_COR 2
+#define BIN_KILL 3
#define BIN_PUT_GVSPAN 4
+#define TEXT1 "Record discarded because"
# define GC_BIN_LOAD_ERR(GTMCRYPT_ERRNO) \
{ \
@@ -978,8 +979,8 @@ void bin_load(uint4 begin, uint4 end, char *line1_ptr, int line1_len)
temp = (unsigned char *)format_targ_key(&key_buffer[0], MAX_ZWR_KEY_SZ, gv_currkey, TRUE);
fmtd_key_len = (int)(temp - key_buffer);
key_buffer[fmtd_key_len] = '\0';
- gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_NULSUBSC, 2, gvnh_reg->gd_reg->rname_len,
- &gvnh_reg->gd_reg->rname[0], ERR_GVIS, 2, fmtd_key_len, &key_buffer[0]);
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_NULSUBSC, 2, STRLEN(TEXT1),
+ TEXT1, ERR_GVIS, 2, fmtd_key_len, &key_buffer[0]);
ok_to_put = FALSE;
}
discard_nullcoll_mismatch_record = FALSE;
diff --git a/sr_unix/cli.c b/sr_unix/cli.c
index e1c5981..9c735c0 100755
--- a/sr_unix/cli.c
+++ b/sr_unix/cli.c
@@ -352,7 +352,7 @@ int4 cli_t_f_n (char *entry)
assert (strlen(entry) > 0);
strncpy(local_str, entry, SIZEOF(local_str) - 1);
-
+ local_str[SIZEOF(local_str) - 1] = '\0';
cli_strupper(local_str);
if (cli_get_value(local_str, buf))
{
@@ -392,7 +392,7 @@ int4 cli_n_a_e (char *entry)
assert (strlen(entry) > 0);
strncpy(local_str, entry, SIZEOF(local_str) - 1);
-
+ local_str[SIZEOF(local_str) - 1] = '\0';
cli_strupper(local_str);
if (cli_get_value(local_str, buf))
{
@@ -414,3 +414,46 @@ int4 cli_n_a_e (char *entry)
return (-1);
}
}
+
+boolean_t cli_get_defertime(char *entry, int4 *dst)
+{
+ char buf[MAX_LINE];
+ char local_str[MAX_LINE];
+ int ch_index = 0;
+ int4 prev_value = 0, num = 0;
+ boolean_t neg_num = FALSE;
+
+ assert(strlen(entry) > 0);
+ strncpy(local_str, entry, SIZEOF(local_str) - 1);
+
+ if (cli_present(local_str) == CLI_PRESENT
+ && cli_get_value(local_str, buf))
+ {
+ prev_value = 0;
+ if (buf[ch_index] == '-')
+ {
+ neg_num = TRUE;
+ ch_index++;
+ }
+ for (; ((buf[ch_index] >= '0' && buf[ch_index] <= '9') && (buf[ch_index] != '\0')); ch_index++)
+ {
+ num = num * 10 + (buf[ch_index] - '0');
+ if (num < prev_value)
+ break;
+ prev_value = num;
+ }
+ if (neg_num && buf[ch_index] == '\0')
+ {
+ num = num * -1;
+ }
+ if((-1 > num || num > INT_MAX) || buf[ch_index] != '\0' || (neg_num && !num))
+ {
+ FPRINTF(stderr, "Error: cannot convert %s value to decimal number.\n", buf);
+ return FALSE;
+ }
+ *dst = num;
+ return TRUE;
+ }
+ return FALSE;
+}
+
diff --git a/sr_unix/cli_parse.c b/sr_unix/cli_parse.c
index 091c935..4676ed9 100755
--- a/sr_unix/cli_parse.c
+++ b/sr_unix/cli_parse.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -880,7 +881,7 @@ int cli_present(char *entry)
char local_str[MAX_LINE];
strncpy(local_str, entry, SIZEOF(local_str) - 1);
-
+ local_str[SIZEOF(local_str) - 1] = '\0';
cli_strupper(local_str);
if (pparm = get_parm_entry(local_str))
{
@@ -919,6 +920,7 @@ bool cli_get_value(char *entry, char val_buf[])
SETUP_THREADGBL_ACCESS;
# endif
strncpy(local_str, entry, SIZEOF(local_str) - 1);
+ local_str[SIZEOF(local_str) - 1] = '\0';
cli_strupper(local_str);
if (NULL == (pparm = get_parm_entry(local_str)))
return (FALSE);
@@ -962,6 +964,7 @@ boolean_t cli_negated(char *entry) /* entity */
char local_str[MAX_LINE];
strncpy(local_str, entry, SIZEOF(local_str) - 1);
+ local_str[SIZEOF(local_str) - 1] = '\0';
cli_strupper(local_str);
if (pparm = get_parm_entry(local_str))
return (pparm->negated);
@@ -984,6 +987,7 @@ bool cli_get_parm(char *entry, char val_buf[])
ind = 0;
assert(0 != gpcmd_parm_vals);
STRNCPY_STR(local_str, entry, SIZEOF(local_str) - 1);
+ local_str[SIZEOF(local_str) - 1] = '\0';
cli_strupper(local_str);
match_ind = -1;
while (0 < strlen(sp = (gpcmd_parm_vals + ind)->name)) /* implicit assignment intended */
diff --git a/sr_unix/configure.gtc b/sr_unix/configure.gtc
index c8c92a9..58fbe2b 100755
--- a/sr_unix/configure.gtc
+++ b/sr_unix/configure.gtc
@@ -194,7 +194,7 @@ $echo ""
$echo "Installing GT.M...."
$echo ""
-is64bit_gtm=`file mumps | grep -c 64`
+is64bit_gtm=`file mumps | grep -c 64.bit`
# Create $gtmdist/utf8 if this platform can support "UTF-8" mode.
diff --git a/sr_unix/db_ipcs_reset.c b/sr_unix/db_ipcs_reset.c
old mode 100755
new mode 100644
index 35101d2..9f633b6
--- a/sr_unix/db_ipcs_reset.c
+++ b/sr_unix/db_ipcs_reset.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -42,11 +42,11 @@
#include "do_semop.h"
#include "anticipatory_freeze.h"
-GBLREF uint4 process_id;
-GBLREF ipcs_mesg db_ipcs;
-GBLREF gd_region *gv_cur_region;
-GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF uint4 process_id;
+GBLREF ipcs_mesg db_ipcs;
+GBLREF gd_region *gv_cur_region;
+GBLREF jnl_gbls_t jgbl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def (ERR_TEXT);
error_def (ERR_CRITSEMFAIL);
@@ -180,7 +180,7 @@ boolean_t db_ipcs_reset(gd_region *reg)
}
db_ipcs.fn[db_ipcs.fn_len] = 0;
WAIT_FOR_REPL_INST_UNFREEZE_SAFE(csa);
- if (!csa->read_only_fs)
+ if (!csa->read_only_fs && !csd->read_only)
{
status = send_mesg2gtmsecshr(FLUSH_DB_IPCS_INFO, 0, (char *)NULL, 0);
if (0 != status)
diff --git a/sr_unix/dbfilop.c b/sr_unix/dbfilop.c
index 13924d2..e6a86d3 100755
--- a/sr_unix/dbfilop.c
+++ b/sr_unix/dbfilop.c
@@ -91,6 +91,7 @@ uint4 dbfilop(file_control *fc)
assertpro((1 != fc->op_pos) || ((0 == memcmp(fc->op_buff, GDS_LABEL, GDS_LABEL_SZ - 1))
&& (0 != ((sgmnt_data_ptr_t)fc->op_buff)->acc_meth)));
assert((1 != fc->op_pos) || (fc->op_len <= SIZEOF_FILE_HDR(fc->op_buff)));
+ assert(!gv_cur_region->read_only);
offset = (off_t)(fc->op_pos - 1) * DISK_BLOCK_SIZE;
DB_LSEEKWRITE(csa, udi, udi->fn, udi->fd, offset, fc->op_buff, fc->op_len, save_errno);
if (0 != save_errno)
diff --git a/sr_unix/dm_read.c b/sr_unix/dm_read.c
index 2c2be37..e611cc2 100755
--- a/sr_unix/dm_read.c
+++ b/sr_unix/dm_read.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -754,8 +754,8 @@ void dm_read (mval *v)
{ /* ctrl D - delete char */
if (0 == outlen)
{ /* line is empty new line and exit - Thanks to Sam Habiel */
- op_wteol(1);
- op_halt();
+ op_wteol(1); /* below not restricted because of halt with return code */
+ op_zhalt(ERR_IOEOF, FALSE);
}
DEL_ONE_CHAR_AT_CURSOR(outlen, dx_outlen, dx, dx_instr, dx_start, ioptr_width);
break;
diff --git a/sr_unix/dpgbldir_sysops.c b/sr_unix/dpgbldir_sysops.c
index dadf1f2..c7dac75 100755
--- a/sr_unix/dpgbldir_sysops.c
+++ b/sr_unix/dpgbldir_sysops.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -80,6 +81,7 @@ void *open_gd_file(mstr *v)
{
file_pointer *fp;
+ mstr temp;
ZOS_ONLY(int realfiletag;)
fp = (file_pointer*)malloc(SIZEOF(*fp));
@@ -88,15 +90,25 @@ void *open_gd_file(mstr *v)
memcpy(fp->v.addr, v->addr, v->len);
*((char*)((char*)fp->v.addr + v->len)) = 0; /* Null terminate string */
if (FD_INVALID == (fp->fd = OPEN(fp->v.addr, O_RDONLY)))
- {
- if (!dollar_zgbldir.str.len || ((dollar_zgbldir.str.len == fp->v.len)
- && !memcmp(dollar_zgbldir.str.addr, fp->v.addr, fp->v.len)))
+ { /* v gets passed down through a few levels, but should be freed */
+ /* Copy the values into the stringpool so they get cleaned up later */
+ ENSURE_STP_FREE_SPACE(fp->v.len);
+ memcpy(stringpool.free, fp->v.addr, fp->v.len);
+ temp.addr = (char*)stringpool.free;
+ temp.len = fp->v.len;
+ stringpool.free += fp->v.len;
+ free(v->addr);
+ free(v);
+ free(fp->v.addr);
+ free(fp);
+ if (!dollar_zgbldir.str.len || ((dollar_zgbldir.str.len == temp.len)
+ && !memcmp(dollar_zgbldir.str.addr, temp.addr, temp.len)))
{
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_ZGBLDIRACC, 6, fp->v.len, fp->v.addr,
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_ZGBLDIRACC, 6, temp.len, temp.addr,
LEN_AND_LIT(". Cannot continue"), LEN_AND_LIT(""), errno);
assert(FALSE);
}
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_ZGBLDIRACC, 6, fp->v.len, fp->v.addr, LEN_AND_LIT(". Retaining "),
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_ZGBLDIRACC, 6, temp.len, temp.addr, LEN_AND_LIT(". Retaining "),
dollar_zgbldir.str.len, dollar_zgbldir.str.addr, errno);
}
#ifdef __MVS__
diff --git a/sr_unix/err_init.c b/sr_unix/err_init.c
index 9310c95..54f68a9 100755
--- a/sr_unix/err_init.c
+++ b/sr_unix/err_init.c
@@ -29,8 +29,8 @@
#include "eintr_wrappers.h"
#define COREDUMPFILTERFN "/proc/%i/coredump_filter"
-#define FILTERPARMSIZE (7 + 2 + 1) /* 7 bytes for number, 2 bytes for 0x, and 1 null terminator */
-#define FILTERENABLEBITS 0x0000073 /* Bits 0, 1, 4, 5, 6 - 32-bit can only handle 10 bytes total */
+#define FILTERPARMSIZE (8 + 2 + 1) /* 8 bytes for number (normally 7), 2 bytes for 0x, and 1 null terminator */
+#define FILTERENABLEBITS 0x0000073 /* Bits 0, 1, 4, 5, 6 - 32-bit can only handle 10 bytes total */
GBLREF enum gtmImageTypes image_type;
GBLDEF char **gtmenvp;
diff --git a/sr_unix/fake_enospc.c b/sr_unix/fake_enospc.c
index f63dac3..f3439a8 100644
--- a/sr_unix/fake_enospc.c
+++ b/sr_unix/fake_enospc.c
@@ -34,8 +34,8 @@
#endif
#include "fake_enospc.h"
#ifdef DEBUG
-GBLREF jnlpool_addrs jnlpool;
-GBLREF volatile int4 gtmMallocDepth;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF volatile int4 gtmMallocDepth;
STATICDEF uint4 syslog_deferred = 0;
@@ -74,6 +74,7 @@ void fake_enospc(void)
gd_region *r_local, *r_top;
int i;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INST_FREEZE_ON_NOSPC_ENABLED */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -134,7 +135,7 @@ void fake_enospc(void)
if (!IS_REG_BG_OR_MM(r_local))
continue;
csa = REG2CSA(r_local);
- if ((NULL != csa) && (NULL != csa->nl) && INST_FREEZE_ON_NOSPC_ENABLED(csa))
+ if ((NULL != csa) && (NULL != csa->nl) && INST_FREEZE_ON_NOSPC_ENABLED(csa, local_jnlpool))
{
syslog_msg = NULL;
switch(enospc_enable_list[i])
diff --git a/sr_unix/ftok_sem_incrcnt.c b/sr_unix/ftok_sem_incrcnt.c
index b75870c..0b0f1c1 100644
--- a/sr_unix/ftok_sem_incrcnt.c
+++ b/sr_unix/ftok_sem_incrcnt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2016 Fidelity National Information *
+ * Copyright (c) 2016-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -31,7 +31,7 @@
#include "gtmmsg.h"
GBLREF gd_region *ftok_sem_reg;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_src_server;
GBLREF boolean_t is_rcvr_server;
@@ -60,7 +60,7 @@ boolean_t ftok_sem_incrcnt(gd_region *reg, const char *file_type_str, boolean_t
* Assert this as it is relied upon by the "ERANGE" code below.
*/
assert(!MEMCMP_LIT(file_type_str, FILE_TYPE_REPLINST));
- assert(reg == jnlpool.jnlpool_dummy_reg); /* this is assumed by the code below */
+ assert((NULL != jnlpool) && (reg == jnlpool->jnlpool_dummy_reg)); /* this is assumed by the code below */
udi = FILE_INFO(reg);
csa = &udi->s_addrs;
assert(!csa->now_crit);
@@ -92,7 +92,7 @@ boolean_t ftok_sem_incrcnt(gd_region *reg, const char *file_type_str, boolean_t
if (repl_instance.qdbrundown)
{
issue_error = FALSE;
- if (!jnlpool.jnlpool_ctl->ftok_counter_halted)
+ if (!jnlpool->jnlpool_ctl->ftok_counter_halted)
repl_inst_ftok_counter_halted(udi);
}
if (is_rcvr_server)
diff --git a/sr_unix/ftok_sems.c b/sr_unix/ftok_sems.c
old mode 100755
new mode 100644
index 11f0603..39714fb
--- a/sr_unix/ftok_sems.c
+++ b/sr_unix/ftok_sems.c
@@ -62,7 +62,7 @@
GBLREF uint4 process_id;
GBLREF gd_region *ftok_sem_reg;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
error_def(ERR_CRITSEMFAIL);
@@ -142,7 +142,7 @@ boolean_t ftok_sem_get(gd_region *reg, boolean_t incr_cnt, int project_id, boole
* and then get the access semaphore). The only exception is MUPIP JOURNAL -ROLLBACK -BACKWARD due to an issue
* that is documented in C9F10-002759. Assert that below.
*/
- assert((reg != jnlpool.jnlpool_dummy_reg)
+ assert(((NULL == jnlpool) || (reg != jnlpool->jnlpool_dummy_reg))
|| (jgbl.mur_rollback && !jgbl.mur_options_forward) || !holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
udi = FILE_INFO(reg);
assert(!udi->grabbed_ftok_sem && !udi->grabbed_access_sem);
@@ -187,7 +187,7 @@ boolean_t ftok_sem_lock(gd_region *reg, boolean_t immediate)
* and then get the access semaphore). The only exception is MUPIP JOURNAL -ROLLBACK -BACKWARD due to an issue
* that is documented in C9F10-002759. Assert that below.
*/
- assert((reg != jnlpool.jnlpool_dummy_reg)
+ assert(((NULL == jnlpool) || (reg != jnlpool->jnlpool_dummy_reg))
|| (jgbl.mur_rollback && !jgbl.mur_options_forward) || !holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
udi = FILE_INFO(reg);
csa = &udi->s_addrs;
diff --git a/sr_unix/gbldirnam.h b/sr_unix/gbldirnam.h
old mode 100755
new mode 100644
index 2c6c5a1..f57b0f1
--- a/sr_unix/gbldirnam.h
+++ b/sr_unix/gbldirnam.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -13,5 +13,7 @@
#define GDE_LABEL_SIZE 13
#define GDE_LABEL_NUM 1
/* Note, GDE_LABEL_LITERAL must be maintained in gdeinit.m if changes are made here */
-#define GDE_LABEL_LITERAL GTM64_ONLY("GTCGBDUNX111") NON_GTM64_ONLY("GTCGBDUNX011")
+/* The reference file for 64bittn/vermismatch expects this value so must be kept in sync */
+/* Also change at least the assert in create_dummy_gbldir.c */
+#define GDE_LABEL_LITERAL GTM64_ONLY("GTCGBDUNX112") NON_GTM64_ONLY("GTCGBDUNX012")
#define DEF_GDR_EXT "*.gld"
diff --git a/sr_unix/gdeget.m b/sr_unix/gdeget.m
old mode 100644
new mode 100755
index 5d9171b..42309f1
--- a/sr_unix/gdeget.m
+++ b/sr_unix/gdeget.m
@@ -13,7 +13,7 @@ gdeget: ;read in an existing GD or create a default
LOAD
n abs,contents,rel,xregs,xsegs,reglist,map,$et,ptrsize
i debug s $et="b"
- e s $et="g ABORT^GDE:($p($p($zs,"","",3),""-"")'=""%GDE"") u io w !,$p($zs,"","",3,999),! d GETOUT^GDEEXIT h"
+ e s $et="g ABORT^GDE:($p($p($zs,"","",3),""-"")'=""%GDE"") u io w !,$p($zs,"","",3,999),! d GETOUT^GDEEXIT zg 0"
; if zchset is UTF-8 open in raw mode to avoid BADCHAR errors
; For OS390 aka z/OS, use BINARY mode
s abs=1,update=0,chset=$SELECT($ZV["OS390":"BINARY",$ZCHSET="UTF-8":"M",1:"")
@@ -33,6 +33,9 @@ LOAD
i gldfmt>6 s reghasv550fields=TRUE
s reghasv600fields=FALSE
i gldfmt>7 s reghasv600fields=TRUE
+ s v631=0
+ i (label="GTCGBDUNX011")!(label="GTCGBDUNX111") s label=hdrlab,v631=1,update=1 ;autoconvert
+ i (v631=1) n SIZEOF d v631init
s v63a=0
i (label="GTCGBDUNX010")!(label="GTCGBDUNX110") s label=hdrlab,v63a=1,update=1 ;autoconvert
i (v63a=1) n SIZEOF d v63ainit
@@ -92,6 +95,7 @@ LOAD
s contents("regions")=$$bin2num($ze(rec,abs,abs+ptrsize-1)),abs=abs+ptrsize
s contents("segments")=$$bin2num($ze(rec,abs,abs+ptrsize-1)),abs=abs+ptrsize
i (gldfmt>8) s contents("gblnames")=$$bin2num($ze(rec,abs,abs+ptrsize-1)),abs=abs+ptrsize
+ i (gldfmt>11) s contents("inst")=$$bin2num($ze(rec,abs,abs+ptrsize-1)),abs=abs+ptrsize
s abs=abs+(3*ptrsize) ;skip link, tab_ptr and id pointers
s contents("end")=$$bin2num($ze(rec,abs,abs+ptrsize-1)),abs=abs+ptrsize
i (gldfmt>8) s abs=abs+16 ; reserved for runtime fillers
@@ -110,6 +114,9 @@ LOAD
i (gldfmt>8) d
. i x'=contents("gblnames") zm gdeerr("INPINTEG")
. s x=x+(contents("gblnamecnt")*(SIZEOF("gd_gblname")))
+ i (gldfmt>11),(contents("inst")>0) d
+ . i x'=contents("inst") zm gdeerr("INPINTEG")
+ . s x=x+(SIZEOF("gd_inst_info"))
i x'=contents("end") zm gdeerr("INPINTEG")
s rel=abs
; maps - verify that mapped regions and regions are 1-to-1
@@ -147,6 +154,11 @@ LOAD
i (gldfmt'>10) do
. ; remove any %Y* name mappings in old gld (unsubscripted OR subscripted) as documented
. n s s s="" f s s=$o(nams(s)) q:s="" i $ze(s,1,2)="%Y" k nams(s) i $incr(nams,-1)
+; instance
+ i (gldfmt>11) d
+ . k inst s inst=0
+ . i contents("inst")>0 d inst
+ e s inst=0
; template access method
s tmpacc=$$gderead(4)
i accmeth'[("\"_tmpacc) zm gdeerr("INPINTEG")
@@ -404,7 +416,7 @@ segment:
i (gldfmt>8) s rel=rel+16 ; reserved for runtime fillers
s abs=abs+SIZEOF("gd_segment")-v30
q
-gblname(i);
+gblname:(i)
n x,y
i $zl(rec)-(rel-1)<SIZEOF("gd_gblname") d nextrec
s gnams=gnams+1
@@ -419,6 +431,15 @@ gblname(i);
s gnams(s,"COLLVER")=y
s abs=abs+SIZEOF("gd_gblname")
q
+inst:
+ n x,y
+ i $zl(rec)-(rel-1)<SIZEOF("gd_inst_info") d nextrec
+ i $zl(rec)-(rel-1)<SIZEOF("gd_inst_info") zm gdeerr("INPINTEG")
+ s y=$ze(rec,rel,rel+SIZEOF("gd_inst_info")),rel=rel+SIZEOF("gd_inst_info")
+ s x=$zf(y,ZERO)-2 i x=-2 zm gdeerr("INPINTEG") ; it better be null terminated
+ s y=$ze(y,1,x)
+ s inst("FILE_NAME")=y,inst=1
+ q
gderead:(max)
n s
i $zl(rec)-(rel-1)<3 d nextrec
@@ -449,12 +470,12 @@ nextrec:
;----------------------------------------------------------------------------------------------------------------------------------
CREATE
- k contents,nams,regs,segs,tmpreg,tmpseg,gnams
+ k contents,nams,regs,segs,tmpreg,tmpseg,gnams,inst
s update=1
s header=$tr($j("",SIZEOF("gd_header")-16)," ",ZERO)
s nams=2,(nams("*"),nams("#"))=defreg
s regs=1,regs(defreg,"DYNAMIC_SEGMENT")=defseg,reg="regs(defreg)"
- s gnams=0
+ s (gnams,inst)=0
d cretmps
s x=""
f s x=$o(tmpreg(x)) q:'$zl(x) s @reg@(x)=tmpreg(x)
@@ -749,3 +770,33 @@ v63ainit:
s MAXNAMLN=SIZEOF("mident")-1,MAXREGLN=32,MAXSEGLN=32 ; maximum name length allowed is 31 characters
s PARNAMLN=31,PARREGLN=31,PARSEGLN=31
q
+v631init:
+ i (olabel="GTCGBDUNX011") d
+ . s SIZEOF("am_offset")=332
+ . s SIZEOF("file_spec")=256
+ . s SIZEOF("gd_header")=16
+ . s SIZEOF("gd_contents")=76
+ . s SIZEOF("gd_map")=16
+ . s SIZEOF("gd_region")=412
+ . s SIZEOF("gd_region_padding")=0
+ . s SIZEOF("gd_segment")=368
+ e d
+ . s SIZEOF("am_offset")=340
+ . s SIZEOF("file_spec")=256
+ . s SIZEOF("gd_header")=16
+ . s SIZEOF("gd_contents")=112
+ . s SIZEOF("gd_map")=24
+ . s SIZEOF("gd_region")=424
+ . s SIZEOF("gd_region_padding")=4
+ . s SIZEOF("gd_segment")=384
+ s SIZEOF("gd_gblname")=40
+ s SIZEOF("mident")=32
+ s SIZEOF("blk_hdr")=16
+ s SIZEOF("rec_hdr")=4
+ s SIZEOF("dsk_blk")=512
+ s SIZEOF("max_str")=1048576
+ s SIZEOF("reg_jnl_deq")=4
+ d Init^GDEINITSZ
+ s MAXNAMLN=SIZEOF("mident")-1,MAXREGLN=32,MAXSEGLN=32 ; maximum name length allowed is 31 characters
+ s PARNAMLN=31,PARREGLN=31,PARSEGLN=31
+ q
diff --git a/sr_unix/gdeput.m b/sr_unix/gdeput.m
index 8a59c64..d2162fa 100644
--- a/sr_unix/gdeput.m
+++ b/sr_unix/gdeput.m
@@ -57,6 +57,10 @@ GDEPUT()
s filesize=filesize+(csegcnt*SIZEOF("gd_segment"))
s rec=rec_$$num2bin(ptrsize,filesize) ; gblnameptr
s filesize=filesize+(gnamcnt*SIZEOF("gd_gblname"))
+ i inst>0 d
+ . s rec=rec_$$num2bin(ptrsize,filesize) ; instptr
+ . s filesize=filesize+SIZEOF("gd_inst_info")
+ e s rec=rec_$tr($j("",ptrsize)," ",ZERO) ; no inst info
s rec=rec_$tr($j("",(3*ptrsize))," ",ZERO) ; reserved
s rec=rec_$$num2bin(ptrsize,filesize) ; end
s rec=rec_$$num2bin(4,hasSpanGbls) ; has_span_gbls
@@ -86,6 +90,8 @@ GDEPUT()
f s s=$o(csegs(s)) q:'$l(s) d csegment
; cgnams
f s s=$o(gnams(s)) q:'$l(s) d cgblname(s)
+; cinst
+ i inst>0 d cinst
; template access method
i accmeth'[("\"_tmpacc) d error1
s rec=rec_$tr($j($l(tmpacc),3)," ",0)
@@ -277,6 +283,13 @@ cgblname:(s)
s ver=$view("YCOLLATE",coll)
s rec=rec_$$num2bin(4,ver)
q
+cinst:
+ n s,len,n
+ d writerec
+ s s=inst("FILE_NAME")
+ s len=$zl(s)
+ s rec=rec_s_$tr($j("",SIZEOF("gd_inst_info")-len)," ",ZERO)
+ q
;-----------------------------------------------------------------------------------------------------------------------------------
diff --git a/sr_unix/gdeverif.m b/sr_unix/gdeverif.m
index dd7ec9d..b7190b5 100755
--- a/sr_unix/gdeverif.m
+++ b/sr_unix/gdeverif.m
@@ -89,9 +89,9 @@ gblname1:
. . . d chkcoll^GDEPARSE(sval,GBLNAME,gnams(GBLNAME,"COLLVER"))
. . e d chkcoll^GDEPARSE(sval,GBLNAME)
; now that all gblnames and names have been read, do some checks between them
- ; ASSERT : i $d(namrangeoverlap) zsh "*" h
+ ; ASSERT : i $d(namrangeoverlap) zsh "*" zg 0
d gblnameeditchecks^GDEPARSE("*",0) ; check all name specifications are good given the gblname collation settings
- ; ASSERT : i $d(namrangeoverlap) zsh "*" h
+ ; ASSERT : i $d(namrangeoverlap) zsh "*" zg 0
q
REGION
i '$d(regs(REGION)) k verified zm $$info(gdeerr("OBJNOTFND")):"Region":REGION q
diff --git a/sr_unix/gds_rundown.c b/sr_unix/gds_rundown.c
index b0377ba..0a2af4e 100644
--- a/sr_unix/gds_rundown.c
+++ b/sr_unix/gds_rundown.c
@@ -97,7 +97,7 @@ GBLREF jnl_process_vector *originator_prc_vec;
GBLREF jnl_gbls_t jgbl;
GBLREF boolean_t dse_running;
GBLREF int num_additional_processors;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF int process_exiting;
GBLREF boolean_t ok_to_UNWIND_in_exit_handling;
GBLREF gv_namehead *gv_target_list;
@@ -191,6 +191,17 @@ int4 gds_rundown(boolean_t cleanup_udi)
gvusr_rundown();
return EXIT_NRM;
}
+ /* If this is a read-only database, simply return */
+ if (cs_data->read_only)
+ {
+ if (0 != sem_rmid(udi->semid))
+ rts_error_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_DBFILERR, 2, DB_LEN_STR(reg),
+ ERR_TEXT, 2, RTS_ERROR_TEXT("Unable to remove semaphore"), errno);
+ udi->sem_deleted = TRUE; /* Note that we deleted the semaphore */
+ udi->grabbed_access_sem = FALSE;
+ udi->counter_acc_incremented = FALSE;
+ return EXIT_NRM;
+ }
/* If this region has a corresponding statsdb region that is open, close that first. This is needed to ensure
* that the statsdb can safely be deleted at basedb rundown time if we happen to be the last one to rundown the basedb.
*/
@@ -297,7 +308,7 @@ int4 gds_rundown(boolean_t cleanup_udi)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(12) ERR_CRITSEMFAIL, 2, DB_LEN_STR(reg), ERR_SYSCALL, 5,
RTS_ERROR_TEXT("gds_rundown SEMCTL failed to get ftok_semval"), CALLFROM, errno);
}
- may_bypass_ftok = CAN_BYPASS(ftok_semval, csd, inst_is_frozen); /* Do we need a blocking wait? */
+ may_bypass_ftok = CAN_BYPASS(ftok_semval, csa, inst_is_frozen); /* Do we need a blocking wait? */
/* We need to guarantee that no one else access database file header when semid/shmid fields are reset.
* We already have created ftok semaphore in db_init or mu_rndwn_file and did not remove it. So just lock it.
*/
@@ -341,7 +352,7 @@ int4 gds_rundown(boolean_t cleanup_udi)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(12) ERR_CRITSEMFAIL, 2, DB_LEN_STR(reg), ERR_SYSCALL, 5,
RTS_ERROR_TEXT("gds_rundown SEMCTL failed to get semval"), CALLFROM, errno);
}
- bypassed_access = CAN_BYPASS(semval, csd, inst_is_frozen) || onln_rlbk_pid || csd->file_corrupt;
+ bypassed_access = CAN_BYPASS(semval, csa, inst_is_frozen) || onln_rlbk_pid || csd->file_corrupt;
/* Before attempting again in the blocking mode, see if the holding process is an online rollback.
* If so, it is likely we won't get the access control semaphore anytime soon. In that case, we
* are better off skipping rundown and continuing with sanity cleanup and exit.
@@ -400,9 +411,14 @@ int4 gds_rundown(boolean_t cleanup_udi)
/* If we bypassed any of the semaphores, activate safe mode.
* Also, if the replication instance is frozen and this db has replication turned on (which means
* no flushes of dirty buffers to this db can happen while the instance is frozen) activate safe mode.
+ * Similarly, if there is an online freeze in place, we need to avoid writing to the file, so we need
+ * to keep shared memory around.
+ * Or if an online freeze has been autoreleased, we need to keep shared memory around so that it can be
+ * reported and cleaned up by a subsequent MUPIP FREEZE -OFF.
*/
ok_to_write_pfin = !(bypassed_access || bypassed_ftok || inst_is_frozen);
- safe_mode = !ok_to_write_pfin || ftok_counter_halted || access_counter_halted || FROZEN_CHILLED(csd);
+ safe_mode = !ok_to_write_pfin || ftok_counter_halted || access_counter_halted || FROZEN_CHILLED(csa)
+ || CHILLED_AUTORELEASE(csa);
/* At this point we are guaranteed no one else is doing a db_init/rundown as we hold the access control semaphore */
assert(csa->ref_cnt); /* decrement private ref_cnt before shared ref_cnt decrement. */
csa->ref_cnt--;
@@ -443,7 +459,11 @@ int4 gds_rundown(boolean_t cleanup_udi)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(12) ERR_CRITSEMFAIL, 2, DB_LEN_STR(reg), ERR_SYSCALL, 5,
RTS_ERROR_TEXT("gds_rundown SEMCTL failed to get ftok_semval"), CALLFROM, errno);
if (NULL != csa->ss_ctx)
+ {
ss_destroy_context(csa->ss_ctx);
+ free(csa->ss_ctx);
+ csa->ss_ctx = NULL;
+ }
/* SS_MULTI: If multiple snapshots are supported, then we have to run through each of the snapshots */
assert(1 == MAX_SNAPSHOTS);
ss_shm_ptr = (shm_snapshot_ptr_t)SS_GETSTARTPTR(csa);
@@ -468,7 +488,7 @@ int4 gds_rundown(boolean_t cleanup_udi)
* consistent state.
* Or if we have an Online Freeze, skip flushing, as that will be handled when the freeze is removed.
*/
- if (!cnl->donotflush_dbjnl && !reg->read_only && !vermismatch && !FROZEN_CHILLED(csd))
+ if (!cnl->donotflush_dbjnl && !reg->read_only && !vermismatch)
{ /* If we had an orphaned block and were interrupted, set wc_blocked so we can invoke wcs_recover. Do it ONLY
* if there is NO concurrent online rollback running (as we need crit to set wc_blocked)
*/
@@ -524,7 +544,13 @@ int4 gds_rundown(boolean_t cleanup_udi)
* In this case, since we are running down, we don't have any such option.
* If we are in safe_mode, we won't get here, so no need to check for online freeze.
*/
- cnl->remove_shm = wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_WRITE_EPOCH | WCSFLU_SYNC_EPOCH);
+ if (!FROZEN_CHILLED(csa))
+ cnl->remove_shm = wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_WRITE_EPOCH | WCSFLU_SYNC_EPOCH);
+ else
+ {
+ jnl_wait(reg);
+ cnl->remove_shm = FALSE;
+ }
if (!cnl->remove_shm)
{ /* If "wcs_flu" call fails, then we should not remove shm or reset anything in the db fileheader.
* So reset "we_are_last_writer" variable itself as that makes it more safer to fall through to
@@ -563,7 +589,10 @@ int4 gds_rundown(boolean_t cleanup_udi)
*/
db_needs_flushing = (cnl->last_wcsflu_tn < csa->ti->curr_tn);
if (db_needs_flushing)
- wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_WRITE_EPOCH | WCSFLU_SYNC_EPOCH);
+ if (!FROZEN_CHILLED(csa))
+ wcs_flu(WCSFLU_FLUSH_HDR | WCSFLU_WRITE_EPOCH | WCSFLU_SYNC_EPOCH);
+ else
+ jnl_wait(reg);
/* Same as above "wcs_flu" */
IF_LIBAIO(aio_shim_destroy(udi->owning_gd);)
assert(is_mm || (csd == cs_data));
@@ -575,23 +604,24 @@ int4 gds_rundown(boolean_t cleanup_udi)
jpc = csa->jnl;
jbp = jpc->jnl_buff;
if (jbp->fsync_in_prog_latch.u.parts.latch_pid == process_id)
- {
- assert(FALSE);
- COMPSWAP_UNLOCK(&jbp->fsync_in_prog_latch, process_id, 0, LOCK_AVAILABLE, 0);
- }
- if (jbp->io_in_prog_latch.u.parts.latch_pid == process_id)
- {
- assert(FALSE);
- COMPSWAP_UNLOCK(&jbp->io_in_prog_latch, process_id, 0, LOCK_AVAILABLE, 0);
- }
+ {
+ assert(FALSE);
+ COMPSWAP_UNLOCK(&jbp->fsync_in_prog_latch, process_id, 0, LOCK_AVAILABLE, 0);
+ }
+ if (jbp->io_in_prog_latch.u.parts.latch_pid == process_id)
+ {
+ assert(FALSE);
+ COMPSWAP_UNLOCK(&jbp->io_in_prog_latch, process_id, 0, LOCK_AVAILABLE, 0);
+ }
/* If we are last writer, it is possible cnl->remove_shm is set to FALSE from the "wcs_flu" call
* above (e.g. we are source server and "wcs_flu" noticed a phase2 commit that need to be cleaned up
* which needs a "wcs_recover" call but that is a no-op for the source server). So check that
* additionally. Thankfully "we_are_last_writer" would have already factored that into account above
* ("we_are_last_writer && cnl->remove_shm" code block above). So no additional check needed below.
*/
- if ((((NOJNL != jpc->channel) && !JNL_FILE_SWITCHED(jpc))
- || we_are_last_writer && (0 != cnl->jnl_file.u.inode)) && ok_to_write_pfin)
+ if (ok_to_write_pfin && !FROZEN_CHILLED(csa)
+ && (((NOJNL != jpc->channel) && !JNL_FILE_SWITCHED(jpc))
+ || (we_are_last_writer && (0 != cnl->jnl_file.u.inode))))
{ /* We need to close the journal file cleanly if we have the latest generation journal file open
* or if we are the last writer and the journal file is open in shared memory (not necessarily
* by ourselves e.g. the only process that opened the journal got shot abnormally)
@@ -671,12 +701,12 @@ int4 gds_rundown(boolean_t cleanup_udi)
}
}
}
- if (we_are_last_writer) /* Flush the fileheader last and harden the file to disk */
- {
+ if (we_are_last_writer && !FROZEN_CHILLED(csa))
+ { /* Flush the fileheader last and harden the file to disk */
if (!was_crit)
grab_crit(reg); /* To satisfy crit requirement in fileheader_sync() */
memset(csd->machine_name, 0, MAX_MCNAMELEN); /* clear the machine_name field */
- if (we_are_last_user)
+ if (we_are_last_user && !CHILLED_AUTORELEASE(csa))
{
csd->shmid = INVALID_SHMID;
csd->gt_shm_ctime.ctime = 0;
@@ -804,7 +834,7 @@ int4 gds_rundown(boolean_t cleanup_udi)
* If cnl->donotflush_dbjnl is TRUE, it means we can safely remove shared memory without compromising data
* integrity as a reissue of recover will restore the database to a consistent state.
*/
- remove_shm = !vermismatch && (cnl->remove_shm || cnl->donotflush_dbjnl);
+ remove_shm = !vermismatch && (cnl->remove_shm || cnl->donotflush_dbjnl) && !CHILLED_AUTORELEASE(csa);
/* We are done with online rollback on this region. Indicate to other processes by setting the onln_rlbk_pid to 0.
* Do it before releasing crit (t_end relies on this ordering when accessing cnl->onln_rlbk_pid).
*/
@@ -861,7 +891,7 @@ int4 gds_rundown(boolean_t cleanup_udi)
{
if (0 != sem_rmid(udi->semid))
rts_error_csa(CSA_ARG(csa) VARLSTCNT(8) ERR_DBFILERR, 2, DB_LEN_STR(reg),
- ERR_TEXT, 2, RTS_ERROR_TEXT("Unable to remove semaphore"));
+ ERR_TEXT, 2, RTS_ERROR_TEXT("Unable to remove semaphore"), errno);
udi->sem_deleted = TRUE; /* Note that we deleted the semaphore */
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
@@ -869,7 +899,6 @@ int4 gds_rundown(boolean_t cleanup_udi)
if (is_statsDB)
{
STATSDBREG_TO_BASEDBREG(reg, baseDBreg);
- assert(baseDBreg->open);
baseDBcsa = &FILE_INFO(baseDBreg)->s_addrs;
baseDBnl = baseDBcsa->nl;
baseDBnl->statsdb_rundown_clean = TRUE;
diff --git a/sr_unix/gdsfilext.c b/sr_unix/gdsfilext.c
index 5aead7f..d24d666 100644
--- a/sr_unix/gdsfilext.c
+++ b/sr_unix/gdsfilext.c
@@ -80,22 +80,22 @@ MBSTART { \
#define SUSPICIOUS_EXTEND (2 * (dollar_tlevel ? sgm_info_ptr->cw_set_depth : cw_set_depth) < cs_addrs->ti->free_blocks)
-GBLREF sigset_t blockalrm;
-GBLREF sgmnt_addrs *cs_addrs;
-GBLREF sgmnt_data_ptr_t cs_data;
-GBLREF unsigned char cw_set_depth;
-GBLREF uint4 dollar_tlevel;
-GBLREF gd_region *gv_cur_region;
-GBLREF inctn_opcode_t inctn_opcode;
-GBLREF boolean_t mu_reorg_process;
-GBLREF uint4 process_id;
-GBLREF sgm_info *sgm_info_ptr;
-GBLREF unsigned int t_tries;
-GBLREF jnl_gbls_t jgbl;
-GBLREF inctn_detail_t inctn_detail; /* holds detail to fill in to inctn jnl record */
-GBLREF boolean_t gtm_dbfilext_syslog_disable; /* control whether db file extension message is logged or not */
-GBLREF uint4 gtmDebugLevel;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF sigset_t blockalrm;
+GBLREF sgmnt_addrs *cs_addrs;
+GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF unsigned char cw_set_depth;
+GBLREF uint4 dollar_tlevel;
+GBLREF gd_region *gv_cur_region;
+GBLREF inctn_opcode_t inctn_opcode;
+GBLREF boolean_t mu_reorg_process;
+GBLREF uint4 process_id;
+GBLREF sgm_info *sgm_info_ptr;
+GBLREF unsigned int t_tries;
+GBLREF jnl_gbls_t jgbl;
+GBLREF inctn_detail_t inctn_detail; /* holds detail to fill in to inctn jnl record */
+GBLREF boolean_t gtm_dbfilext_syslog_disable; /* control whether db file extension message is logged or not */
+GBLREF uint4 gtmDebugLevel;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_DBFILERR);
error_def(ERR_DBFILEXT);
@@ -148,6 +148,7 @@ uint4 gdsfilext(uint4 blocks, uint4 filesize, boolean_t trans_in_prog)
jnl_private_control *jpc;
jnl_buffer_ptr_t jbp;
cache_rec_ptr_t cr;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INST_FREEZE_ON_NOSPC_ENABLED */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -202,7 +203,7 @@ uint4 gdsfilext(uint4 blocks, uint4 filesize, boolean_t trans_in_prog)
{
if (blocks > (uint4)avail_blocks)
{
- if (!INST_FREEZE_ON_NOSPC_ENABLED(cs_addrs))
+ if (!INST_FREEZE_ON_NOSPC_ENABLED(cs_addrs, local_jnlpool))
return (uint4)(NO_FREE_SPACE);
else
send_msg_csa(CSA_ARG(cs_addrs) VARLSTCNT(6) MAKE_MSG_WARNING(ERR_NOSPACEEXT), 4,
@@ -237,7 +238,7 @@ uint4 gdsfilext(uint4 blocks, uint4 filesize, boolean_t trans_in_prog)
* op_tcommit to invoke bm_getfree->gdsfilext, then we would have come here with a frozen region on which
* we hold crit.
*/
- assert(!was_crit || !FROZEN_HARD(cs_data) || (dollar_tlevel && (CDB_STAGNATE <= t_tries)));
+ assert(!was_crit || !FROZEN_HARD(cs_addrs) || (dollar_tlevel && (CDB_STAGNATE <= t_tries)));
/*
* If we are in the final retry and already hold crit, it is possible that csa->nl->wc_blocked is also set to TRUE
* (by a concurrent process in phase2 which encountered an error in the midst of commit and secshr_db_clnup
@@ -251,19 +252,20 @@ uint4 gdsfilext(uint4 blocks, uint4 filesize, boolean_t trans_in_prog)
for ( ; ; )
{
grab_crit(gv_cur_region);
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
DO_CHILLED_AUTORELEASE(cs_addrs, cs_data);
+ assert(FROZEN(cs_data) || !cs_addrs->jnlpool || (cs_addrs->jnlpool == jnlpool));
if (!FROZEN(cs_data) && !IS_REPL_INST_FROZEN)
break;
rel_crit(gv_cur_region);
while (FROZEN(cs_data) || IS_REPL_INST_FROZEN)
{
hiber_start(1000);
- if (FROZEN_CHILLED(cs_data) && CHILLED_AUTORELEASE(cs_data))
+ if (FROZEN_CHILLED(cs_addrs) && CHILLED_AUTORELEASE(cs_addrs))
break;
}
}
- } else if (FROZEN_HARD(cs_data) && dollar_tlevel)
+ } else if (FROZEN_HARD(cs_addrs) && dollar_tlevel)
{ /* We don't want to continue with file extension as explained above. Hence return with an error code which
* op_tcommit will recognize (as a cdb_sc_needcrit/cdb_sc_instancefreeze type of restart) and restart accordingly.
*/
@@ -272,6 +274,7 @@ uint4 gdsfilext(uint4 blocks, uint4 filesize, boolean_t trans_in_prog)
return (uint4)FINAL_RETRY_FREEZE_PROG;
} else
WAIT_FOR_REGION_TO_UNCHILL(cs_addrs, cs_data);
+ assert(!cs_addrs->jnlpool || (cs_addrs->jnlpool == jnlpool));
if (IS_REPL_INST_FROZEN && trans_in_prog)
{
assert(CDB_STAGNATE <= t_tries);
diff --git a/sr_unix/generate_help.csh b/sr_unix/generate_help.csh
index 6f27b06..12fdcee 100755
--- a/sr_unix/generate_help.csh
+++ b/sr_unix/generate_help.csh
@@ -17,7 +17,6 @@
# HLP file location (defaults to $gtm_pct)
# Error log file (used to redirect output to error file in comlist.csh)
-
set hlpdir = $1
if ("" == "${hlpdir}") then
if (0 == $?gtm_pct) then
@@ -56,6 +55,8 @@ foreach hlp (${hlpdir}/*.hlp)
continue
endif
+ echo "Generating ${prefix}help.gld and ${prefix}help.dat"
+
# Either help info does not exist or needs to be regenerated
# Define the global directory with the same prefix as the HLP file and
@@ -93,13 +94,15 @@ GTM_in_gtmhelp
continue
endif
if ("gtm" == "$prefix") then
- $gtm_exe/mumps -run GTMDEFINEDTYPESTODB
+ ${gtm_dist}/mumps -run GTMDEFINEDTYPESTODB
if ($status) then
@ script_stat++
echo "generatehelp-E-hlp, Error during GTMDEFINEDTYPESTODB ${hlp}" $errout
continue
endif
endif
+ echo "Setting read-only for ${gtm_dist}/${prefix}help.{gld,dat} regions"
+ ${gtm_dist}/mupip set -read_only -acc=MM -reg "*" >& /dev/null
chmod ugo-x ${gtm_dist}/${prefix}help.{gld,dat}
end
diff --git a/sr_unix/get_src_line.c b/sr_unix/get_src_line.c
index 923e9ed..b38093d 100644
--- a/sr_unix/get_src_line.c
+++ b/sr_unix/get_src_line.c
@@ -414,7 +414,8 @@ STATICFNDEF boolean_t fill_src_tbl_via_mfile(routine_source **src_tbl_result, rh
}
if (found)
{
- *base = *(base + 1);
+ if (srcrecs > 1)
+ *base = *(base + 1);
/* Ensure we have reached the end of the source file. If not, we need to issue a CHECKSUMFAIL
* error. Most often the !eof_seen part of the check is not needed since the checksums will not
* match. But if it so happens that the checksums do match, then this extra check helps us
diff --git a/sr_unix/grab_crit.c b/sr_unix/grab_crit.c
old mode 100755
new mode 100644
index 1801c14..e3e1ece
--- a/sr_unix/grab_crit.c
+++ b/sr_unix/grab_crit.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -12,7 +12,7 @@
#include "mdef.h"
-#include <signal.h> /* for VSIG_ATOMIC_T type */
+#include "gtm_signal.h" /* for VSIG_ATOMIC_T type */
#include "gdsroot.h"
#include "gtm_facility.h"
@@ -44,7 +44,7 @@ GBLREF short crash_count;
GBLREF uint4 process_id;
GBLREF node_local_ptr_t locknl;
#ifdef DEBUG
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
#endif
GBLREF boolean_t mupip_jnl_recover;
@@ -61,7 +61,10 @@ void grab_crit(gd_region *reg)
sgmnt_data_ptr_t csd;
enum cdb_sc status;
mutex_spin_parms_ptr_t mutex_spin_parms;
- DEBUG_ONLY(sgmnt_addrs *jnlpool_csa;)
+# ifdef DEBUG
+ sgmnt_addrs *jnlpool_csa;
+ jnlpool_addrs_ptr_t local_jnlpool, save_jnlpool;
+# endif
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -70,6 +73,9 @@ void grab_crit(gd_region *reg)
csd = csa->hdr;
cnl = csa->nl;
# ifdef DEBUG
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (csa->jnlpool != jnlpool))
+ jnlpool = csa->jnlpool;
if (gtm_white_box_test_case_enabled
&& (WBTEST_SENDTO_EPERM == gtm_white_box_test_case_number)
&& (0 == cnl->wbox_test_seq_num))
@@ -86,12 +92,14 @@ void grab_crit(gd_region *reg)
if (!csa->now_crit)
{
# ifdef DEBUG
- if (NULL != jnlpool.jnlpool_ctl)
+ local_jnlpool = csa->jnlpool;
+ assert((NULL == local_jnlpool) || (local_jnlpool == jnlpool));
+ if ((NULL != local_jnlpool) && (NULL != local_jnlpool->jnlpool_ctl))
{ /* We should never request crit on a database region while already holding the lock on the journal pool.
* Not following the protocol (obtaining lock on journal pool AFTER obtaining crit on database region),
* can lead to potential deadlocks
*/
- jnlpool_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ jnlpool_csa = &FILE_INFO(local_jnlpool->jnlpool_dummy_reg)->s_addrs;
assert(!jnlpool_csa->now_crit);
}
# endif
@@ -101,6 +109,7 @@ void grab_crit(gd_region *reg)
DEBUG_ONLY(locknl = cnl;) /* for DEBUG_ONLY LOCK_HIST macro */
mutex_spin_parms = (mutex_spin_parms_ptr_t)&csd->mutex_spin_parms;
status = gtm_mutex_lock(reg, mutex_spin_parms, crash_count, MUTEX_LOCK_WRITE);
+ assert((NULL == local_jnlpool) || (local_jnlpool == jnlpool));
# ifdef DEBUG
if (gtm_white_box_test_case_enabled
&& (WBTEST_SENDTO_EPERM == gtm_white_box_test_case_number)
@@ -116,6 +125,10 @@ void grab_crit(gd_region *reg)
DEBUG_ONLY(locknl = NULL;) /* restore "locknl" to default value */
if (status != cdb_sc_normal)
{
+# ifdef DEBUG
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
+# endif
crit_count = 0;
TREF(grabbing_crit) = NULL;
switch(status)
@@ -136,7 +149,7 @@ void grab_crit(gd_region *reg)
*/
assert((0 == cnl->in_crit) || (FALSE == is_proc_alive(cnl->in_crit, 0)));
cnl->in_crit = process_id;
- CRIT_TRACE(crit_ops_gw); /* see gdsbt.h for comment on placement */
+ CRIT_TRACE(csa, crit_ops_gw); /* see gdsbt.h for comment on placement */
TREF(grabbing_crit) = NULL;
crit_count = 0;
}
@@ -147,5 +160,9 @@ void grab_crit(gd_region *reg)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_DBFLCORRP, 2, DB_LEN_STR(reg));
if (cnl->wc_blocked)
wcs_recover(reg);
+# ifdef DEBUG
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
+# endif
return;
}
diff --git a/sr_unix/grab_crit_immediate.c b/sr_unix/grab_crit_immediate.c
index 2e964b6..6e9a33a 100644
--- a/sr_unix/grab_crit_immediate.c
+++ b/sr_unix/grab_crit_immediate.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -92,7 +92,7 @@ boolean_t grab_crit_immediate(gd_region *reg, boolean_t ok_for_wcs_recover)
*/
assert((0 == cnl->in_crit) || (FALSE == is_proc_alive(cnl->in_crit, 0)));
cnl->in_crit = process_id;
- CRIT_TRACE(crit_ops_gw); /* see gdsbt.h for comment on placement */
+ CRIT_TRACE(csa, crit_ops_gw); /* see gdsbt.h for comment on placement */
crit_count = 0;
}
else
diff --git a/sr_unix/grab_lock.c b/sr_unix/grab_lock.c
old mode 100755
new mode 100644
index bc82ef4..4e8d5c1
--- a/sr_unix/grab_lock.c
+++ b/sr_unix/grab_lock.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -12,7 +12,7 @@
#include "mdef.h"
-#include <signal.h> /* for VSIG_ATOMIC_T type */
+#include "gtm_signal.h" /* for VSIG_ATOMIC_T type */
#include "gdsroot.h"
#include "gtm_facility.h"
@@ -35,7 +35,7 @@
GBLREF volatile int4 crit_count;
GBLREF uint4 process_id;
GBLREF node_local_ptr_t locknl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
GBLREF boolean_t is_src_server;
GBLREF boolean_t jnlpool_init_needed;
@@ -71,6 +71,8 @@ boolean_t grab_lock(gd_region *reg, boolean_t is_blocking_wait, uint4 onln_rlbk_
assert(0 == crit_count);
crit_count++; /* prevent interrupts */
DEBUG_ONLY(locknl = csa->nl); /* for DEBUG_ONLY LOCK_HIST macro */
+ assert(jnlpool && jnlpool->jnlpool_ctl); /* pool_init not yet set when called from jnlpool_init */
+ assert(reg == jnlpool->jnlpool_dummy_reg);
mutex_spin_parms = (mutex_spin_parms_ptr_t)((sm_uc_ptr_t)csa->critical + JNLPOOL_CRIT_SPACE);
/* This assumes that mutex_spin_parms_t is located immediately after the crit structures */
/* As of 10/07/98, crashcnt field in mutex_struct is not changed by any function for the dummy region */
@@ -102,9 +104,9 @@ boolean_t grab_lock(gd_region *reg, boolean_t is_blocking_wait, uint4 onln_rlbk_
*/
assert((0 == csa->nl->in_crit) || (FALSE == is_proc_alive(csa->nl->in_crit, 0)));
csa->nl->in_crit = process_id;
- CRIT_TRACE(crit_ops_gw); /* see gdsbt.h for comment on placement */
+ CRIT_TRACE(csa, crit_ops_gw); /* see gdsbt.h for comment on placement */
crit_count = 0;
- if (jnlpool.repl_inst_filehdr->file_corrupt && !jgbl.onlnrlbk)
+ if (jnlpool && jnlpool->repl_inst_filehdr && jnlpool->repl_inst_filehdr->file_corrupt && !jgbl.onlnrlbk)
{ /* Journal pool indicates an abnormally terminated online rollback. Cannot continue until the rollback
* command is re-run to bring the journal pool/file and instance file to a consistent state.
*/
@@ -131,10 +133,11 @@ boolean_t grab_lock(gd_region *reg, boolean_t is_blocking_wait, uint4 onln_rlbk_
* assert as it is valuable for replication servers (Source, Receiver and Update Process).
*/
assert((ASSERT_NO_ONLINE_ROLLBACK != onln_rlbk_action)
- || (csa->onln_rlbk_cycle == jnlpool.jnlpool_ctl->onln_rlbk_cycle) || IS_GTCM_GNP_SERVER_IMAGE
- || (jnlpool_init_needed && INST_FREEZE_ON_ERROR_POLICY));
+ || (jnlpool && jnlpool->jnlpool_ctl && (csa->onln_rlbk_cycle == jnlpool->jnlpool_ctl->onln_rlbk_cycle))
+ || IS_GTCM_GNP_SERVER_IMAGE || (jnlpool_init_needed && INST_FREEZE_ON_ERROR_POLICY));
if ((HANDLE_CONCUR_ONLINE_ROLLBACK == onln_rlbk_action)
- && (csa->onln_rlbk_cycle != jnlpool.jnlpool_ctl->onln_rlbk_cycle))
+ && (jnlpool && jnlpool->jnlpool_ctl
+ && (csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle)))
{
assert(is_src_server);
SYNC_ONLN_RLBK_CYCLES;
diff --git a/sr_unix/gt_timers.c b/sr_unix/gt_timers.c
index 3ca5743..857c9db 100755
--- a/sr_unix/gt_timers.c
+++ b/sr_unix/gt_timers.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -602,18 +602,20 @@ STATICFNDEF void start_first_timer(ABS_TIME *curr_time)
while (timeroot)
{
eltime = sub_abs_time((ABS_TIME *)&timeroot->expir_time, curr_time);
- /* If nothing has expired yet, break. */
- if (((0 <= eltime.at_sec) && !((0 == eltime.at_sec) && (0 == eltime.at_usec))) || (0 < timer_stack_count))
+ if (((0 <= eltime.at_sec) && !((0 == eltime.at_sec) && (0 == eltime.at_usec))))
+ { /* Timer isn't due yet, so set signal to fire at proper time. */
+ deferred_timers_check_needed = FALSE;
+ SYS_SETTIMER(timeroot, &eltime);
break;
+ }
+ else if (0 < timer_stack_count)
+ { /* Timer has expired, but we can't fire it now, so defer. */
+ deferred_timers_check_needed = TRUE;
+ break;
+ }
/* Otherwise, drive the handler. */
timer_handler(DUMMY_SIG_NUM);
}
- /* Do we still have a timer to set? */
- if (timeroot)
- {
- deferred_timers_check_needed = FALSE;
- SYS_SETTIMER(timeroot, &eltime);
- }
} else if (0 < safe_timer_cnt)
{ /* There are some safe timers on the queue. */
tpop = (GT_TIMER *)timeroot;
@@ -976,7 +978,11 @@ STATICFNDEF void remove_timer(TID tid)
if (tprev)
tprev->next = tp->next;
else
+ {
timeroot = tp->next;
+ if (NULL == timeroot)
+ deferred_timers_check_needed = FALSE; /* assert in fast path of "clear_timers" relies on this */
+ }
if (tp->safe)
safe_timer_cnt--;
tp->next = (GT_TIMER *)timefree; /* place element on free queue */
diff --git a/sr_unix/gtm_aio.h b/sr_unix/gtm_aio.h
index 15d0636..f416131 100644
--- a/sr_unix/gtm_aio.h
+++ b/sr_unix/gtm_aio.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2003-2016 Fidelity National Information *
+ * Copyright (c) 2003-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -49,10 +49,20 @@ struct aiocb {
}
#define AIO_ERROR(AIOCBP, STATUS) \
-{ \
- while ((STATUS = aio_error((AIOCBP)->aio_handle)) == EINPROGRESS) \
+MBSTART { \
+ intrpt_state_t prev_intrpt_state; \
+ \
+ DEFER_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+ STATUS = aio_error((AIOCBP)->aio_handle); \
+ while(STATUS == EINPROGRESS) \
+ { \
+ ENABLE_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
SHORT_SLEEP(AIO_POLL_SLEEP_TIME); \
-}
+ DEFER_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+ STATUS = aio_error((AIOCBP)->aio_handle); \
+ } \
+ ENABLE_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+} MBEND
#define AIO_RETURN(AIOCBP, STATUS) \
{ \
@@ -64,20 +74,31 @@ struct aiocb {
#define AIO_READ(FD, AIOCBP, STATUS1, STATUS2) \
{ \
STATUS2 = SS_NORMAL; \
- AIOCBP->aio_fildes = FD; \
- do \
- { \
- STATUS1 = aio_read(AIOCBP); \
- } while(-1 == STATUS1 && EAGAIN == errno); \
+ AIOCBP->aio_fildes = FD; \
+ do \
+ { \
+ STATUS1 = aio_read(AIOCBP); \
+ } while(-1 == STATUS1 && EAGAIN == errno); \
if (-1 == STATUS1) \
STATUS1 = errno; \
}
-#define AIO_ERROR(AIOCBP, STATUS) \
-{ \
- while ((STATUS = aio_error(AIOCBP)) == EINPROGRESS) \
- SHORT_SLEEP(AIO_POLL_SLEEP_TIME); \
-}
+#define AIO_ERROR(AIOCBP, STATUS) \
+MBSTART { \
+ intrpt_state_t prev_intrpt_state; \
+ \
+ DEFER_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+ STATUS = aio_error(AIOCBP); \
+ while(STATUS == EINPROGRESS) \
+ { \
+ ENABLE_INTERRUPTS(prev_intrpt_state, INTRPT_IN_AIO_ERROR); \
+ SHORT_SLEEP(AIO_POLL_SLEEP_TIME); \
+ DEFER_INTERRUPTS(INTRPT_IN_AIO_ERROR, prev_intrpt_state); \
+ STATUS = aio_error(AIOCBP); \
+ } \
+ ENABLE_INTERRUPTS(prev_intrpt_state, INTRPT_IN_AIO_ERROR); \
+} MBEND
+
#define AIO_RETURN(AIOCBP, STATUS) \
{ \
diff --git a/sr_unix/gtm_c_stack_trace_semop.c b/sr_unix/gtm_c_stack_trace_semop.c
index 6f6e464..9723e95 100644
--- a/sr_unix/gtm_c_stack_trace_semop.c
+++ b/sr_unix/gtm_c_stack_trace_semop.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2011, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2011-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -23,7 +24,8 @@
GBLREF uint4 process_id;
#ifdef DEBUG
-GBLREF sgmnt_addrs * cs_addrs;
+GBLREF gd_region *gv_cur_region;
+GBLREF sgmnt_addrs *cs_addrs;
#endif
int try_semop_get_c_stack(int semid, struct sembuf sops[], int nsops)
{
@@ -31,13 +33,13 @@ int try_semop_get_c_stack(int semid, struct sembuf sops[], int nsops)
int semop_pid, save_errno;
int last_sem_trace, rc;
# ifdef DEBUG
- node_local_ptr_t cnl;
+ node_local_ptr_t cnl = NULL;
# endif
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
# ifdef DEBUG
- if (NULL != cs_addrs)
+ if ((NULL != gv_cur_region) && gv_cur_region->open && (NULL != cs_addrs))
cnl = cs_addrs->nl;
# endif
stuckcnt = 0;
@@ -73,8 +75,11 @@ int try_semop_get_c_stack(int semid, struct sembuf sops[], int nsops)
{
GET_C_STACK_FROM_SCRIPT("SEMOP_INFO", process_id, semop_pid, stuckcnt);
/* Got stack trace signal the first process to continue */
- GTM_WHITE_BOX_TEST(WBTEST_SEMTOOLONG_STACK_TRACE,
- cnl->wbox_test_seq_num, 3);
+# ifdef DEBUG
+ if (cnl)
+ GTM_WHITE_BOX_TEST(WBTEST_SEMTOOLONG_STACK_TRACE,
+ cnl->wbox_test_seq_num, 3);
+# endif
} else if (-1 == semop_pid)
{
rc = -1;
diff --git a/sr_unix/gtm_env_init_sp.c b/sr_unix/gtm_env_init_sp.c
index 6d8161e..d625571 100755
--- a/sr_unix/gtm_env_init_sp.c
+++ b/sr_unix/gtm_env_init_sp.c
@@ -78,7 +78,6 @@
/* GTM_TEST_JNLPOOL_SYNC is used only in debug code so it does not have to go in gtm_logicals.h */
# define GTM_TEST_JNLPOOL_SYNC "$gtm_test_jnlpool_sync"
#endif
-#define DEFAULT_MUPIP_TRIGGER_ETRAP "IF $ZJOBEXAM()"
/* Remove trailing '/' from path (unless only '/') */
#define REMOVE_TRAILING_SLASH_FROM_MSTR(TRANS) \
@@ -95,23 +94,15 @@ GBLREF boolean_t gtm_quiet_halt;
GBLREF int gtm_non_blocked_write_retries; /* number for retries for non_blocked write to pipe */
GBLREF char *gtm_core_file;
GBLREF char *gtm_core_putenv;
-GBLREF mval dollar_etrap;
-GBLREF mval dollar_ztrap;
-GBLREF mval dollar_zstep;
GBLREF boolean_t dmterm_default;
GBLREF boolean_t ipv4_only; /* If TRUE, only use AF_INET. */
ZOS_ONLY(GBLREF char *gtm_utf8_locale_object;)
ZOS_ONLY(GBLREF boolean_t gtm_tag_utf8_as_ascii;)
-GTMTRIG_ONLY(GBLREF mval gtm_trigger_etrap;)
GBLREF volatile boolean_t timer_in_handler;
#ifdef USE_LIBAIO
GBLREF char io_setup_errstr[IO_SETUP_ERRSTR_ARRAYSIZE];
#endif
-#ifdef GTM_TRIGGER
-LITDEF mval default_mupip_trigger_etrap = DEFINE_MVAL_LITERAL(MV_STR, 0 , 0 , (SIZEOF(DEFAULT_MUPIP_TRIGGER_ETRAP) - 1),
- DEFAULT_MUPIP_TRIGGER_ETRAP , 0 , 0 );
-#endif
LITREF mstr relink_allowed_mstr[];
static readonly nametabent editing_params[] =
@@ -129,7 +120,6 @@ static readonly unsigned char editing_index[27] =
3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6
};
-static readonly unsigned char init_break[1] = {'B'};
error_def(ERR_INVLOCALE);
error_def(ERR_INVLINKTMPDIR);
@@ -206,19 +196,6 @@ void gtm_env_init_sp(void)
val.len = SIZEOF(GTM_LVNULLSUBS) - 1;
ret = trans_numeric(&val, &is_defined, TRUE); /* Not initialized enuf for errors yet so silent rejection of invalid vals */
TREF(lv_null_subs) = ((is_defined && (LVNULLSUBS_FIRST < ret) && (LVNULLSUBS_LAST > ret)) ? ret : LVNULLSUBS_OK);
-# ifdef GTM_TRIGGER
- val.addr = GTM_TRIGGER_ETRAP;
- val.len = SIZEOF(GTM_TRIGGER_ETRAP) - 1;
- if ((SS_NORMAL == (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), do_sendmsg_on_log2long))) && (0 < trans.len))
- {
- gtm_trigger_etrap.str.addr = malloc(trans.len + 1); /* +1 for '\0'; This memory is never freed */
- memcpy(gtm_trigger_etrap.str.addr, trans.addr, trans.len);
- gtm_trigger_etrap.str.addr[trans.len] = '\0';
- gtm_trigger_etrap.str.len = trans.len;
- gtm_trigger_etrap.mvtype = MV_STR;
- } else if (IS_MUPIP_IMAGE)
- gtm_trigger_etrap = default_mupip_trigger_etrap;
-# endif
/* ZLIB library compression level */
val.addr = GTM_ZLIB_CMP_LEVEL;
val.len = SIZEOF(GTM_ZLIB_CMP_LEVEL) - 1;
@@ -353,33 +330,6 @@ void gtm_env_init_sp(void)
((TREF(gtm_custom_errors)).addr)[trans.len] = '\0';
}
}
- /* Initialize which ever error trap we are using (ignored in the utilities except the update process) */
- val.addr = GTM_ETRAP;
- val.len = SIZEOF(GTM_ETRAP) - 1;
- if ((SS_NORMAL == (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), do_sendmsg_on_log2long))) && (0 < trans.len))
- {
- dollar_etrap.str.addr = malloc(trans.len + 1); /* +1 for '\0'; This memory is never freed */
- memcpy(dollar_etrap.str.addr, trans.addr, trans.len);
- dollar_etrap.str.addr[trans.len] = '\0';
- dollar_etrap.str.len = trans.len;
- dollar_etrap.mvtype = MV_STR;
- } else if (0 == dollar_etrap.mvtype)
- { /* If didn't setup $ETRAP, set default $ZTRAP instead */
- dollar_ztrap.mvtype = MV_STR;
- dollar_ztrap.str.len = SIZEOF(init_break);
- dollar_ztrap.str.addr = (char *)init_break;
- }
- /* Initiaalize $ZSTEP fro $gtm_zstep enviroment variable. Default value is initailzed in gbldefs.c */
- val.addr = GTM_ZSTEP;
- val.len = SIZEOF(GTM_ZSTEP) - 1;
- if ((SS_NORMAL == (status = TRANS_LOG_NAME(&val, &trans, buf, SIZEOF(buf), do_sendmsg_on_log2long))) && (0 < trans.len))
- {
- dollar_zstep.str.addr = malloc(trans.len + 1); /* +1 for '\0'; This memory is never freed */
- memcpy(dollar_zstep.str.addr, trans.addr, trans.len);
- dollar_zstep.str.addr[trans.len] = '\0';
- dollar_zstep.str.len = trans.len;
- dollar_zstep.mvtype = MV_STR;
- }
/* See if gtm_link is set */
val.addr = GTM_LINK;
val.len = SIZEOF(GTM_LINK) - 1;
diff --git a/sr_unix/gtm_file_stat.c b/sr_unix/gtm_file_stat.c
index 0f2ad89..db0b054 100755
--- a/sr_unix/gtm_file_stat.c
+++ b/sr_unix/gtm_file_stat.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -82,8 +83,8 @@ int gtm_file_stat(mstr *file, mstr *def, mstr *ret, boolean_t check_prv, uint4 *
}
}
if (NULL != ret)
- /* We asume ret->addr has MAX_FN_LEN bytes allocated */
- if (!get_full_path((char *)tmpfile->addr, tmpfile->len, ret->addr, (unsigned int *) &ret->len, MAX_FN_LEN, status))
+ /* ret->len has the max buffer allocated length, pass that to get_full_path */
+ if (!get_full_path((char *)tmpfile->addr, tmpfile->len, ret->addr, (unsigned int *) &ret->len, ret->len, status))
return FILE_STAT_ERROR;
if (file_not_found)
return FILE_NOT_FOUND;
diff --git a/sr_unix/gtm_ipc.h b/sr_unix/gtm_ipc.h
index 7a9eaff..5eb35ec 100644
--- a/sr_unix/gtm_ipc.h
+++ b/sr_unix/gtm_ipc.h
@@ -27,15 +27,19 @@
#define JNLPOOL_CLEAR_FIELDS(JNLPOOL) \
{ \
- GBLREF boolean_t pool_init; \
+ GBLREF int pool_init; \
\
- jnlpool_ctl = JNLPOOL.jnlpool_ctl = NULL; \
- JNLPOOL.gtmsrc_lcl_array = NULL; \
- JNLPOOL.gtmsource_local_array = NULL; \
- JNLPOOL.jnldata_base = NULL; \
- JNLPOOL.repl_inst_filehdr = NULL; \
- JNLPOOL.jnlpool_dummy_reg->open = FALSE; \
- pool_init = FALSE; \
+ assert(NULL != JNLPOOL); \
+ JNLPOOL->jnlpool_ctl = NULL; \
+ JNLPOOL->gtmsrc_lcl_array = NULL; \
+ JNLPOOL->gtmsource_local_array = NULL; \
+ JNLPOOL->jnldata_base = NULL; \
+ JNLPOOL->repl_inst_filehdr = NULL; \
+ JNLPOOL->jnlpool_dummy_reg->open = FALSE; \
+ JNLPOOL->gd_ptr = NULL; \
+ if (JNLPOOL->pool_init && (0 < pool_init)) \
+ pool_init--; \
+ JNLPOOL->pool_init = JNLPOOL->recv_pool = FALSE; \
}
#define JNLPOOL_SHMDT(JNLPOOL, RC, SAVE_ERRNO) \
@@ -44,10 +48,11 @@
intrpt_state_t prev_intrpt_state; \
\
SAVE_ERRNO = 0; /* clear any left-over value */ \
- assert(NULL != jnlpool_ctl); \
- assert(jnlpool_ctl == JNLPOOL.jnlpool_ctl); \
+ assert(NULL != JNLPOOL); \
+ assert(NULL != JNLPOOL->jnlpool_ctl); \
DEFER_INTERRUPTS(INTRPT_IN_SHMDT, prev_intrpt_state); \
- save_jnlpool_ctl = JNLPOOL.jnlpool_ctl; \
+ save_jnlpool_ctl = JNLPOOL->jnlpool_ctl; \
+ JNLPOOL->jnlpool_ctl = NULL; \
RC = SHMDT(save_jnlpool_ctl); \
SAVE_ERRNO = errno; \
JNLPOOL_CLEAR_FIELDS(JNLPOOL); \
diff --git a/sr_unix/gtm_logicals.h b/sr_unix/gtm_logicals.h
index a3a4183..4722848 100644
--- a/sr_unix/gtm_logicals.h
+++ b/sr_unix/gtm_logicals.h
@@ -152,4 +152,5 @@
#define GTM_LOCALE "$gtm_locale"
#define GTM_UTFCGR_STRINGS "$gtm_utfcgr_strings"
#define GTM_UTFCGR_STRING_GROUPS "$gtm_utfcgr_string_groups"
+#define GTM_STRPLLIM "$gtm_string_pool_limit"
diff --git a/sr_unix/gtm_putmsg.c b/sr_unix/gtm_putmsg.c
old mode 100755
new mode 100644
index 0c9a007..3663f5e
--- a/sr_unix/gtm_putmsg.c
+++ b/sr_unix/gtm_putmsg.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -30,7 +30,7 @@
#include "interlock.h"
GBLREF gd_region *gv_cur_region;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
/* WARNING: For chained error messages, all messages MUST be followed by an fao count;
* ======= zero MUST be specified if there are no parameters.
@@ -41,12 +41,13 @@ void gtm_putmsg(int argcnt, ...)
{
boolean_t was_holder;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by PTHREAD_CSA_FROM_GV_CUR_REGION */
boolean_t release_latch;
va_list var;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- csa = PTHREAD_CSA_FROM_GV_CUR_REGION;
+ PTHREAD_CSA_FROM_GV_CUR_REGION(csa, local_jnlpool);
VAR_START(var, argcnt);
PTHREAD_MUTEX_LOCK_IF_NEEDED(was_holder); /* get thread lock in case threads are in use */
GRAB_MULTI_PROC_LATCH_IF_NEEDED(release_latch); /* get multi-process lock if needed */
@@ -79,12 +80,13 @@ void gtm_putmsg_noflush(int argcnt, ...)
{
boolean_t was_holder;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by PTHREAD_CSA_FROM_GV_CUR_REGION */
boolean_t release_latch;
va_list var;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- csa = PTHREAD_CSA_FROM_GV_CUR_REGION;
+ PTHREAD_CSA_FROM_GV_CUR_REGION(csa, local_jnlpool);
VAR_START(var, argcnt);
PTHREAD_MUTEX_LOCK_IF_NEEDED(was_holder); /* get thread lock in case threads are in use */
GRAB_MULTI_PROC_LATCH_IF_NEEDED(release_latch); /* get multi-process lock if needed */
diff --git a/sr_unix/gtm_putmsg_list.c b/sr_unix/gtm_putmsg_list.c
old mode 100755
new mode 100644
index bb39118..ef334c6
--- a/sr_unix/gtm_putmsg_list.c
+++ b/sr_unix/gtm_putmsg_list.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -52,6 +52,7 @@ void gtm_putmsg_list(void *csa, int arg_count, va_list var)
const err_ctl *ctl;
boolean_t freeze_needed = FALSE;
char *rname;
+ jnlpool_addrs_ptr_t local_jnlpool; /* used by CHECK_IF_FREEZE_ON_ERROR_NEEDED and FREEZE_INSTANCE_IF_NEEDED */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -75,7 +76,7 @@ void gtm_putmsg_list(void *csa, int arg_count, va_list var)
for (; ; )
{
msg_id = va_arg(var, int);
- CHECK_IF_FREEZE_ON_ERROR_NEEDED(csa, msg_id, freeze_needed, freeze_msg_id);
+ CHECK_IF_FREEZE_ON_ERROR_NEEDED(csa, msg_id, freeze_needed, freeze_msg_id, local_jnlpool);
--arg_count;
if (NULL == (ctl = err_check(msg_id)))
msg = NULL;
@@ -135,5 +136,5 @@ void gtm_putmsg_list(void *csa, int arg_count, va_list var)
if (!IS_GTMSECSHR_IMAGE)
util_out_print("!/", NOFLUSH);
}
- FREEZE_INSTANCE_IF_NEEDED(csa, freeze_needed, freeze_msg_id);
+ FREEZE_INSTANCE_IF_NEEDED(csa, freeze_needed, freeze_msg_id, local_jnlpool);
}
diff --git a/sr_unix/gtm_rel_quant.h b/sr_unix/gtm_rel_quant.h
index 8e3b46e..a0d7829 100644
--- a/sr_unix/gtm_rel_quant.h
+++ b/sr_unix/gtm_rel_quant.h
@@ -24,10 +24,11 @@ GBLREF uint4 process_id;
/* yield processor macro - if argument is 0 or the (pseudo-)random value whose limit the argument defines is 0 just yield
* otherwise do a microsleep
*/
-#if (defined(_AIX) || defined(sparc))
-/* For pSeries and SPARC, the "yield" system call seems a better match for
+#if defined(_AIX)
+/* For pSeries the "yield" system call seems a better match for
* yields to ALLprocesses instead of just those on the local processor queue.
*/
+void yield(void); /* AIX doesn't have this in a header, so use prototype from the man page. */
#define RELQUANT yield()
#else
#define RELQUANT sched_yield() /* avoiding pthread_yield() avoids unnecessary linking with libpthreads */
diff --git a/sr_unix/gtm_repl_multi_inst.h b/sr_unix/gtm_repl_multi_inst.h
new file mode 100644
index 0000000..cd07f73
--- /dev/null
+++ b/sr_unix/gtm_repl_multi_inst.h
@@ -0,0 +1,43 @@
+/****************************************************************
+ * *
+ * Copyright (c) 2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
+ * *
+ * This source code contains the intellectual property *
+ * of its copyright holder(s), and is made available *
+ * under a license. If you do not know the terms of *
+ * the license, please stop and do not read further. *
+ * *
+ ****************************************************************/
+#ifndef GTM_REPL_MULTI_INST_H
+#define GTM_REPL_MULTI_INST_H
+
+error_def(ERR_REPLMULTINSTUPDATE);
+
+/* Issue REPLMULTINSTUPDATE when in TP and touching more than one region */
+#define DISALLOW_MULTIINST_UPDATE_IN_TP(TLEVEL, JPLHEAD, CSA, SGMFIRST, DOJNLPOOLINIT) \
+MBSTART { \
+ sgm_info *si; \
+ jnlpool_addrs_ptr_t local_jnlpool; \
+ \
+ if (IS_MUMPS_IMAGE && TLEVEL && JPLHEAD && JPLHEAD->next) \
+ { /* in transaction and multiple replication instances */ \
+ if (DOJNLPOOLINIT) /* trigger updates may not have initialized the journalpool yet */ \
+ JNLPOOL_INIT_IF_NEEDED(CSA, CSA->hdr, CSA->nl, SCNDDBNOUPD_CHECK_TRUE); /* may set CSA->jnlpool */ \
+ for (si = SGMFIRST; si && CSA->jnlpool; si = si->next_sgm_info) \
+ { /* CSA is connected to a jnlpool, check all regions in the transaction with updates use same jnlpool */ \
+ if (si->update_trans && si->tp_csa->jnlpool && (si->tp_csa->jnlpool != CSA->jnlpool)) \
+ { \
+ local_jnlpool = si->tp_csa->jnlpool; \
+ assert(local_jnlpool); \
+ assert(CSA->jnlpool == jnlpool); \
+ assert(jnlpool); \
+ assert(WBTEST_ENABLED(WBTEST_NO_REPLINSTMULTI_FAIL)); \
+ rts_error_csa(CSA_ARG(CSA) VARLSTCNT(8) ERR_REPLMULTINSTUPDATE, 6, \
+ DB_LEN_STR(local_jnlpool->jnlpool_dummy_reg), DB_LEN_STR(gv_cur_region), \
+ DB_LEN_STR(jnlpool->jnlpool_dummy_reg)); \
+ } \
+ } \
+ } \
+} MBEND;
+#endif
diff --git a/sr_unix/gtm_startup.c b/sr_unix/gtm_startup.c
index 8d5e6dd..fd5e1ba 100644
--- a/sr_unix/gtm_startup.c
+++ b/sr_unix/gtm_startup.c
@@ -64,7 +64,7 @@
#include "jobchild_init.h"
#include "error_trap.h" /* for ecode_init() prototype */
#include "zyerror_init.h"
-#include "ztrap_form_init.h"
+#include "trap_env_init.h"
#include "zdate_form_init.h"
#include "dollar_system_init.h"
#include "sig_init.h"
@@ -262,7 +262,8 @@ void gtm_startup(struct startup_vector *svec)
dollar_zstatus.str.addr = NULL;
ecode_init();
zyerror_init();
- ztrap_form_init();
+ if (IS_MUMPS_IMAGE)
+ trap_env_init();
zdate_form_init(svec);
dollar_system_init(svec);
init_callin_functable();
diff --git a/sr_unix/gtm_trigger.c b/sr_unix/gtm_trigger.c
index ff9fa94..f57943b 100644
--- a/sr_unix/gtm_trigger.c
+++ b/sr_unix/gtm_trigger.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2010-2016 Fidelity National Information *
+ * Copyright (c) 2010-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -87,9 +87,6 @@ GBLREF unsigned char *stackbase, *stacktop, *msp, *stackwarn;
GBLREF symval *curr_symval;
GBLREF int4 gtm_trigger_depth;
GBLREF int4 tstart_trigger_depth;
-GBLREF mval dollar_etrap;
-GBLREF mval dollar_ztrap;
-GBLREF mval gtm_trigger_etrap;
GBLREF mstr *dollar_ztname;
GBLREF mval *dollar_ztdata;
GBLREF mval *dollar_ztdelim;
@@ -519,7 +516,9 @@ int gtm_trigger(gv_trigger_t *trigdsc, gtm_trigger_parms *trigprm)
uint4 dollar_tlevel_start;
stack_frame *fp;
intrpt_state_t prev_intrpt_state;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
assert(!skip_dbtriggers); /* should not come here if triggers are not supposed to be invoked */
assert(trigdsc);
assert(trigprm);
@@ -632,14 +631,14 @@ int gtm_trigger(gv_trigger_t *trigdsc, gtm_trigger_parms *trigprm)
mv_st_ent->mv_st_cont.mvs_trigr.gtm_trigger_depth_save = gtm_trigger_depth;
if (0 == gtm_trigger_depth)
{ /* Only back up $*trap settings when initiating the first trigger level */
- mv_st_ent->mv_st_cont.mvs_trigr.dollar_etrap_save = dollar_etrap;
- mv_st_ent->mv_st_cont.mvs_trigr.dollar_ztrap_save = dollar_ztrap;
+ mv_st_ent->mv_st_cont.mvs_trigr.dollar_etrap_save = TREF(dollar_etrap);
+ mv_st_ent->mv_st_cont.mvs_trigr.dollar_ztrap_save = TREF(dollar_ztrap);
mv_st_ent->mv_st_cont.mvs_trigr.ztrap_explicit_null_save = ztrap_explicit_null;
- dollar_ztrap.str.len = 0;
+ (TREF(dollar_ztrap)).str.len = 0;
ztrap_explicit_null = FALSE;
- if (NULL != gtm_trigger_etrap.str.addr)
+ if (NULL != (TREF(gtm_trigger_etrap)).str.addr)
/* An etrap was defined for the trigger environment - Else existing $etrap persists */
- dollar_etrap = gtm_trigger_etrap;
+ TREF(dollar_etrap) = TREF(gtm_trigger_etrap);
}
mv_st_ent->mv_st_cont.mvs_trigr.mumps_status_save = mumps_status;
mv_st_ent->mv_st_cont.mvs_trigr.run_time_save = run_time;
@@ -881,7 +880,7 @@ void gtm_trigger_cleanup(gv_trigger_t *trigdsc)
int size;
stack_frame *fp;
- /* TODO: We don't expect the trigger source to exist now the gtm_trigger cleans it up ASAP. Remove it after a few releases */
+ /* TODO: We don't expect the trigger source to exist now gtm_trigger cleans it up ASAP. Remove it after a few releases */
assert (0 == trigdsc->xecute_str.str.len);
/* First thing to do is release trigger source field if it exists */
if (0 < trigdsc->xecute_str.str.len)
diff --git a/sr_unix/gtmcrypt_dbk_ref.c b/sr_unix/gtmcrypt_dbk_ref.c
index 6657865..e753cf9 100644
--- a/sr_unix/gtmcrypt_dbk_ref.c
+++ b/sr_unix/gtmcrypt_dbk_ref.c
@@ -315,7 +315,7 @@ STATICFNDEF gtm_keystore_t *keystore_lookup_by_keyname_plus(char *keyname, char
/* Strip off EXT_NEW from autodb paths so that the key lookup works correctly */
keynamelen = strlen(keyname);
ynew_ext = keyname + keynamelen - STRLEN(EXT_NEW);
- if (0 == strcmp(ynew_ext, EXT_NEW))
+ if ((ynew_ext >= keyname) && (0 == strcmp(ynew_ext, EXT_NEW)))
{ /* This is an autodb, fixup the path */
strncpy(lcl_keyname, keyname, keynamelen - STRLEN(EXT_NEW));
lcl_keyname[keynamelen - STRLEN(EXT_NEW)] = '\0';
diff --git a/sr_unix/gtmdefinedtypestodb.m b/sr_unix/gtmdefinedtypestodb.m
index 5fa582a..5d5e7c5 100644
--- a/sr_unix/gtmdefinedtypestodb.m
+++ b/sr_unix/gtmdefinedtypestodb.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2015-2016 Fidelity National Information ;
+; Copyright (c) 2015-2017 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -12,7 +12,7 @@
; This is called by generate_help.csh to put offset, length, type and format info into the gtmhelp database
GTMDEFINEDTYPESTODB
- set $etrap="use $principal write $zstatus,! zhalt 1"
+ set $etrap="use $principal write $zstatus,! set $etrap=""zgoto 0"" zhalt 1"
do Init^GTMDefinedTypesInit
merge ^gtmtypfldindx=gtmtypfldindx
merge ^gtmstructs=gtmstructs
diff --git a/sr_unix/gtmhelp.m b/sr_unix/gtmhelp.m
index 042ba0a..bfe859e 100755
--- a/sr_unix/gtmhelp.m
+++ b/sr_unix/gtmhelp.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2002-2017 Fidelity National Information ;
+; Copyright (c) 2002-2018 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -40,7 +40,7 @@ again set:$data(COUNT) subtopic="" ; <CTRL-C> comes back to here and clears a
quit
;
parse(subtopic) ; organize space-delimited input memes into a topic hierarchy
- new (subtopic,NEW,COUNT,TOPIC)
+ new (pio,subtopic,NEW,COUNT,TOPIC)
set NEW=0
for i=1:1:$length(subtopic," ") set x=$piece(subtopic," ",i) if x'="" do
. set COUNT=COUNT+1,NEW=NEW+1
@@ -49,7 +49,7 @@ parse(subtopic) ; organize space-delimited input memes into a topic hierar
quit
;
display ; do the real work
- new (COUNT,IO,MATCH,NEW,NOTFOUND,PROMPT,TOPIC)
+ new (pio,COUNT,IO,MATCH,NEW,NOTFOUND,PROMPT,TOPIC)
if $get(TOPIC(COUNT))="?" set COUNT=COUNT-1 ; refresh choices on the same topic (leve)
write #
if $$MATCH do ; look up the topic
@@ -88,7 +88,7 @@ display ; do the real work
quit
;
print(ref,i); ; text output function
- new (ref,i,MATCH,COUNT)
+ new (pio,ref,i,MATCH,COUNT)
write !, at ref
set y=""
for set y=$order(@ref@(y)) quit:(y="s")!(y="") do
@@ -110,7 +110,7 @@ print(ref,i); ; text output function
quit
;
recursiv(ref,level) ;
- new (COUNT,TOPIC,ref,MATCH,level,PROMPT,FLAG)
+ new (pio,COUNT,TOPIC,ref,MATCH,level,PROMPT,FLAG)
set level=level+1
if ($extract(TOPIC(level))="-")&($get(FLAG)'=1) do
. set FLAG=1
@@ -141,7 +141,7 @@ recursiv(ref,level) ;
. quit
quit
qualifiers(ref) ; qualifier lister
- new (ref)
+ new (pio,ref)
if $data(@ref)>1 do
. set ref=$name(@ref@("s")),x="-"
. for set x=$order(@ref@(x)) quit:x=""!($extract(x)'="-") do:($extract(^(x))="-")
@@ -163,7 +163,7 @@ error ; Error handler called by $etrap
quit
MATCH() ; return array MATCH containing all global references that match
; the TOPIC array.
- new (TOPIC,COUNT,MATCH,PROMPT)
+ new (pio,TOPIC,COUNT,MATCH,PROMPT)
set QUALIFIERS=0
if COUNT=0 set MATCH=1 set MATCH(1)="^HELP"
if COUNT'=0 do
@@ -189,7 +189,7 @@ COLUMNS(subref,x)
if $x+12>$$WIDTH write !
quit ""
PROMPT()
- new (COUNT,TOPIC,PROMPT)
+ new (pio,COUNT,TOPIC,PROMPT)
write !!
set ref="^HELP"
for i=1:1:COUNT do
diff --git a/sr_unix/gtmhlpld.m b/sr_unix/gtmhlpld.m
index 80fcdca..3322dfc 100755
--- a/sr_unix/gtmhlpld.m
+++ b/sr_unix/gtmhlpld.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2002-2016 Fidelity National Information ;
+; Copyright (c) 2002-2017 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -49,6 +49,7 @@ err ;
use file
zshow "*"
close file
+ set $etrap="zgoto 0"
zhalt 1
;
UCASE(string)
diff --git a/sr_unix/gtminstall.sh b/sr_unix/gtminstall.sh
index e8eaa21..c1668c3 100755
--- a/sr_unix/gtminstall.sh
+++ b/sr_unix/gtminstall.sh
@@ -19,8 +19,6 @@
# NOTE: This script requires the GNU wget program to download
# distribution files that are not on the local file system.
-# CAUTION - this script is still experimental.
-
# Revision history
#
# 2011-02-15 0.01 K.S. Bhaskar - Initial version for internal use
@@ -34,6 +32,8 @@
# 2011-10-25 0.12 K.S. Bhaskar - Support option to delete .o files on shared library platforms
# 2014-08-13 0.13 K.S. Bhaskar - Add verbosity around getting latest version and tarball, if requested
# 2015-10-13 0.14 GT.M Staff - Fix a few minor bugs
+# 2017-06-05 0.15 GT.M Staff - GT.M install script should set RemoveIPC no in systemd linux distributions
+# 2017-09-19 0.16 GT.M Staff - Treat i686 as i586; Fix an interaction bug in gtminstall resulting from the above change
# Turn on debugging if set
if [ "Y" = "$gtm_debug" ] ; then set -x ; fi
@@ -79,6 +79,7 @@ dump_info()
if [ -n "$gtm_linkexec" ] ; then echo gtm_linkexec " : " $gtm_linkexec ; fi
if [ -n "$gtm_overwrite_existing" ] ; then echo gtm_overwrite_existing " : " $gtm_overwrite_existing ; fi
if [ -n "$gtm_prompt_for_group" ] ; then echo gtm_prompt_for_group " : " $gtm_prompt_for_group ; fi
+ if [ -n "$gtm_prompt_for_sys_reconfig" ] ; then echo gtm_prompt_for_sys_reconfig " : " $gtm_prompt_for_sys_reconfig ; fi
if [ -n "$gtm_sf_dirname" ] ; then echo gtm_sf_dirname " : " $gtm_sf_dirname ; fi
if [ -n "$gtm_tmp" ] ; then echo gtm_tmp " : " $gtm_tmp ; fi
if [ -n "$gtm_user" ] ; then echo gtm_user " : " $gtm_user ; fi
@@ -109,6 +110,7 @@ err_exit()
echo "$m1"
echo "--linkenv dirname - create link in dirname to gtmprofile and gtmcshrc files; incompatible with copyenv"
echo "--linkexec dirname - create link in dirname to gtm script; incompatible with copyexec"
+ echo "--noprompt-for-sys-cfg - do not prompt to adjust OS configuration files"
echo "--overwrite-existing - install into an existing directory, overwriting contents; defaults to requiring new directory"
m1="--prompt-for-group - * GT.M installation "
m1="$m1""script will prompt for group; default is yes for production releases V5.4-002 or later, no for all others"
@@ -142,7 +144,7 @@ read_yes_no()
{
read resp
response=`echo $resp | tr '[a-z]' '[A-Z]'`
- if [ "Y" = $response -o "YES" = $response ] ; then
+ if [ "Y" = "$response" -o "YES" = "$response" ] ; then
echo "yes"
else
echo "no"
@@ -157,6 +159,7 @@ if [ -z "$gtm_group_restriction" ] ; then gtm_group_restriction="N" ; fi
if [ -z "$gtm_lcase_utils" ] ; then gtm_lcase_utils="Y" ; fi
if [ -z "$gtm_overwrite_existing" ] ; then gtm_overwrite_existing="N" ; fi
if [ -z "$gtm_prompt_for_group" ] ; then gtm_prompt_for_group="N" ; fi
+if [ -z "$gtm_prompt_for_sys_reconfig" ] ; then gtm_prompt_for_sys_reconfig="Y" ; fi
if [ -z "$gtm_verbose" ] ; then gtm_verbose="N" ; fi
# Initializing internal flags
@@ -229,6 +232,7 @@ while [ $# -gt 0 ] ; do
fi
unset gtm_copyexec
shift ;;
+ --noprompt-for-sys-cfg) gtm_prompt_for_sys_reconfig="N" ; shift ;;
--overwrite-existing) gtm_overwrite_existing="Y" ; shift ;;
--prompt-for-group) gtm_prompt_for_group="Y" ; shift ;;
--ucaseonly-utils) gtm_lcase_utils="N" ; shift ;;
@@ -283,7 +287,7 @@ case ${gtm_hostos}_${gtm_arch} in
gtm_shlib_support="N" ;;
linux_i686) gtm_sf_dirname="GT.M-x86-Linux"
gtm_ftp_dirname="linux"
- gtm_flavor="i686"
+ gtm_flavor="i586"
gtm_install_flavor="x86"
gtm_shlib_support="N" ;;
linux_ia64) # no Source Forge dirname
@@ -444,23 +448,29 @@ if [ "" != "$issystemd" ] ; then
echo " $ipcline2"
echo "And issue the below command to restart systemd-logind"
echo " $ipccmd"
- echo -n "Do you wish to proceed (Y/N)? "
- answer=`read_yes_no`
- if [ "yes" != "$answer" ] ; then
- echo "Will abort installation"
- echo $ipcissue1
- echo $ipcissue2
- echo "Please add the below two lines to $logindconf"
- echo " $ipcline1"
- echo " $ipcline2"
- echo "and restart systemd-logind using the below command, for example or by rebooting the system"
- echo " $ipccmd"
- echo "and retry GT.M installation"
- exit 1
+ if [ "N" != "$gtm_prompt_for_sys_reconfig" ]; then
+ echo -n "Do you wish to proceed (Y/N)? "
+ answer=`read_yes_no`
+ if [ "yes" != "$answer" ] ; then
+ echo "Will abort installation"
+ echo $ipcissue1
+ echo $ipcissue2
+ echo "Please add the below two lines to $logindconf"
+ echo " $ipcline1"
+ echo " $ipcline2"
+ echo "and restart systemd-logind using the below command, for example or by rebooting the system"
+ echo " $ipccmd"
+ echo "and retry GT.M installation"
+ exit 1
+ fi
+ echo $ipcline1 >> $logindconf
+ echo $ipcline2 >> $logindconf
+ $ipccmd
+ else
+ echo "==============================================================="
+ echo "Installation directed to not change systemd configuration files"
+ echo "==============================================================="
fi
- echo $ipcline1 >> $logindconf
- echo $ipcline2 >> $logindconf
- $ipccmd
fi
fi
if [ "Y" = "$gtm_verbose" ] ; then echo Finished checking options and assigning defaults ; dump_info ; fi
diff --git a/sr_unix/gtmio.h b/sr_unix/gtmio.h
index 5743622..f72ced7 100644
--- a/sr_unix/gtmio.h
+++ b/sr_unix/gtmio.h
@@ -56,6 +56,7 @@
# include "min_max.h"
# include "wbox_test_init.h"
# include "get_fs_block_size.h"
+# include "min_max.h"
#endif
#if defined(__linux__) || defined(__CYGWIN__)
@@ -672,31 +673,6 @@ MBSTART { \
RC = -1; /* Something kept us from writing what we wanted */ \
} MBEND
-#define DOLLAR_DEVICE_SET(DEVPTR,STATUS) \
-MBSTART { \
- len = SIZEOF(ONE_COMMA) - 1; \
- memcpy(DEVPTR->dollar.device, ONE_COMMA, len); \
- errptr = (char *)STRERROR(STATUS); \
- /* make sure there is room for the 1, and the null at the end */ \
- errlen = MIN(STRLEN(errptr), SIZEOF(DEVPTR->dollar.device) - SIZEOF(ONE_COMMA)); \
- memcpy(&DEVPTR->dollar.device[len], errptr, errlen); \
- DEVPTR->dollar.device[len + errlen] = '\0'; \
-} MBEND
-
-#define DOLLAR_DEVICE_WRITE(DEVPTR,STATUS) \
-MBSTART { \
- int len; \
- int errlen; \
- char *errptr; \
- /* save error in $device */ \
- if (EAGAIN == STATUS) \
- { \
- len = SIZEOF(ONE_COMMA_UNAVAILABLE); \
- memcpy(DEVPTR->dollar.device, ONE_COMMA_UNAVAILABLE, len); \
- } else \
- DOLLAR_DEVICE_SET(DEVPTR,STATUS); \
-} MBEND
-
#define DOWRITERL_RM(RM, FBUFF, FBUFF_LEN, RLEN) \
MBSTART { \
if (0 == RM->fsblock_buffer_size) \
diff --git a/sr_unix/gtmrecv.c b/sr_unix/gtmrecv.c
index 21d1bc7..a4fe8e0 100644
--- a/sr_unix/gtmrecv.c
+++ b/sr_unix/gtmrecv.c
@@ -77,7 +77,7 @@ GBLREF boolean_t is_rcvr_server;
GBLREF int gtmrecv_srv_count;
GBLREF uint4 log_interval;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF IN_PARMS *cli_lex_in_ptr;
GBLREF uint4 mutex_per_process_init_pid;
LITREF gtmImageName gtmImageNames[];
@@ -127,25 +127,26 @@ int gtmrecv(void)
gtmImageNames[image_type].imageNameLen, gtmImageNames[image_type].imageName);
if (gtmrecv_options.start || gtmrecv_options.shut_down)
{
- jnlpool_init(GTMRECEIVE, (boolean_t)FALSE, (boolean_t *)NULL);
- assert(NULL != jnlpool.repl_inst_filehdr);
- assert(NULL != jnlpool.jnlpool_ctl);
+ jnlpool_init(GTMRECEIVE, (boolean_t)FALSE, (boolean_t *)NULL, NULL);
+ assert(NULL != jnlpool);
+ assert(NULL != jnlpool->repl_inst_filehdr);
+ assert(NULL != jnlpool->jnlpool_ctl);
/* If -UPDATERESYNC was specified without an empty instance file, error out. The only exception is if
* the receiver is a root primary (updates enabled) supplementary instance and the source is non-supplementary.
* In this case, since the non-supplementary stream is being ADDED to an existing instance file, there is no
* requirement that the current instance file be empty. In fact, in that case we expect it to be non-empty
* as one history record would have been written by the source server that brought up the root primary instance.
*/
- if (gtmrecv_options.updateresync && jnlpool.repl_inst_filehdr->num_histinfo
- && !(jnlpool.repl_inst_filehdr->is_supplementary && !jnlpool.jnlpool_ctl->upd_disabled))
+ if (gtmrecv_options.updateresync && jnlpool->repl_inst_filehdr->num_histinfo
+ && !(jnlpool->repl_inst_filehdr->is_supplementary && !jnlpool->jnlpool_ctl->upd_disabled))
/* replication instance file is NOT empty. Issue error */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_UPDSYNC2MTINS);
if (gtmrecv_options.noresync)
{ /* If -NORESYNC was specified on a non-supplementary receiver instance, issue an error */
- if (!jnlpool.repl_inst_filehdr->is_supplementary)
+ if (!jnlpool->repl_inst_filehdr->is_supplementary)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NORESYNCSUPPLONLY);
/* If -NORESYNC was specified on a receiver instance where updates are disabled, issue an error */
- if (jnlpool.jnlpool_ctl->upd_disabled)
+ if (jnlpool->jnlpool_ctl->upd_disabled)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NORESYNCUPDATERONLY);
}
}
@@ -264,7 +265,7 @@ int gtmrecv(void)
assert(4 == SIZEOF(updresync_inst_hdr.num_histinfo)); /* so need to use GTM_BYTESWAP_32 */
updresync_inst_hdr.num_histinfo = GTM_BYTESWAP_32(updresync_inst_hdr.num_histinfo);
}
- if (jnlpool.repl_inst_filehdr->is_supplementary && !updresync_inst_hdr.is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary && !updresync_inst_hdr.is_supplementary)
{ /* Do one check for non-supplementary -> supplementary connection using -updateresync.
* This is because this use of -updateresync is different than the other connection usages.
*/
@@ -294,7 +295,7 @@ int gtmrecv(void)
{ /* The input instance file is supplementary. Allow it only if the current instance is
* supplementary and is not a root primary.
*/
- if (!jnlpool.repl_inst_filehdr->is_supplementary)
+ if (!jnlpool->repl_inst_filehdr->is_supplementary)
{
rel_sem(RECV, RECV_SERV_OPTIONS_SEM);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_UPDSYNCINSTFILE, 0, ERR_TEXT, 2,
@@ -302,16 +303,16 @@ int gtmrecv(void)
" to match current instance"));
assert(FALSE);
}
- if (!jnlpool.jnlpool_ctl->upd_disabled)
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{
rel_sem(RECV, RECV_SERV_OPTIONS_SEM);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_UPDSYNCINSTFILE, 0, ERR_TEXT, 2,
LEN_AND_LIT("Input instance file must be non-supplementary"
" as current instance is a supplementary root primary"));
}
- } else if (jnlpool.repl_inst_filehdr->is_supplementary)
+ } else if (jnlpool->repl_inst_filehdr->is_supplementary)
{
- if (jnlpool.jnlpool_ctl->upd_disabled)
+ if (jnlpool->jnlpool_ctl->upd_disabled)
{ /* The input instance file is non-supplementary. Allow it only if the current
* instance is non-supplementary or if it is a supplementary root primary.
*/
@@ -326,7 +327,7 @@ int gtmrecv(void)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_INITORRESUME);
}
}
- if (!jnlpool.repl_inst_filehdr->is_supplementary || jnlpool.jnlpool_ctl->upd_disabled)
+ if (!jnlpool->repl_inst_filehdr->is_supplementary || jnlpool->jnlpool_ctl->upd_disabled)
{
if (gtmrecv_options.resume_specified)
{
@@ -463,25 +464,25 @@ int gtmrecv(void)
RTS_ERROR_LITERAL("Receiver server error in setsid"), errno);
gtm_event_log_init();
gtmrecv_local->recv_serv_pid = process_id;
- assert(NULL != jnlpool.jnlpool_ctl);
- jnlpool.jnlpool_ctl->gtmrecv_pid = process_id;
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl));
+ jnlpool->jnlpool_ctl->gtmrecv_pid = process_id;
gtmrecv_local->listen_port = gtmrecv_options.listen_port;
/* Log receiver server startup command line first */
repl_log(gtmrecv_log_fp, TRUE, TRUE, "%s %s\n", cli_lex_in_ptr->argv[0], cli_lex_in_ptr->in_str);
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
SPRINTF(tmpmsg, "GTM Replication Receiver Server with Pid [%d] started on replication instance [%s]",
- process_id, jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ process_id, jnlpool->repl_inst_filehdr->inst_info.this_instname);
sgtm_putmsg(print_msg, VARLSTCNT(4) ERR_REPLINFO, 2, LEN_AND_STR(tmpmsg));
repl_log(gtmrecv_log_fp, TRUE, TRUE, print_msg);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Attached to existing jnlpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->jnlpool_shmid, jnlpool.repl_inst_filehdr->jnlpool_semid);
+ jnlpool->repl_inst_filehdr->jnlpool_shmid, jnlpool->repl_inst_filehdr->jnlpool_semid);
gtm_event_log(GTM_EVENT_LOG_ARGC, "MUPIP", "REPLINFO", print_msg);
if (recvpool_ctl->fresh_start)
{
QWASSIGNDW(recvpool_ctl->jnl_seqno, 0); /* Update process will initialize this to a non-zero value */
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Created recvpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->recvpool_shmid, jnlpool.repl_inst_filehdr->recvpool_semid);
+ jnlpool->repl_inst_filehdr->recvpool_shmid, jnlpool->repl_inst_filehdr->recvpool_semid);
} else
{ /* Coming up after a crash, reset Update process read. This is done by setting gtmrecv_local->restart.
* This will trigger update process to reset recvpool_ctl->jnl_seqno too.
@@ -493,7 +494,7 @@ int gtmrecv(void)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_cond_signal"), CALLFROM, status, 0);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Attached to existing recvpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->recvpool_shmid, jnlpool.repl_inst_filehdr->recvpool_semid);
+ jnlpool->repl_inst_filehdr->recvpool_shmid, jnlpool->repl_inst_filehdr->recvpool_semid);
}
save_upd_status = upd_proc_local->upd_proc_shutdown;
for (upd_start_attempts = 0;
diff --git a/sr_unix/gtmrecv.h b/sr_unix/gtmrecv.h
old mode 100755
new mode 100644
index c3551f4..75c5c38
--- a/sr_unix/gtmrecv.h
+++ b/sr_unix/gtmrecv.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2015 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -155,26 +155,25 @@ typedef struct
#define INSERT_STRM_HISTINFO_FALSE FALSE
#define INSERT_STRM_HISTINFO_TRUE TRUE
-#define GTMRECV_CLEAR_CACHED_HISTINFO(RECVPOOL_CTL, JNLPOOL, JNLPOOL_CTL, INSERT_STRM_HISTINFO) \
-{ \
- memset(&RECVPOOL_CTL->last_rcvd_histinfo, 0, SIZEOF(RECVPOOL_CTL->last_rcvd_histinfo)); \
- memset(&RECVPOOL_CTL->last_valid_histinfo, 0, SIZEOF(RECVPOOL_CTL->last_valid_histinfo)); \
- assert(NULL != JNLPOOL.repl_inst_filehdr); \
- assert(NULL != JNLPOOL.jnlpool_ctl); \
- assert(JNLPOOL_CTL == JNLPOOL.jnlpool_ctl); \
- if (JNLPOOL.repl_inst_filehdr->is_supplementary && JNLPOOL_CTL->upd_disabled) \
- { /* The below fields are used only in case of a supplementary instance where updates are disabled. \
- * So avoid initializing them in any other case. \
- */ \
- memset(&RECVPOOL_CTL->last_rcvd_strm_histinfo[0], 0, SIZEOF(RECVPOOL_CTL->last_rcvd_strm_histinfo)); \
- memset(&RECVPOOL_CTL->last_valid_strm_histinfo[0], 0, SIZEOF(RECVPOOL_CTL->last_valid_strm_histinfo)); \
- memset(&RECVPOOL_CTL->is_valid_strm_histinfo[0], 0, SIZEOF(RECVPOOL_CTL->is_valid_strm_histinfo)); \
- RECVPOOL_CTL->max_strm_histinfo = 0; \
- assert((0 == RECVPOOL_CTL->jnl_seqno) \
- || (0 < RECVPOOL_CTL->jnl_seqno) && (RECVPOOL_CTL->jnl_seqno >= JNLPOOL_CTL->jnl_seqno)); \
- assert(0 < JNLPOOL_CTL->jnl_seqno); \
- RECVPOOL_CTL->insert_strm_histinfo = INSERT_STRM_HISTINFO; \
- } \
+#define GTMRECV_CLEAR_CACHED_HISTINFO(RECVPOOL_CTL, JNLPOOL, INSERT_STRM_HISTINFO) \
+{ \
+ memset(&RECVPOOL_CTL->last_rcvd_histinfo, 0, SIZEOF(RECVPOOL_CTL->last_rcvd_histinfo)); \
+ memset(&RECVPOOL_CTL->last_valid_histinfo, 0, SIZEOF(RECVPOOL_CTL->last_valid_histinfo)); \
+ assert((NULL != JNLPOOL) && (NULL != JNLPOOL->repl_inst_filehdr)); \
+ assert(NULL != JNLPOOL->jnlpool_ctl); \
+ if (JNLPOOL->repl_inst_filehdr->is_supplementary && JNLPOOL->jnlpool_ctl->upd_disabled) \
+ { /* The below fields are used only in case of a supplementary instance where updates are disabled. \
+ * So avoid initializing them in any other case. \
+ */ \
+ memset(&RECVPOOL_CTL->last_rcvd_strm_histinfo[0], 0, SIZEOF(RECVPOOL_CTL->last_rcvd_strm_histinfo)); \
+ memset(&RECVPOOL_CTL->last_valid_strm_histinfo[0], 0, SIZEOF(RECVPOOL_CTL->last_valid_strm_histinfo)); \
+ memset(&RECVPOOL_CTL->is_valid_strm_histinfo[0], 0, SIZEOF(RECVPOOL_CTL->is_valid_strm_histinfo)); \
+ RECVPOOL_CTL->max_strm_histinfo = 0; \
+ assert((0 == RECVPOOL_CTL->jnl_seqno) \
+ || (0 < RECVPOOL_CTL->jnl_seqno) && (RECVPOOL_CTL->jnl_seqno >= JNLPOOL->jnlpool_ctl->jnl_seqno)); \
+ assert(0 < JNLPOOL->jnlpool_ctl->jnl_seqno); \
+ RECVPOOL_CTL->insert_strm_histinfo = INSERT_STRM_HISTINFO; \
+ } \
}
/*
diff --git a/sr_unix/gtmrecv_end.c b/sr_unix/gtmrecv_end.c
index 3fe2796..ca27ec2 100644
--- a/sr_unix/gtmrecv_end.c
+++ b/sr_unix/gtmrecv_end.c
@@ -63,8 +63,8 @@ GBLREF qw_num repl_recv_data_recvd;
GBLREF qw_num repl_recv_data_processed;
GBLREF repl_msg_ptr_t gtmrecv_msgp;
GBLREF uchar_ptr_t repl_filter_buff;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF int pool_init;
error_def(ERR_SYSCALL);
@@ -142,17 +142,17 @@ int gtmrecv_end1(boolean_t auto_shutdown)
repl_log(stderr, TRUE, TRUE, "Error detaching from Receive Pool : %s\n", STRERROR(save_errno));
}
recvpool.recvpool_ctl = NULL;
- assert((NULL != jnlpool_ctl) && (jnlpool_ctl == jnlpool.jnlpool_ctl));
- if (NULL != jnlpool.jnlpool_ctl)
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl));
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{ /* Reset fields that might have been initialized by the receiver server after connecting to the primary.
* It is ok not to hold the journal pool lock while updating jnlpool_ctl fields since this will be the
* only process updating those fields.
*/
- jnlpool.jnlpool_ctl->primary_instname[0] = '\0';
- jnlpool.jnlpool_ctl->gtmrecv_pid = 0;
- jnlpool_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ jnlpool->jnlpool_ctl->primary_instname[0] = '\0';
+ jnlpool->jnlpool_ctl->gtmrecv_pid = 0;
+ jnlpool_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
- jnlpool_strm_seqno[idx] = jnlpool.jnlpool_ctl->strm_seqno[idx];
+ jnlpool_strm_seqno[idx] = jnlpool->jnlpool_ctl->strm_seqno[idx];
/* Also take this opportunity to detach from the journal pool except in the auto_shutdown case. This is because
* the fields "jnlpool_ctl->repl_inst_filehdr->recvpool_semid" and "jnlpool_ctl->repl_inst_filehdr->recvpool_shmid"
* need to be reset by "gtmrecv_jnlpool_reset" (called from "gtmrecv_shutdown") which is invoked a little later.
diff --git a/sr_unix/gtmrecv_fetchresync.c b/sr_unix/gtmrecv_fetchresync.c
index 8ace971..cbb85dc 100755
--- a/sr_unix/gtmrecv_fetchresync.c
+++ b/sr_unix/gtmrecv_fetchresync.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -89,7 +90,7 @@ GBLREF int gtmrecv_listen_sock_fd, gtmrecv_sock_fd;
GBLREF seq_num seq_num_zero;
GBLREF jnl_gbls_t jgbl;
GBLREF int repl_max_send_buffsize, repl_max_recv_buffsize;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t repl_connection_reset;
GBLREF mur_gbls_t murgbl;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
@@ -223,7 +224,7 @@ int gtmrecv_fetchresync(int port, seq_num *resync_seqno, seq_num max_reg_seqno)
assert(resync_msg.resync_seqno);
resync_msg.proto_ver = REPL_PROTO_VER_THIS;
resync_msg.node_endianness = NODE_ENDIANNESS;
- resync_msg.is_supplementary = jnlpool.repl_inst_filehdr->is_supplementary;
+ resync_msg.is_supplementary = jnlpool->repl_inst_filehdr->is_supplementary;
remote_side->endianness_known = FALSE;
remote_side->cross_endian = FALSE;
gtmrecv_repl_send((repl_msg_ptr_t)&resync_msg, REPL_FETCH_RESYNC, MIN_REPL_MSGLEN,
@@ -270,22 +271,22 @@ int gtmrecv_fetchresync(int port, seq_num *resync_seqno, seq_num max_reg_seqno)
switch(msg.type)
{
case REPL_OLD_NEED_INSTANCE_INFO:
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
old_need_instinfo_msg = (repl_old_needinst_msg_ptr_t)&msg;
repl_log(stdout, TRUE, TRUE, "Received REPL_OLD_NEED_INSTANCE_INFO message from primary "
"instance [%s]\n", old_need_instinfo_msg->instname);
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{ /* Issue REPL2OLD error because this is a supplementary instance and remote side runs
* on a GT.M version that does not understand the supplementary protocol */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPL2OLD, 4,
LEN_AND_STR(old_need_instinfo_msg->instname),
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname));
}
remote_side->proto_ver = old_need_instinfo_msg->proto_ver;
assert(REPL_PROTO_VER_MULTISITE <= remote_side->proto_ver);
assert(REPL_PROTO_VER_SUPPLEMENTARY > remote_side->proto_ver);
memset(&old_instinfo_msg, 0, SIZEOF(old_instinfo_msg));
- memcpy(old_instinfo_msg.instname, jnlpool.repl_inst_filehdr->inst_info.this_instname,
+ memcpy(old_instinfo_msg.instname, jnlpool->repl_inst_filehdr->inst_info.this_instname,
MAX_INSTNAME_LEN - 1);
old_instinfo_msg.was_rootprimary = (unsigned char)repl_inst_was_rootprimary();
murgbl.was_rootprimary = old_instinfo_msg.was_rootprimary;
@@ -337,7 +338,7 @@ int gtmrecv_fetchresync(int port, seq_num *resync_seqno, seq_num max_reg_seqno)
repl_log(stdout, TRUE, TRUE, "Received REPL_NEED_HISTINFO message for "
"Seqno %llu [0x%llx]\n", histinfo_seqno, histinfo_seqno);
assert(REPL_PROTO_VER_UNINITIALIZED != remote_side->proto_ver);
- assert(NULL != jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg));
/* repl_inst_wrapper_triple_find_seqno needs the ftok lock on the replication instance file. But,
* But, ROLLBACK already holds JNLPOOL and RECVPOOL access semaphores and so asking for ftok lock
* can result in potential deadlocks. Since we hold the JNLPOOL and RECVPOOL semaphores, no one
@@ -379,9 +380,9 @@ int gtmrecv_fetchresync(int port, seq_num *resync_seqno, seq_num max_reg_seqno)
repl_log(stdout, TRUE, TRUE, "Received REPL_RESYNC_SEQNO message\n");
if (REPL_PROTO_VER_UNINITIALIZED == remote_side->proto_ver)
{ /* Issue REPL2OLD error because primary is dual-site */
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPL2OLD, 4, LEN_AND_STR(UNKNOWN_INSTNAME),
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname));
}
assert(REPL_PROTO_VER_MULTISITE <= remote_side->proto_ver);
/* The following fields dont need to be initialized since they are needed (for internal filter
@@ -466,6 +467,6 @@ int gtmrecv_fetchresync(int port, seq_num *resync_seqno, seq_num max_reg_seqno)
* only 100 + 1. So the unified jnl_seqno 101 is a lot less than the strm_seqno of 1,000,001. This is a valid scenario
* and there is nothing in the code that otherwise requires this ordering for their correct operation.
*/
- assert((*resync_seqno <= max_reg_seqno) || jnlpool.repl_inst_filehdr->is_supplementary);
+ assert((*resync_seqno <= max_reg_seqno) || jnlpool->repl_inst_filehdr->is_supplementary);
return SS_NORMAL;
}
diff --git a/sr_unix/gtmrecv_poll_actions.c b/sr_unix/gtmrecv_poll_actions.c
old mode 100755
new mode 100644
index 72319e4..b33d6b1
--- a/sr_unix/gtmrecv_poll_actions.c
+++ b/sr_unix/gtmrecv_poll_actions.c
@@ -64,9 +64,7 @@ GBLREF uint4 log_interval;
GBLREF volatile time_t gtmrecv_now;
GBLREF boolean_t gtmrecv_send_cmp2uncmp;
GBLREF repl_conn_info_t *remote_side;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_RECVPOOLSETUP);
error_def(ERR_REPLCOMM);
@@ -492,7 +490,7 @@ int gtmrecv_poll_actions1(int *pending_data_len, int *buff_unprocessed, unsigned
/* Reset last_rcvd_histinfo, last_valid_histinfo etc. as they reflect context from unprocessed data
* in the receive pool and those are no longer valid because we have drained the receive pool.
*/
- GTMRECV_CLEAR_CACHED_HISTINFO(recvpool.recvpool_ctl, jnlpool, jnlpool_ctl, INSERT_STRM_HISTINFO_FALSE);
+ GTMRECV_CLEAR_CACHED_HISTINFO(recvpool.recvpool_ctl, jnlpool, INSERT_STRM_HISTINFO_FALSE);
if (UPDPROC_START == upd_proc_local->start_upd)
{
/* Attempt starting the update process */
@@ -537,10 +535,10 @@ int gtmrecv_poll_actions1(int *pending_data_len, int *buff_unprocessed, unsigned
gtmrecv_wait_for_jnl_seqno = TRUE;/* set this to TRUE to break out and go back to a fresh "do_main_loop" */
if (onln_rlbk_flg_set)
{
- assert(NULL != jnlpool_ctl);
+ assert(jnlpool && (NULL != jnlpool->jnlpool_ctl));
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Closing connection due to ONLINE ROLLBACK\n");
repl_log(gtmrecv_log_fp, TRUE, TRUE, "REPL INFO - Current Jnlpool Seqno : %llu\n",
- jnlpool_ctl->jnl_seqno);
+ jnlpool->jnlpool_ctl->jnl_seqno);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "REPL INFO - Current Receive Pool Seqno : %llu\n",
recvpool_ctl->jnl_seqno);
repl_close(>mrecv_sock_fd);
@@ -553,9 +551,9 @@ int gtmrecv_poll_actions1(int *pending_data_len, int *buff_unprocessed, unsigned
* just syncing the journal pool cycles as the databases are not opened. But, to be safe, grab
* the lock and sync the cycles.
*/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
SYNC_ONLN_RLBK_CYCLES;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
return_status = STOP_POLL;
recvpool_ctl->jnl_seqno = 0;
} else
diff --git a/sr_unix/gtmrecv_process.c b/sr_unix/gtmrecv_process.c
index 371c912..cfe68de 100644
--- a/sr_unix/gtmrecv_process.c
+++ b/sr_unix/gtmrecv_process.c
@@ -187,8 +187,7 @@ GBLREF int repl_max_send_buffsize, repl_max_recv_buffsize;
GBLREF seq_num lastlog_seqno;
GBLREF uint4 log_interval;
GBLREF qw_num trans_recvd_cnt, last_log_tr_recvd_cnt;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
GBLREF mur_opt_struct mur_options;
GBLREF mur_gbls_t murgbl;
@@ -357,13 +356,13 @@ static boolean_t repl_cmp_solve_timer_set;
{ \
sgmnt_addrs *repl_csa; \
\
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs; \
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs; \
assert(repl_csa->now_crit); \
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl); \
- if (repl_csa->onln_rlbk_cycle != jnlpool_ctl->onln_rlbk_cycle) \
+ assert(NULL != jnlpool->jnlpool_ctl); \
+ if (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle) \
{ \
SYNC_ONLN_RLBK_CYCLES; \
- rel_lock(jnlpool.jnlpool_dummy_reg); \
+ rel_lock(jnlpool->jnlpool_dummy_reg); \
gtmrecv_onln_rlbk_clnup(); \
if (repl_connection_reset || gtmrecv_wait_for_jnl_seqno) \
return; \
@@ -703,7 +702,7 @@ STATICFNDEF int gtmrecv_est_conn(void)
*/
assert(remote_side == >mrecv_local->remote_side);
remote_side->proto_ver = REPL_PROTO_VER_UNINITIALIZED;
- jnlpool_ctl->primary_instname[0] = '\0';
+ jnlpool->jnlpool_ctl->primary_instname[0] = '\0';
while (TRUE)
{
while (TRUE)
@@ -975,8 +974,8 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
SETUP_THREADGBL_ACCESS;
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
- grab_lock_needed = is_rcvr_srvr || ((NULL != jnlpool_ctl) && !repl_csa->hold_onto_crit);
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
+ grab_lock_needed = is_rcvr_srvr || (jnlpool && (NULL != jnlpool->jnlpool_ctl) && !repl_csa->hold_onto_crit);
remote_side_is_supplementary = need_instinfo_msg->is_supplementary;
remote_side->is_supplementary = remote_side_is_supplementary;
assert(remote_side->endianness_known); /* ensure remote_side->cross_endian is reliable */
@@ -1005,7 +1004,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
log_fp = !is_rcvr_srvr ? stdout : gtmrecv_log_fp;
repl_log(log_fp, TRUE, TRUE, "Received REPL_NEED_INSTINFO message from primary instance [%s]\n",
need_instinfo_msg->instname);
- inst_hdr = jnlpool.repl_inst_filehdr;
+ inst_hdr = jnlpool->repl_inst_filehdr;
assert(NULL != inst_hdr);
/* The fact that we came here (REPL_NEED_INSTINFO message) implies the source server understands the
* supplementary protocol. In that case, make sure -UPDATERESYNC if specified at receiver server startup
@@ -1024,15 +1023,15 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
*/
assert(inst_hdr->lms_group_info.created_time
|| need_instinfo_msg->lms_group_info.created_time || !need_instinfo_msg->is_rootprimary);
- assert((is_rcvr_srvr && (NULL != jnlpool_ctl)) || (!is_rcvr_srvr && (NULL == jnlpool_ctl)) || jgbl.onlnrlbk
- || (jgbl.mur_rollback && INST_FREEZE_ON_ERROR_POLICY));
+ assert((is_rcvr_srvr && (NULL != jnlpool->jnlpool_ctl)) || (!is_rcvr_srvr && (NULL == jnlpool->jnlpool_ctl))
+ || jgbl.onlnrlbk || (jgbl.mur_rollback && INST_FREEZE_ON_ERROR_POLICY));
/* If this instance is supplementary and the journal pool exists (to indicate whether updates are enabled or not
* which in turn helps us know whether this is an originating instance or not) do some additional checks.
*/
if (is_rcvr_srvr && inst_hdr->is_supplementary)
{
- assert(NULL != jnlpool_ctl);
- if (!jnlpool_ctl->upd_disabled)
+ assert(NULL != jnlpool->jnlpool_ctl);
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{ /* this supplementary instance was started with -UPDOK. Issue error if source is also supplementary */
if (need_instinfo_msg->is_supplementary)
{
@@ -1056,7 +1055,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
* supplementary instance and have the LMS group info filled in. Exception is if this a FETCHRESYNC
* ROLLBACK run on an instance which was once primary (not necessarily a supplementary one).
*/
- assert((NULL == jnlpool_ctl) || jnlpool_ctl->upd_disabled
+ assert((NULL == jnlpool->jnlpool_ctl) || jnlpool->jnlpool_ctl->upd_disabled
|| inst_hdr->is_supplementary && IS_REPL_INST_UUID_NON_NULL(inst_hdr->lms_group_info)
|| jgbl.onlnrlbk || (jgbl.mur_rollback && INST_FREEZE_ON_ERROR_POLICY));
/* Check if primary and secondary are in same LMS group. Otherwise issue error. An exception is if the group info has
@@ -1128,14 +1127,14 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
*/
if (grab_lock_needed)
{
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
if (is_rcvr_srvr)
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
}
inst_hdr->lms_group_info = need_instinfo_msg->lms_group_info;
repl_inst_flush_filehdr();
if (grab_lock_needed)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
/* If this instance is supplementary and remote side is not, then find out which stream # the non-supplementary source
* corresponds to. Issue error if the source LMS group is unknown in the instance file. If this is non-supplementary,
@@ -1154,7 +1153,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
*/
if (grab_lock_needed)
{
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
if (is_rcvr_srvr)
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
}
@@ -1175,7 +1174,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
}
if (strm_info == strm_top)
{ /* -REUSE specified an instance name that is not present in any of the 15 strm_group slots */
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REUSEINSTNAME, 0, ERR_TEXT, 2,
LEN_AND_LIT("Instance name in REUSE does not match any of 15 slots in instance file"));
}
@@ -1214,14 +1213,14 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
else
{
if (grab_lock_needed)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_UPDSYNCINSTFILE, 0, ERR_TEXT, 2,
LEN_AND_LIT("No empty slot found. Specify REUSE to choose one for reuse"));
}
} else
{
if (grab_lock_needed)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_INSUNKNOWN, 4,
LEN_AND_STR((char *)inst_hdr->inst_info.this_instname),
LEN_AND_STR((char *)need_instinfo_msg->instname));
@@ -1244,13 +1243,13 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
} else if ((gtmrecv_options.resume_specified) && (gtmrecv_options.resume_strm_num != strm_index))
{ /* If -RESUME was specified, then the slot it matched must be same as slot found without its use */
assert(is_rcvr_srvr);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_RESUMESTRMNUM, 0, ERR_TEXT, 2, LEN_AND_LIT("Source side LMS "
"group is found in instance file but RESUME specifies different stream number"));
} else if (reuse_slot && (reuse_slot != strm_index))
{ /* If -REUSE was specified, then the slot it matched must be same as slot found without its use */
assert(is_rcvr_srvr);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REUSEINSTNAME, 0, ERR_TEXT, 2, LEN_AND_LIT("Source side LMS "
"group is found in instance file but REUSE specifies different instance name"));
}
@@ -1266,7 +1265,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
* Since mixing of multiple stream journal records in the same receive pool confuses the
* update process, issue error. Note: This limitation "might" be removed in the future.
*/
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_RCVRMANYSTRMS, 2,
strm_index, recvpool.gtmrecv_local->strm_index);
}
@@ -1275,7 +1274,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
"Determined non-supplementary source Stream # = %d\n", strm_index);
assert(IS_REPL_INST_UUID_NON_NULL(need_instinfo_msg->lms_group_info));
recvpool.gtmrecv_local->remote_lms_group = need_instinfo_msg->lms_group_info;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
} else
repl_log(stdout, TRUE, TRUE, "Determined non-supplementary source Stream # = %d\n", strm_index);
/* Compute non-zero strm_jnl_seqno to send across in the REPL_INSTINFO message.
@@ -1313,7 +1312,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
strm_jnl_seqno = recvpool.gtmrecv_local->updresync_jnl_seqno;
else
{
- strm_jnl_seqno = jnlpool_ctl->strm_seqno[gtmrecv_options.resume_strm_num];
+ strm_jnl_seqno = jnlpool->jnlpool_ctl->strm_seqno[gtmrecv_options.resume_strm_num];
/* It is possible for the strm_seqno to be 0. This implies the stream has
* had no updates. In that case, ideally this value should have been 1.
* But because we want to differentiate a stream that has had updates from
@@ -1325,21 +1324,21 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
strm_jnl_seqno = 1;
}
} else
- strm_jnl_seqno = jnlpool_ctl->strm_seqno[strm_index];
+ strm_jnl_seqno = jnlpool->jnlpool_ctl->strm_seqno[strm_index];
assert(0 == GET_STRM_INDEX(strm_jnl_seqno));
}
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Sending Stream Seqno = "INT8_FMT" "INT8_FMTX"\n",
strm_jnl_seqno, strm_jnl_seqno);
} else
{
- if (jnlpool.repl_inst_filehdr->crash)
+ if (jnlpool->repl_inst_filehdr->crash)
strm_jnl_seqno = mur_get_max_strm_reg_seqno(strm_index);
else
{
- assert((NULL == jnlpool_ctl) || jgbl.onlnrlbk);
- assert((NULL == jnlpool_ctl)
- || (jnlpool_ctl->strm_seqno[strm_index] == inst_hdr->strm_seqno[strm_index]));
- strm_jnl_seqno = jnlpool.repl_inst_filehdr->strm_seqno[strm_index];
+ assert((NULL == jnlpool->jnlpool_ctl) || jgbl.onlnrlbk);
+ assert((NULL == jnlpool->jnlpool_ctl)
+ || (jnlpool->jnlpool_ctl->strm_seqno[strm_index] == inst_hdr->strm_seqno[strm_index]));
+ strm_jnl_seqno = jnlpool->repl_inst_filehdr->strm_seqno[strm_index];
}
repl_log(stdout, TRUE, TRUE, "Sending Stream Seqno = "INT8_FMT" "INT8_FMTX"\n",
strm_jnl_seqno, strm_jnl_seqno);
@@ -1370,13 +1369,13 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
memcpy(instinfo_msg.instname, inst_hdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
if (grab_lock_needed)
{
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
if (is_rcvr_srvr)
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
}
instinfo_msg.was_rootprimary = (unsigned char)repl_inst_was_rootprimary();
if (grab_lock_needed)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (!is_rcvr_srvr)
murgbl.was_rootprimary = instinfo_msg.was_rootprimary;
instinfo_msg.strm_jnl_seqno = strm_jnl_seqno;
@@ -1404,7 +1403,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
if ((!inst_hdr->is_supplementary || remote_side_is_supplementary)
&& !need_instinfo_msg->is_rootprimary
&& (instinfo_msg.was_rootprimary
- || (is_rcvr_srvr && jnlpool_ctl->max_zqgblmod_seqno)))
+ || (is_rcvr_srvr && jnlpool->jnlpool_ctl->max_zqgblmod_seqno)))
{
if (is_rcvr_srvr)
{
@@ -1417,7 +1416,7 @@ void gtmrecv_check_and_send_instinfo(repl_needinst_msg_ptr_t need_instinfo_msg,
assert(FALSE);
}
if (is_rcvr_srvr)
- memcpy(jnlpool_ctl->primary_instname, need_instinfo_msg->instname, MAX_INSTNAME_LEN - 1);
+ memcpy(jnlpool->jnlpool_ctl->primary_instname, need_instinfo_msg->instname, MAX_INSTNAME_LEN - 1);
}
STATICFNDEF int gtmrecv_start_onln_rlbk(void)
@@ -1474,8 +1473,8 @@ void gtmrecv_onln_rlbk_clnup(void)
boolean_t connection_already_reset;
assert(NULL != gtmrecv_log_fp);
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
- repl_log(gtmrecv_log_fp, TRUE, TRUE, "---> ONLINE ROLLBACK. Current Jnlpool Seqno : "INT8_FMT"\n", jnlpool_ctl->jnl_seqno);
+ repl_log(gtmrecv_log_fp, TRUE, TRUE, "---> ONLINE ROLLBACK. Current Jnlpool Seqno : "INT8_FMT"\n",
+ jnlpool->jnlpool_ctl->jnl_seqno);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Waiting for update process to set recvpool_ctl->onln_rlbk_flag\n");
connection_already_reset = repl_connection_reset;
assert(!gtmrecv_wait_for_jnl_seqno);
@@ -1511,8 +1510,8 @@ void gtmrecv_send_histinfo(repl_histinfo *cur_histinfo)
/* If sending history from a supplementary to a non-supplementary version, assert that the history record
* particularly the "strm_seqno" is 0 as a non-zero value is not understood by a non-supplementary instance.
*/
- assert((NULL == this_side) || (this_side->is_supplementary == jnlpool.repl_inst_filehdr->is_supplementary));
- assert(!jnlpool.repl_inst_filehdr->is_supplementary || remote_side->is_supplementary || !cur_histinfo->strm_seqno);
+ assert((NULL == this_side) || (this_side->is_supplementary == jnlpool->repl_inst_filehdr->is_supplementary));
+ assert(!jnlpool->repl_inst_filehdr->is_supplementary || remote_side->is_supplementary || !cur_histinfo->strm_seqno);
remote_proto_ver = remote_side->proto_ver;
assert(REPL_PROTO_VER_MULTISITE <= remote_proto_ver);
assert(remote_side->endianness_known); /* only then is remote_side->cross_endian reliable */
@@ -1966,7 +1965,7 @@ STATICFNDEF void process_tr_buff(int msg_type)
* recvpool.recvpool_ctl->last_rcvd_strm_histinfo[] are unused and hence no need to reset them.
*/
assert(!remote_side->is_supplementary); /* assert that we are not a propagating primary supplementary */
- assert(jnlpool.repl_inst_filehdr->is_supplementary && !jnlpool_ctl->upd_disabled);
+ assert(jnlpool->repl_inst_filehdr->is_supplementary && !jnlpool->jnlpool_ctl->upd_disabled);
}
if (is_new_histrec)
{
@@ -2034,8 +2033,7 @@ STATICFNDEF void process_tr_buff(int msg_type)
pool_histinfo = &pool_histrec->histcontent;
assert(pool_histinfo->start_seqno == recvpool_ctl->jnl_seqno);
assert(pool_histinfo->start_seqno >= recvpool.upd_proc_local->read_jnl_seqno);
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
- if (jnlpool.repl_inst_filehdr->is_supplementary && !jnlpool_ctl->upd_disabled)
+ if (jnlpool->repl_inst_filehdr->is_supplementary && !jnlpool->jnlpool_ctl->upd_disabled)
{ /* Modify the history record to reflect the stream # */
assert((0 <= recvpool.gtmrecv_local->strm_index)
&& (MAX_SUPPL_STRMS > recvpool.gtmrecv_local->strm_index));
@@ -2104,7 +2102,7 @@ STATICFNDEF void process_tr_buff(int msg_type)
/* Copy 0th stream history record into receive pool first */
rcvd_strm_histjrec[num_strm_histinfo].jrec_type = JRT_HISTREC;
rcvd_strm_histjrec[num_strm_histinfo].forwptr = SIZEOF(repl_histrec_jnl_t);
- cur_histinfo->strm_seqno = jnlpool_ctl->strm_seqno[0];
+ cur_histinfo->strm_seqno = jnlpool->jnlpool_ctl->strm_seqno[0];
rcvd_strm_histjrec[num_strm_histinfo++].histcontent = *cur_histinfo;
/* Copy non-zero stream history records if they exist */
for (idx = 1; idx < max_strm_histinfo; idx++)
@@ -2126,7 +2124,8 @@ STATICFNDEF void process_tr_buff(int msg_type)
* set it to 1 in that case.
*/
rcvd_strm_histjrec[num_strm_histinfo].histcontent.strm_seqno
- = jnlpool_ctl->strm_seqno[idx] ? jnlpool_ctl->strm_seqno[idx] : 1;
+ = jnlpool->jnlpool_ctl->strm_seqno[idx]
+ ? jnlpool->jnlpool_ctl->strm_seqno[idx] : 1;
num_strm_histinfo++;
/* Do not reset recvpool_ctl->is_valid_strm_histinfo[idx] to FALSE
* as this reflects reality and staying this way helps later
@@ -2411,11 +2410,11 @@ STATICFNDEF void gtmrecv_process_need_strminfo_msg(repl_needstrminfo_msg_ptr_t n
{
repl_log(gtmrecv_log_fp, TRUE, TRUE,
"Searching for the desired history in the replication instance file\n");
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
/* above macro will "return" if repl_connection_reset OR gtmrecv_wait_for_jnl_seqno is set */
status = repl_inst_wrapper_histinfo_find_seqno(need_strminfo_seqno, INVALID_SUPPL_STRM, &histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (0 != status)
{ /* Close the connection */
assert(ERR_REPLINSTNOHIST == status);
@@ -2519,11 +2518,11 @@ STATICFNDEF void gtmrecv_process_need_histinfo_msg(repl_needhistinfo_msg_ptr_t n
{ /* The history record needs to be found in the receiver side instance file */
repl_log(gtmrecv_log_fp, TRUE, TRUE,
"Searching for the desired history in the replication instance file\n");
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
/* above macro will "return" if repl_connection_reset OR gtmrecv_wait_for_jnl_seqno is set */
status = repl_inst_histinfo_get(need_histinfo_num, histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (0 != status)
{ /* Close the connection */
assert(ERR_REPLINSTNOHIST == status);
@@ -2605,20 +2604,20 @@ STATICFNDEF void gtmrecv_process_need_histinfo_msg(repl_needhistinfo_msg_ptr_t n
{ /* The seqno has been processed by the update process. Hence the histinfo
* for this will be found in the instance file. Search there.
*/
- assert(NULL != jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
repl_log(gtmrecv_log_fp, TRUE, TRUE,
"Searching for the desired history in the replication instance file\n");
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
status = repl_inst_wrapper_histinfo_find_seqno(need_histinfo_seqno, need_histinfo_strm_num, histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (0 != status)
{ /* Close the connection */
assert(ERR_REPLINSTNOHIST == status);
gtmrecv_autoshutdown(); /* should not return */
}
- assert((histinfo->histinfo_num != (jnlpool.repl_inst_filehdr->num_histinfo - 1))
- || (histinfo->start_seqno == jnlpool_ctl->last_histinfo_seqno));
+ assert((histinfo->histinfo_num != (jnlpool->repl_inst_filehdr->num_histinfo - 1))
+ || (histinfo->start_seqno == jnlpool->jnlpool_ctl->last_histinfo_seqno));
if (0 < need_histinfo_strm_num)
{ /* About to send to a non-supplementary instance. It does not understand strm_seqnos.
* So convert it back to a format it understands.
@@ -2766,8 +2765,8 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
gtmrecv_local = recvpool.gtmrecv_local;
gtmrecv_wait_for_jnl_seqno = FALSE;
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ assert((NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
DEBUG_ONLY(
assert(!repl_csa->hold_onto_crit);
ASSERT_VALID_JNLPOOL(repl_csa);
@@ -2805,8 +2804,8 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
* the jnlpool talks about the merged stream of jnl_seqnos (including any local updates). Therefore we
* cannot compare the two at all.
*/
- assert((!jnlpool_ctl->upd_disabled && jnlpool.repl_inst_filehdr->is_supplementary)
- || (recvpool_ctl->jnl_seqno >= jnlpool_ctl->jnl_seqno));
+ assert((!jnlpool->jnlpool_ctl->upd_disabled && jnlpool->repl_inst_filehdr->is_supplementary)
+ || (recvpool_ctl->jnl_seqno >= jnlpool->jnlpool_ctl->jnl_seqno));
assert(request_from);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Requesting transactions from JNL_SEQNO "INT8_FMT" "INT8_FMTX"\n",
request_from, request_from);
@@ -2860,7 +2859,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
msgp->jnl_ver = this_side->jnl_ver;
msgp->proto_ver = REPL_PROTO_VER_THIS;
msgp->node_endianness = NODE_ENDIANNESS;
- msgp->is_supplementary = jnlpool.repl_inst_filehdr->is_supplementary;
+ msgp->is_supplementary = jnlpool->repl_inst_filehdr->is_supplementary;
msgp->len = send_cross_endian ? GTM_BYTESWAP_32(MIN_REPL_MSGLEN) : MIN_REPL_MSGLEN;
msg_len = MIN_REPL_MSGLEN;
REPL_SEND_LOOP(gtmrecv_sock_fd, msgp, msg_len, REPL_POLL_NOWAIT)
@@ -3173,12 +3172,12 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
msg_len - REPL_MSG_HDRLEN);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Received REPL_OLD_NEED_INSTANCE_INFO message"
" from primary instance [%s]\n", old_need_instinfo_msg->instname);
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{ /* Issue REPL2OLD error because this is a supplementary instance and remote
* side runs a GT.M version that does not know the supplementary protocol */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPL2OLD, 4,
LEN_AND_STR(old_need_instinfo_msg->instname),
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname));
}
/* The source server does not understand the supplementary protocol.
* So make sure -UPDATERESYNC if specified at receiver server startup
@@ -3201,11 +3200,11 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
/*************** Send REPL_OLD_INSTANCE_INFO message ***************/
memset(&old_instinfo_msg, 0, SIZEOF(old_instinfo_msg));
memcpy(old_instinfo_msg.instname,
- jnlpool.repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ jnlpool->repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
old_instinfo_msg.was_rootprimary = (unsigned char)repl_inst_was_rootprimary();
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
gtmrecv_repl_send((repl_msg_ptr_t)&old_instinfo_msg, REPL_OLD_INSTANCE_INFO,
MIN_REPL_MSGLEN, "REPL_OLD_INSTANCE_INFO", MAX_SEQNO);
if (repl_connection_reset || gtmrecv_wait_for_jnl_seqno)
@@ -3213,8 +3212,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
/* Do not allow an instance which was formerly a root primary or which still
* has a non-zero value of "zqgblmod_seqno" to start up as a tertiary.
*/
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
- if ((old_instinfo_msg.was_rootprimary || jnlpool_ctl->max_zqgblmod_seqno)
+ if ((old_instinfo_msg.was_rootprimary || jnlpool->jnlpool_ctl->max_zqgblmod_seqno)
&& !old_need_instinfo_msg->is_rootprimary)
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_PRIMARYNOTROOT, 2,
@@ -3222,7 +3220,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
gtmrecv_autoshutdown(); /* should not return */
assert(FALSE);
}
- memcpy(jnlpool_ctl->primary_instname, old_need_instinfo_msg->instname,
+ memcpy(jnlpool->jnlpool_ctl->primary_instname, old_need_instinfo_msg->instname,
MAX_INSTNAME_LEN - 1);
}
break;
@@ -3394,7 +3392,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
{ /* Issue REPL2OLD error because primary is dual-site */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPL2OLD, 4,
LEN_AND_STR(UNKNOWN_INSTNAME),
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname));
}
/* Assert that endianness_known and cross_endian have already been initialized.
* This ensures that remote_side->cross_endian is reliable */
@@ -3443,7 +3441,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
gtmrecv_autoshutdown(); /* should not return */
assert(FALSE);
}
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
/* The ONLINE ROLLBACK did not change the physical or the logical state.
* Otherwise the above macro would have returned to the caller. Since we
@@ -3451,7 +3449,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
* flow from this point on. Return to the calling function to continue
* reconnecting.
*/
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
return;
} else
{
@@ -3463,7 +3461,7 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
break;
}
/* Handle REPL_WILL_RESTART_WITH_INFO case now */
- if (jnlpool.repl_inst_filehdr->was_rootprimary && jnlpool.jnlpool_ctl->upd_disabled)
+ if (jnlpool->repl_inst_filehdr->was_rootprimary && jnlpool->jnlpool_ctl->upd_disabled)
{ /* This is the first time an instance that was formerly a root primary
* is brought up as an immediate secondary of the new root primary. Once
* fetchresync rollback has happened and the receiver and source server
@@ -3473,11 +3471,11 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
* database file headers henceforth controls whether this instance can
* be brought up as a tertiary or not. Flush changes to file on disk.
*/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
GTMRECV_ONLN_RLBK_CLNUP_IF_NEEDED;
- jnlpool.repl_inst_filehdr->was_rootprimary = FALSE;
+ jnlpool->repl_inst_filehdr->was_rootprimary = FALSE;
repl_inst_flush_filehdr();
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
assert(REPL_WILL_RESTART_WITH_INFO == msg_type);
repl_log(gtmrecv_log_fp, TRUE, TRUE, "Received REPL_WILL_RESTART_WITH_INFO message"
@@ -3538,11 +3536,10 @@ STATICFNDEF void do_main_loop(boolean_t crash_restart)
}
/* Don't send any more stopsourcefilter message */
gtmrecv_options.stopsourcefilter = FALSE;
- assert(jnlpool.jnlpool_ctl == jnlpool_ctl);
assert(QWEQ(recvd_jnl_seqno, request_from)
- || (jnlpool.repl_inst_filehdr->is_supplementary
- && !jnlpool_ctl->upd_disabled && strm_index));
- assert(this_side->is_supplementary == jnlpool.repl_inst_filehdr->is_supplementary);
+ || (jnlpool->repl_inst_filehdr->is_supplementary
+ && !jnlpool->jnlpool_ctl->upd_disabled && strm_index));
+ assert(this_side->is_supplementary == jnlpool->repl_inst_filehdr->is_supplementary);
if (this_side->is_supplementary && !remote_side->is_supplementary)
{
/* For the non-supplementary -> supplementary replication connection that happens
diff --git a/sr_unix/gtmrecv_shutdown.c b/sr_unix/gtmrecv_shutdown.c
index 87db67d..1d1009c 100755
--- a/sr_unix/gtmrecv_shutdown.c
+++ b/sr_unix/gtmrecv_shutdown.c
@@ -49,7 +49,7 @@
#define GTMRECV_WAIT_FOR_SHUTDOWN (1000 - 1) /* ms, almost 1s */
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF recvpool_addrs recvpool;
GBLREF int recvpool_shmid;
@@ -197,15 +197,15 @@ int gtmrecv_shutdown(boolean_t auto_shutdown, int exit_status)
/* repl_inst_recvpool_reset inturn invokes repl_inst_flush_filehdr which expects the caller to grab journal pool
* lock if journal pool is available.
*/
- if ((NULL != jnlpool.jnlpool_ctl) && !was_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ if ((NULL != jnlpool->jnlpool_ctl) && !was_crit)
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
repl_inst_recvpool_reset();
- if ((NULL != jnlpool.jnlpool_ctl) && !was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ if ((NULL != jnlpool->jnlpool_ctl) && !was_crit)
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
- assert(NULL != jnlpool.jnlpool_ctl);
+ assert(NULL != jnlpool->jnlpool_ctl);
if (!ftok_sem_release(recvpool.recvpool_dummy_reg,
- !jnlpool.jnlpool_ctl->ftok_counter_halted && udi->counter_ftok_incremented, FALSE))
+ !jnlpool->jnlpool_ctl->ftok_counter_halted && udi->counter_ftok_incremented, FALSE))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_RECVPOOLSETUP);
return (exit_status);
}
diff --git a/sr_unix/gtmsecshr.c b/sr_unix/gtmsecshr.c
index 8186911..67356ec 100755
--- a/sr_unix/gtmsecshr.c
+++ b/sr_unix/gtmsecshr.c
@@ -446,13 +446,14 @@ void gtmsecshr_init(char_ptr_t argv[], char **rundir, int *rundir_len)
if (-1 == CHDIR(P_tmpdir)) /* Switch to temporary directory as CWD */
{
save_errno = errno;
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(10) ERR_GTMSECSHRSTART, 3,
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(10) MAKE_MSG_SEVERE(ERR_GTMSECSHRSTART), 3,
RTS_ERROR_LITERAL("Server"), process_id, ERR_GTMSECSHRCHDIRF, 2, LEN_AND_STR(P_tmpdir), save_errno);
EXIT(UNABLETOCHDIR);
}
umask(0);
if (0 != gtmsecshr_pathname_init(SERVER, *rundir, *rundir_len))
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_GTMSECSHRSOCKET, 3, RTS_ERROR_LITERAL("Server path"), process_id);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) MAKE_MSG_SEVERE(ERR_GTMSECSHRSOCKET), 3, RTS_ERROR_LITERAL("Server path"),
+ process_id);
if (-1 == (secshr_sem = semget(gtmsecshr_key, FTOK_SEM_PER_ID, RWDALL | IPC_NOWAIT)))
{
secshr_sem = INVALID_SEMID;
@@ -473,7 +474,7 @@ void gtmsecshr_init(char_ptr_t argv[], char **rundir, int *rundir_len)
SEMOP(secshr_sem, sop, 2, semop_res, NO_WAIT);
if (0 > semop_res)
{
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(10) MAKE_MSG_SEVERE(ERR_GTMSECSHRSTART), 3,
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(10) MAKE_MSG_WARNING(ERR_GTMSECSHRSTART), 3,
RTS_ERROR_LITERAL("Server"), process_id, ERR_TEXT, 2,
RTS_ERROR_LITERAL("server already running"), errno);
/* If gtm_tmp is not defined, show default path */
@@ -485,7 +486,8 @@ void gtmsecshr_init(char_ptr_t argv[], char **rundir, int *rundir_len)
gtmsecshr_exit(SEMAPHORETAKEN, FALSE);
}
if (0 != gtmsecshr_sock_init(SERVER))
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_GTMSECSHRSOCKET, 3, RTS_ERROR_LITERAL("Server"), process_id);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) MAKE_MSG_SEVERE(ERR_GTMSECSHRSOCKET), 3, RTS_ERROR_LITERAL("Server"),
+ process_id);
if (-1 == Stat(gtmsecshr_sock_name.sun_path, &stat_buf))
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(10) MAKE_MSG_WARNING(ERR_GTMSECSHRSTART), 3,
RTS_ERROR_LITERAL("Server"), process_id, ERR_TEXT, 2,
@@ -1017,7 +1019,7 @@ int validate_receiver(gtmsecshr_mesg *buf, char *rundir, int rundir_len, int sav
FCLOSE(procstrm, clrv);
if (-1 == clrv)
/* Not a functional issue so just warn about it in op-log */
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fclose()"), CALLFROM, errno);
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) MAKE_MSG_WARNING(ERR_SYSCALL), 5, LEN_AND_LIT("fclose()"), CALLFROM, errno);
lnln = STRLEN(cmdbuf);
/* Look from the end backwards to find the last '/' to isolate the directory */
for (cptr = cmdbuf + lnln - 1; (cptr >= cmdbuf) && ('/' != *cptr); cptr--)
@@ -1051,7 +1053,7 @@ int validate_receiver(gtmsecshr_mesg *buf, char *rundir, int rundir_len, int sav
FCLOSE(procstrm, clrv);
if (-1 == clrv)
/* Not a functional issue so just warn about it in op-log */
- send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fclose()"), CALLFROM, errno);
+ send_msg_csa(CSA_ARG(NULL) VARLSTCNT(8) MAKE_MSG_WARNING(ERR_SYSCALL), 5, LEN_AND_LIT("fclose()"), CALLFROM, errno);
# endif
return 0;
}
diff --git a/sr_unix/gtmsource.c b/sr_unix/gtmsource.c
index 8525aa3..31f250c 100644
--- a/sr_unix/gtmsource.c
+++ b/sr_unix/gtmsource.c
@@ -78,7 +78,7 @@ GBLDEF boolean_t last_seen_freeze_flag = FALSE;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF gtmsource_state_t gtmsource_state;
GBLREF boolean_t is_src_server;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF int gtmsource_sock_fd;
GBLREF int gtmsource_log_fd;
@@ -130,7 +130,6 @@ int gtmsource()
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- memset((uchar_ptr_t)&jnlpool, 0, SIZEOF(jnlpool_addrs));
call_on_signal = gtmsource_sigstop;
ESTABLISH_RET(gtmsource_ch, SS_NORMAL);
if (-1 == gtmsource_get_opt())
@@ -140,7 +139,7 @@ int gtmsource()
if (gtmsource_options.zerobacklog)
{
gtmsource_options.shut_down = FALSE; /* for getbacklog need init but can't hold ftok for time */
- jnlpool_init(GTMSOURCE, gtmsource_options.start, &is_jnlpool_creator);
+ jnlpool_init(GTMSOURCE, gtmsource_options.start, &is_jnlpool_creator, NULL);
gtmsource_options.shut_down = TRUE; /* restore actual value after the jnlpool_init */
if (0 < gtmsource_options.shutdown_time)
{
@@ -194,10 +193,11 @@ int gtmsource()
gtmsource_exit(ABNORMAL_SHUTDOWN);
}
}
- jnlpool_init(GTMSOURCE, gtmsource_options.start, &is_jnlpool_creator);
+ jnlpool_init(GTMSOURCE, gtmsource_options.start, &is_jnlpool_creator, NULL);
/* is_jnlpool_creator == TRUE ==> this process created the journal pool
* is_jnlpool_creator == FALSE ==> journal pool already existed and this process simply attached to it.
*/
+ assert(jnlpool && jnlpool->pool_init);
if (gtmsource_options.shut_down)
gtmsource_exit(gtmsource_shutdown(FALSE, NORMAL_SHUTDOWN) - NORMAL_SHUTDOWN);
else if (gtmsource_options.activate)
@@ -230,9 +230,9 @@ int gtmsource()
assert(gtmsource_options.start);
# ifndef REPL_DEBUG_NOBACKGROUND
/* Set "child_server_running" to FALSE before forking off child. Wait for it to be set to TRUE by the child. */
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
gtmsource_local->child_server_running = FALSE;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
FORK(pid);
if (0 > pid)
{
@@ -259,11 +259,11 @@ int gtmsource()
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0,
ERR_TEXT, 2, RTS_ERROR_LITERAL("Error in rel_sem"), save_errno);
/* If the child source server process got a ftok counter overflow, it would have recorded that in
- * jnlpool.jnlpool_ctl->ftok_counter_halted. Decrement the ftok counter only if neither we nor the
+ * jnlpool->jnlpool_ctl->ftok_counter_halted. Decrement the ftok counter only if neither we nor the
* child process got a counter overflow.
*/
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented
- && !jnlpool.jnlpool_ctl->ftok_counter_halted, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented
+ && !jnlpool->jnlpool_ctl->ftok_counter_halted, TRUE);
} else
{ /* Child source server process errored out at startup and is no longer alive.
* If we were the one who created the journal pool, let us clean it up.
@@ -358,19 +358,22 @@ int gtmsource()
"more database files that are replicated"));
gtmsource_exit(ABNORMAL_SHUTDOWN);
}
+ if ((NULL == csa->jnlpool) && REPL_ALLOWED(csa) && jnlpool->pool_init)
+ csa->jnlpool = jnlpool;
}
/* Initialize source server alive/dead state related fields in "gtmsource_local" before the ftok semaphore is released */
gtmsource_local->gtmsource_pid = process_id;
gtmsource_local->gtmsource_state = GTMSOURCE_START;
if (is_jnlpool_creator)
{
- DEBUG_ONLY(jnlpool.jnlpool_ctl->jnlpool_creator_pid = process_id);
+ assert(jnlpool && jnlpool->jnlpool_ctl);
+ DEBUG_ONLY(jnlpool->jnlpool_ctl->jnlpool_creator_pid = process_id);
gtmsource_seqno_init(this_side_std_null_coll);
if (ROOTPRIMARY_SPECIFIED == gtmsource_options.rootprimary)
{ /* Created the journal pool as a root primary. Append a history record to the replication instance file.
* Invoke the function "gtmsource_rootprimary_init" to do that.
*/
- gtmsource_rootprimary_init(jnlpool.jnlpool_ctl->jnl_seqno);
+ gtmsource_rootprimary_init(jnlpool->jnlpool_ctl->jnl_seqno);
}
}
/* after this point we can no longer have the case where all the regions are unreplicated/non-journaled. */
@@ -381,7 +384,8 @@ int gtmsource()
* for the replication instance file. But the source server process (the child) that comes here would not have done
* that. Do that while the parent is still holding on to the ftok semaphore waiting for our okay.
*/
- if (!ftok_sem_incrcnt(jnlpool.jnlpool_dummy_reg, FILE_TYPE_REPLINST, &ftok_counter_halted))
+ assert(jnlpool && jnlpool->pool_init);
+ if (!ftok_sem_incrcnt(jnlpool->jnlpool_dummy_reg, FILE_TYPE_REPLINST, &ftok_counter_halted))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_JNLPOOLSETUP);
/* Increment the source server count semaphore */
status = incr_sem(SOURCE, SRC_SERV_COUNT_SEM);
@@ -413,10 +417,10 @@ int gtmsource()
if (is_jnlpool_creator)
{
repl_log(gtmsource_log_fp, TRUE, TRUE, "Created jnlpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->jnlpool_shmid, jnlpool.repl_inst_filehdr->jnlpool_semid);
+ jnlpool->repl_inst_filehdr->jnlpool_shmid, jnlpool->repl_inst_filehdr->jnlpool_semid);
} else
repl_log(gtmsource_log_fp, TRUE, TRUE, "Attached to existing jnlpool with shmid = [%d] and semid = [%d]\n",
- jnlpool.repl_inst_filehdr->jnlpool_shmid, jnlpool.repl_inst_filehdr->jnlpool_semid);
+ jnlpool->repl_inst_filehdr->jnlpool_shmid, jnlpool->repl_inst_filehdr->jnlpool_semid);
gtm_event_log(GTM_EVENT_LOG_ARGC, "MUPIP", "REPLINFO", print_msg);
# ifdef GTM_TLS
if (REPL_TLS_REQUESTED)
@@ -425,12 +429,12 @@ int gtmsource()
assert(REPL_TLS_REQUESTED || PLAINTEXT_FALLBACK);
}
# endif
- if (jnlpool.jnlpool_ctl->freeze)
+ if (jnlpool->jnlpool_ctl->freeze)
{
- last_seen_freeze_flag = jnlpool.jnlpool_ctl->freeze;
- sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFROZEN, 1, jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ last_seen_freeze_flag = jnlpool->jnlpool_ctl->freeze;
+ sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFROZEN, 1, jnlpool->repl_inst_filehdr->inst_info.this_instname);
repl_log(gtmsource_log_fp, TRUE, FALSE, print_msg);
- sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool.jnlpool_ctl->freeze_comment);
+ sgtm_putmsg(print_msg, VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool->jnlpool_ctl->freeze_comment);
repl_log(gtmsource_log_fp, TRUE, TRUE, print_msg);
}
add_safe_timer_handler(1, gtmsource_heartbeat_timer);
@@ -472,27 +476,27 @@ int gtmsource()
sgtm_putmsg(print_msg, VARLSTCNT(4) ERR_REPLINFO, 2, LEN_AND_STR(tmpmsg));
repl_log(gtmsource_log_fp, TRUE, TRUE, print_msg);
gtm_event_log(GTM_EVENT_LOG_ARGC, "MUPIP", "REPLINFO", print_msg);
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke "grab_lock" and "rel_lock" unconditionally */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
{
repl_log(gtmsource_log_fp, TRUE, TRUE, "Starting afresh due to ONLINE ROLLBACK\n");
repl_log(gtmsource_log_fp, TRUE, TRUE, "REPL INFO - Current Jnlpool Seqno : %llu\n",
- jnlpool.jnlpool_ctl->jnl_seqno);
+ jnlpool->jnlpool_ctl->jnl_seqno);
continue;
}
GTMSOURCE_SET_READ_ADDR(gtmsource_local, jnlpool);
gtmsource_local->read_state = gtmsource_local->jnlfileonly ? READ_FILE : READ_POOL;
read_jnl_seqno = gtmsource_local->read_jnl_seqno;
- assert(read_jnl_seqno <= jnlpool.jnlpool_ctl->jnl_seqno);
- if (read_jnl_seqno < jnlpool.jnlpool_ctl->jnl_seqno)
+ assert(read_jnl_seqno <= jnlpool->jnlpool_ctl->jnl_seqno);
+ if (read_jnl_seqno < jnlpool->jnlpool_ctl->jnl_seqno)
{
gtmsource_local->read_state = READ_FILE;
- QWASSIGN(gtmsource_save_read_jnl_seqno, jnlpool.jnlpool_ctl->jnl_seqno);
+ QWASSIGN(gtmsource_save_read_jnl_seqno, jnlpool->jnlpool_ctl->jnl_seqno);
gtmsource_pool2file_transition = TRUE; /* so that we read the latest gener jnl files */
}
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (SS_NORMAL != (status = gtmsource_alloc_tcombuff()))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_REPLCOMM, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error allocating initial tcom buffer space. Malloc error"), status);
diff --git a/sr_unix/gtmsource.h b/sr_unix/gtmsource.h
index 43e5475..6ca65fe 100644
--- a/sr_unix/gtmsource.h
+++ b/sr_unix/gtmsource.h
@@ -376,10 +376,11 @@ MBSTART { \
MBSTART { \
qw_off_t rsrv_write_addr; \
\
- assert((&FILE_INFO(JNLPOOL.jnlpool_dummy_reg)->s_addrs)->now_crit); \
- rsrv_write_addr = JNLPOOL.jnlpool_ctl->rsrv_write_addr; \
+ assert(JNLPOOL && JNLPOOL->jnlpool_dummy_reg && JNLPOOL->jnlpool_ctl && GTMSOURCE_LOCAL); \
+ assert((&FILE_INFO(JNLPOOL->jnlpool_dummy_reg)->s_addrs)->now_crit); \
+ rsrv_write_addr = JNLPOOL->jnlpool_ctl->rsrv_write_addr; \
GTMSOURCE_LOCAL->read_addr = rsrv_write_addr; \
- GTMSOURCE_LOCAL->read = rsrv_write_addr % JNLPOOL.jnlpool_ctl->jnlpool_size; \
+ GTMSOURCE_LOCAL->read = rsrv_write_addr % JNLPOOL->jnlpool_ctl->jnlpool_size; \
} MBEND
#define SET_JPL_WRITE_ADDR(JPL, NEW_WRITE_ADDR) \
@@ -537,7 +538,7 @@ typedef struct
/* The below structure has various fields that point to different sections of the journal pool
* and a few fields that point to private memory.
*/
-typedef struct
+typedef struct jnlpool_addrs_struct
{
jnlpool_ctl_ptr_t jnlpool_ctl; /* pointer to the journal pool control structure */
gd_region *jnlpool_dummy_reg; /* some functions need gd_region */
@@ -547,8 +548,16 @@ typedef struct
gtmsrc_lcl_ptr_t gtmsrc_lcl_array; /* pointer to the gtmsrc_lcl array section in the journal pool */
sm_uc_ptr_t jnldata_base; /* pointer to the start of the actual journal record data */
jpl_rsrv_struct_t jrs;
+ boolean_t pool_init; /* this jnlpool_addrs is active */
+ boolean_t recv_pool; /* this jnlpool is the same instance as recvpool */
+ boolean_t relaxed; /* created with jnlpool_user GTMRELAXED */
+ struct jnlpool_addrs_struct *next;
+ gd_inst_info *gd_instinfo; /* global directory not gtm_repl_instance */
+ gd_addr *gd_ptr; /* pointer to global directory */
} jnlpool_addrs;
+#define JNLPOOL_FROM(CSA) (!IS_GTM_IMAGE ? jnlpool : (!(CSA) ? NULL : ((CSA)->jnlpool ? (CSA)->jnlpool : jnlpool)))
+
#define UPDATE_JPL_RSRV_WRITE_ADDR(JPL, JNLPOOL, TN_JRECLEN) \
MBSTART { \
qw_off_t rsrv_write_addr; \
@@ -557,8 +566,9 @@ MBSTART { \
\
GBLREF uint4 process_id; \
\
- assert(JPL == JNLPOOL.jnlpool_ctl); \
- assert((&FILE_INFO(JNLPOOL.jnlpool_dummy_reg)->s_addrs)->now_crit); \
+ assert((NULL != JNLPOOL) && (NULL != JNLPOOL->jnlpool_dummy_reg)); \
+ assert(JPL == JNLPOOL->jnlpool_ctl); \
+ assert((&FILE_INFO(JNLPOOL->jnlpool_dummy_reg)->s_addrs)->now_crit); \
/* Allocate a slot. But before that, check if the slot array is full. \
* endIndex + 1 == first_index implies full. \
* endIndex == first_index implies empty. \
@@ -570,7 +580,7 @@ MBSTART { \
{ /* Slot array is full. Wait for phase2 to finish. */ \
do \
{ \
- repl_phase2_cleanup(&JNLPOOL); \
+ repl_phase2_cleanup(JNLPOOL); \
if (nextIndex != JPL->phase2_commit_index1) \
break; \
JPL_TRACE_PRO(JPL, jnl_pool_write_sleep); \
@@ -591,15 +601,15 @@ MBSTART { \
phs2cmt->tot_jrec_len = TN_JRECLEN; \
phs2cmt->prev_jrec_len = JPL->lastwrite_len; \
phs2cmt->write_complete = FALSE; \
- JNLPOOL.jrs.start_write_addr = rsrv_write_addr; \
- JNLPOOL.jrs.cur_write_addr = rsrv_write_addr + SIZEOF(jnldata_hdr_struct); \
- JNLPOOL.jrs.tot_jrec_len = TN_JRECLEN; \
- JNLPOOL.jrs.write_total = SIZEOF(jnldata_hdr_struct); /* will be incremented as we copy \
+ JNLPOOL->jrs.start_write_addr = rsrv_write_addr; \
+ JNLPOOL->jrs.cur_write_addr = rsrv_write_addr + SIZEOF(jnldata_hdr_struct); \
+ JNLPOOL->jrs.tot_jrec_len = TN_JRECLEN; \
+ JNLPOOL->jrs.write_total = SIZEOF(jnldata_hdr_struct); /* will be incremented as we copy \
* each jnlrec into jnlpool in phase2 \
*/ \
- JNLPOOL.jrs.memcpy_skipped = FALSE; \
- JNLPOOL.jrs.phase2_commit_index = endIndex; \
- JNLPOOL.jrs.num_tcoms = 0; \
+ JNLPOOL->jrs.memcpy_skipped = FALSE; \
+ JNLPOOL->jrs.phase2_commit_index = endIndex; \
+ JNLPOOL->jrs.num_tcoms = 0; \
/* Note: "mutex_salvage" and "repl_phase2_cleanup" rely on the below order of sets */ \
JPL->lastwrite_len = TN_JRECLEN; \
JPL->rsrv_write_addr = rsrv_write_addr + TN_JRECLEN; \
@@ -620,29 +630,29 @@ MBSTART { \
GBLREF uint4 process_id; \
GBLREF jnl_gbls_t jgbl; \
\
- tot_jrec_len = JNLPOOL.jrs.tot_jrec_len; \
+ tot_jrec_len = JNLPOOL->jrs.tot_jrec_len; \
assert(tot_jrec_len); \
- index = JNLPOOL.jrs.phase2_commit_index; \
+ index = JNLPOOL->jrs.phase2_commit_index; \
ASSERT_JNL_PHASE2_COMMIT_INDEX_IS_VALID(index, JPL_PHASE2_COMMIT_ARRAY_SIZE); \
- phs2cmt = &JNLPOOL.jnlpool_ctl->phase2_commit_array[index]; \
+ phs2cmt = &JNLPOOL->jnlpool_ctl->phase2_commit_array[index]; \
assert(phs2cmt->process_id == process_id); \
assert(FALSE == phs2cmt->write_complete); \
assert(phs2cmt->tot_jrec_len == tot_jrec_len); \
assert(jgbl.cumul_index == jgbl.cu_jnl_index); \
- if (!JNLPOOL.jrs.memcpy_skipped) \
+ if (!JNLPOOL->jrs.memcpy_skipped) \
{ \
- assert(JNLPOOL.jrs.start_write_addr >= JNLPOOL.jnlpool_ctl->write_addr); \
- assert(JNLPOOL.jrs.start_write_addr < JNLPOOL.jnlpool_ctl->rsrv_write_addr); \
- jnl_header = (jnldata_hdr_ptr_t)(JNLPOOL.jnldata_base \
- + (JNLPOOL.jrs.start_write_addr % JNLPOOL.jnlpool_ctl->jnlpool_size)); \
+ assert(JNLPOOL->jrs.start_write_addr >= JNLPOOL->jnlpool_ctl->write_addr); \
+ assert(JNLPOOL->jrs.start_write_addr < JNLPOOL->jnlpool_ctl->rsrv_write_addr); \
+ jnl_header = (jnldata_hdr_ptr_t)(JNLPOOL->jnldata_base \
+ + (JNLPOOL->jrs.start_write_addr % JNLPOOL->jnlpool_ctl->jnlpool_size)); \
jnl_header->jnldata_len = tot_jrec_len; \
assert(0 == (phs2cmt->prev_jrec_len % JNL_REC_START_BNDRY)); \
jnl_header->prev_jnldata_len = phs2cmt->prev_jrec_len; \
- DEBUG_ONLY(prefix = (jrec_prefix *)(JNLPOOL.jnldata_base \
- + (JNLPOOL.jrs.start_write_addr + SIZEOF(jnldata_hdr_struct)) \
- % JNLPOOL.jnlpool_ctl->jnlpool_size)); \
+ DEBUG_ONLY(prefix = (jrec_prefix *)(JNLPOOL->jnldata_base \
+ + (JNLPOOL->jrs.start_write_addr + SIZEOF(jnldata_hdr_struct)) \
+ % JNLPOOL->jnlpool_ctl->jnlpool_size)); \
assert(JRT_BAD != prefix->jrec_type); \
- if ((JNLPOOL.jrs.write_total != tot_jrec_len) \
+ if ((JNLPOOL->jrs.write_total != tot_jrec_len) \
DEBUG_ONLY(|| ((0 != TREF(gtm_test_jnlpool_sync)) \
&& (0 == (phs2cmt->jnl_seqno % TREF(gtm_test_jnlpool_sync)))))) \
{ /* This is an out-of-sync situation. "tot_jrec_len" (computed in phase1) is not equal \
@@ -658,17 +668,17 @@ MBSTART { \
* "prefix" below would end up going outside the jnlpool range hence a simple \
* (jnl_header + 1) would not work to set prefix (and instead the % needed below). \
*/ \
- prefix = (jrec_prefix *)(JNLPOOL.jnldata_base \
- + (JNLPOOL.jrs.start_write_addr + SIZEOF(jnldata_hdr_struct)) \
- % JNLPOOL.jnlpool_ctl->jnlpool_size); \
+ prefix = (jrec_prefix *)(JNLPOOL->jnldata_base \
+ + (JNLPOOL->jrs.start_write_addr + SIZEOF(jnldata_hdr_struct)) \
+ % JNLPOOL->jnlpool_ctl->jnlpool_size); \
prefix->jrec_type = JRT_BAD; \
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_JNLPOOLRECOVERY, 4, \
- tot_jrec_len, JNLPOOL.jrs.write_total, \
- &phs2cmt->jnl_seqno, JNLPOOL.jnlpool_ctl->jnlpool_id.instfilename); \
+ tot_jrec_len, JNLPOOL->jrs.write_total, \
+ &phs2cmt->jnl_seqno, JNLPOOL->jnlpool_ctl->jnlpool_id.instfilename); \
/* Now that JRT_BAD is set, fix cur_write_addr so it is set back in sync \
* (so later assert can succeed). \
*/ \
- DEBUG_ONLY(JNLPOOL.jrs.cur_write_addr = (JNLPOOL.jrs.start_write_addr + tot_jrec_len)); \
+ DEBUG_ONLY(JNLPOOL->jrs.cur_write_addr = (JNLPOOL->jrs.start_write_addr + tot_jrec_len)); \
} \
/* Need to make sure the writes of jnl_header->jnldata_len & jnl_header->prev_jnldata_len \
* happen BEFORE the write of phs2cmt->write_complete in that order. Hence need the write \
@@ -680,14 +690,14 @@ MBSTART { \
*/ \
SHM_WRITE_MEMORY_BARRIER; \
} \
- assert((JNLPOOL.jrs.start_write_addr + tot_jrec_len) == JNLPOOL.jrs.cur_write_addr); \
+ assert((JNLPOOL->jrs.start_write_addr + tot_jrec_len) == JNLPOOL->jrs.cur_write_addr); \
phs2cmt->write_complete = TRUE; \
- JNLPOOL.jrs.tot_jrec_len = 0; /* reset needed to prevent duplicate calls (e.g. "secshr_db_clnup") */ \
+ JNLPOOL->jrs.tot_jrec_len = 0; /* reset needed to prevent duplicate calls (e.g. "secshr_db_clnup") */ \
/* Invoke "repl_phase2_cleanup" sparingly as it calls "grab_latch". So we do it twice. \
* Once at half-way mark and once when a wrap occurs. \
*/ \
if (!index || ((JPL_PHASE2_COMMIT_ARRAY_SIZE / 2) == index)) \
- repl_phase2_cleanup(&JNLPOOL); \
+ repl_phase2_cleanup(JNLPOOL); \
} MBEND
#if defined(__osf__) && defined(__alpha)
@@ -799,7 +809,7 @@ void gtmsource_stop(boolean_t exit);
void gtmsource_sigstop(void);
boolean_t jnlpool_hasnt_overflowed(jnlpool_ctl_ptr_t jctl, uint4 jnlpool_size, qw_num read_addr);
void jnlpool_detach(void);
-void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t *jnlpool_creator);
+void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t *jnlpool_creator, gd_addr *gd_ptr);
int gtmsource_init_heartbeat(void);
int gtmsource_process_heartbeat(repl_heartbeat_msg_ptr_t heartbeat_msg);
int gtmsource_send_heartbeat(time_t *now);
diff --git a/sr_unix/gtmsource_changelog.c b/sr_unix/gtmsource_changelog.c
old mode 100755
new mode 100644
index e4c4d3b..cc337c2
--- a/sr_unix/gtmsource_changelog.c
+++ b/sr_unix/gtmsource_changelog.c
@@ -37,7 +37,7 @@
#include "util.h"
#include "repl_log.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
error_def(ERR_REPLLOGOPN);
@@ -53,25 +53,25 @@ int gtmsource_changelog(void)
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
repl_log(stderr, TRUE, TRUE, "Initiating CHANGELOG operation on source server pid [%d] for secondary instance [%s]\n",
- jnlpool.gtmsource_local->gtmsource_pid, jnlpool.gtmsource_local->secondary_instname);
- if (0 != jnlpool.gtmsource_local->changelog)
+ jnlpool->gtmsource_local->gtmsource_pid, jnlpool->gtmsource_local->secondary_instname);
+ if (0 != jnlpool->gtmsource_local->changelog)
{
retry_count = 5;
while (0 != retry_count--)
{
LONG_SLEEP(5);
- if (!jnlpool.gtmsource_local->changelog)
+ if (!jnlpool->gtmsource_local->changelog)
break;
}
}
- if (0 != jnlpool.gtmsource_local->changelog)
+ if (0 != jnlpool->gtmsource_local->changelog)
{
util_out_print("Change log is already in progress. Not initiating change in log file or log interval", TRUE);
return (ABNORMAL_SHUTDOWN);
}
if ('\0' != gtmsource_options.log_file[0]) /* trigger change in log file */
{
- if (0 != STRCMP(jnlpool.gtmsource_local->log_file, gtmsource_options.log_file))
+ if (0 != STRCMP(jnlpool->gtmsource_local->log_file, gtmsource_options.log_file))
{ /*check if the new log file is writable*/
OPENFILE3_CLOEXEC(gtmsource_options.log_file,
O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, log_fd);
@@ -79,11 +79,11 @@ int gtmsource_changelog(void)
{
save_errno = ERRNO;
err_code = STRERROR(save_errno);
- if ('\0' != jnlpool.gtmsource_local->log_file[0])
+ if ('\0' != jnlpool->gtmsource_local->log_file[0])
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLLOGOPN, 6,
LEN_AND_STR(gtmsource_options.log_file),
LEN_AND_STR(err_code),
- LEN_AND_STR(jnlpool.gtmsource_local->log_file));
+ LEN_AND_STR(jnlpool->gtmsource_local->log_file));
else
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLLOGOPN, 6,
LEN_AND_STR(gtmsource_options.log_file),
@@ -93,7 +93,7 @@ int gtmsource_changelog(void)
CLOSEFILE_IF_OPEN(log_fd, close_status);
assert(close_status==0);
changelog_accepted |= REPLIC_CHANGE_LOGFILE;
- STRCPY(jnlpool.gtmsource_local->log_file, gtmsource_options.log_file);
+ STRCPY(jnlpool->gtmsource_local->log_file, gtmsource_options.log_file);
util_out_print("Change log initiated with file !AD", TRUE, LEN_AND_STR(gtmsource_options.log_file));
}
} else
@@ -102,20 +102,20 @@ int gtmsource_changelog(void)
}
if (0 != gtmsource_options.src_log_interval) /* trigger change in log interval */
{
- if (gtmsource_options.src_log_interval != jnlpool.gtmsource_local->log_interval)
+ if (gtmsource_options.src_log_interval != jnlpool->gtmsource_local->log_interval)
{
changelog_accepted |= REPLIC_CHANGE_LOGINTERVAL;
- jnlpool.gtmsource_local->log_interval = gtmsource_options.src_log_interval;
+ jnlpool->gtmsource_local->log_interval = gtmsource_options.src_log_interval;
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_CHANGELOGINTERVAL, 5,
LEN_AND_LIT("Source"),
- LEN_AND_STR(jnlpool.gtmsource_local->log_file),
+ LEN_AND_STR(jnlpool->gtmsource_local->log_file),
gtmsource_options.src_log_interval);
} else
util_out_print("Log interval is already !UL. Not initiating change in log interval", TRUE,
gtmsource_options.src_log_interval);
}
if (0 != changelog_accepted)
- jnlpool.gtmsource_local->changelog = changelog_accepted;
+ jnlpool->gtmsource_local->changelog = changelog_accepted;
else
util_out_print("No change to log file or log interval", TRUE);
return (0 != save_errno) ? ABNORMAL_SHUTDOWN : NORMAL_SHUTDOWN;
diff --git a/sr_unix/gtmsource_checkforbacklog.c b/sr_unix/gtmsource_checkforbacklog.c
index aa84e2a..c13f6f6 100644
--- a/sr_unix/gtmsource_checkforbacklog.c
+++ b/sr_unix/gtmsource_checkforbacklog.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2016 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -44,7 +44,7 @@
#include "repl_log.h"
#include "is_proc_alive.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
@@ -56,26 +56,26 @@ seq_num gtmsource_checkforbacklog(void)
boolean_t srv_alive;
uint4 gtmsource_pid;
- jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
- if (NULL != jnlpool.gtmsource_local) /* Show backlog for a specific source server */
- gtmsourcelocal_ptr = jnlpool.gtmsource_local;
+ jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
+ if (NULL != jnlpool->gtmsource_local) /* Show backlog for a specific source server */
+ gtmsourcelocal_ptr = jnlpool->gtmsource_local;
else
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for (index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++)
{
if ('\0' == gtmsourcelocal_ptr->secondary_instname[0])
{
- assert(NULL == jnlpool.gtmsource_local);
+ assert(NULL == jnlpool->gtmsource_local);
continue;
}
gtmsource_pid = gtmsourcelocal_ptr->gtmsource_pid;
- if ((NULL == jnlpool.gtmsource_local) && (0 == gtmsource_pid))
+ if ((NULL == jnlpool->gtmsource_local) && (0 == gtmsource_pid))
continue;
read_jnl_seqno = gtmsourcelocal_ptr->read_jnl_seqno;
/* jnl_seqno >= read_jnl_seqno is the most common case; see gtmsource_readpool() for when the rare case can occur */
seq_num = (jnl_seqno >= read_jnl_seqno) ? jnl_seqno - read_jnl_seqno : 0;
backlog_count += seq_num;
- if (NULL != jnlpool.gtmsource_local)
+ if (NULL != jnlpool->gtmsource_local)
break;
}
return backlog_count;
diff --git a/sr_unix/gtmsource_checkhealth.c b/sr_unix/gtmsource_checkhealth.c
index d9618c0..05c585a 100755
--- a/sr_unix/gtmsource_checkhealth.c
+++ b/sr_unix/gtmsource_checkhealth.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -44,7 +45,7 @@
#include "sgtm_putmsg.h"
#include "util.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
GBLREF gd_addr *gd_header;
@@ -68,17 +69,17 @@ int gtmsource_checkhealth(void)
char *modestr;
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- if (NULL != jnlpool.gtmsource_local) /* Check health of a specific source server */
- gtmsourcelocal_ptr = jnlpool.gtmsource_local;
+ if (NULL != jnlpool->gtmsource_local) /* Check health of a specific source server */
+ gtmsourcelocal_ptr = jnlpool->gtmsource_local;
else
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
num_servers = 0;
status = SRV_ALIVE;
for (index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++)
{
if ('\0' == gtmsourcelocal_ptr->secondary_instname[0])
{
- assert(NULL == jnlpool.gtmsource_local);
+ assert(NULL == jnlpool->gtmsource_local);
continue;
}
gtmsource_pid = gtmsourcelocal_ptr->gtmsource_pid;
@@ -86,7 +87,7 @@ int gtmsource_checkhealth(void)
* of whether a source server for that instance is alive or not. For CHECKHEALTH on ALL secondary instances
* print health information only for those instances that have an active or passive source server alive.
*/
- if ((NULL == jnlpool.gtmsource_local) && (0 == gtmsource_pid))
+ if ((NULL == jnlpool->gtmsource_local) && (0 == gtmsource_pid))
continue;
repl_log(stdout, TRUE, TRUE, "Initiating CHECKHEALTH operation on source server pid [%d] for secondary instance"
" name [%s]\n", gtmsource_pid, gtmsourcelocal_ptr->secondary_instname);
@@ -116,10 +117,10 @@ int gtmsource_checkhealth(void)
LEN_AND_STR(gtmsourcelocal_ptr->secondary_instname));
status |= SRV_DEAD;
}
- if (NULL != jnlpool.gtmsource_local)
+ if (NULL != jnlpool->gtmsource_local)
break;
}
- if (NULL == jnlpool.gtmsource_local)
+ if (NULL == jnlpool->gtmsource_local)
{ /* Compare number of servers that were found alive with the current value of the COUNT semaphore.
* If they are not equal, report the discrepancy.
*/
@@ -159,7 +160,7 @@ int gtmsource_checkhealth(void)
{
assert(!JNL_ENABLED(csd) || REPL_ENABLED(csd)); /* || is for turning replication on concurrently */
reg_seqno = csd->reg_seqno;
- jnlseqno = (NULL != jnlpool.jnlpool_ctl) ? jnlpool.jnlpool_ctl->jnl_seqno : MAX_SEQNO;
+ jnlseqno = (NULL != jnlpool->jnlpool_ctl) ? jnlpool->jnlpool_ctl->jnl_seqno : MAX_SEQNO;
sgtm_putmsg(errtxt, VARLSTCNT(8) ERR_REPLJNLCLOSED, 6, DB_LEN_STR(reg),
®_seqno, ®_seqno, &jnlseqno, &jnlseqno);
repl_log(stderr, FALSE, TRUE, errtxt);
@@ -167,10 +168,10 @@ int gtmsource_checkhealth(void)
}
}
}
- if (jnlpool.jnlpool_ctl->freeze)
+ if (jnlpool->jnlpool_ctl->freeze)
{
repl_log(stderr, FALSE, FALSE, "Warning: Instance Freeze is ON\n");
- repl_log(stderr, FALSE, TRUE, " Freeze Comment: %s\n", jnlpool.jnlpool_ctl->freeze_comment);
+ repl_log(stderr, FALSE, TRUE, " Freeze Comment: %s\n", jnlpool->jnlpool_ctl->freeze_comment);
status |= SRV_ERR;
}
return (status + NORMAL_SHUTDOWN);
diff --git a/sr_unix/gtmsource_end.c b/sr_unix/gtmsource_end.c
index c9f6ae8..b5372e6 100644
--- a/sr_unix/gtmsource_end.c
+++ b/sr_unix/gtmsource_end.c
@@ -47,8 +47,7 @@
#include "gtm_repl.h"
#endif
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF int gtmsource_sock_fd;
GBLREF int gtmsource_log_fd;
@@ -64,6 +63,7 @@ GBLREF qw_num repl_source_msg_sent;
GBLREF seq_num seq_num_zero;
GBLREF repl_msg_ptr_t gtmsource_msgp;
GBLREF uchar_ptr_t repl_filter_buff;
+GBLREF int pool_init;
int gtmsource_end1(boolean_t auto_shutdown)
{
@@ -75,19 +75,19 @@ int gtmsource_end1(boolean_t auto_shutdown)
SETUP_THREADGBL_ACCESS;
gtmsource_ctl_close();
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke and "rel_lock" unconditionally */
- rel_lock(jnlpool.jnlpool_dummy_reg);
- mutex_cleanup(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ mutex_cleanup(jnlpool->jnlpool_dummy_reg);
exit_status = NORMAL_SHUTDOWN;
if (!auto_shutdown)
- jnlpool.gtmsource_local->shutdown = NORMAL_SHUTDOWN;
- read_jnl_seqno = jnlpool.gtmsource_local->read_jnl_seqno;
- jnlpool_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ jnlpool->gtmsource_local->shutdown = NORMAL_SHUTDOWN;
+ read_jnl_seqno = jnlpool->gtmsource_local->read_jnl_seqno;
+ jnlpool_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
- jnlpool_strm_seqno[idx] = jnlpool.jnlpool_ctl->strm_seqno[idx];
- jnlpool.gtmsource_local->gtmsource_pid = 0;
- jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_DUMMY_STATE;
+ jnlpool_strm_seqno[idx] = jnlpool->jnlpool_ctl->strm_seqno[idx];
+ jnlpool->gtmsource_local->gtmsource_pid = 0;
+ jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_DUMMY_STATE;
/* Detach from journal pool, except if IFOE is configured, in which case we need the journal pool attached
* so that we can check for instance freeze in database rundown, or if auto_shutdown is set.
* In those cases, the detach will happen automatically when the process terminates.
diff --git a/sr_unix/gtmsource_flush_fh.c b/sr_unix/gtmsource_flush_fh.c
index c00c6fe..e7df63e 100755
--- a/sr_unix/gtmsource_flush_fh.c
+++ b/sr_unix/gtmsource_flush_fh.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -21,7 +22,7 @@
#include "gtmsource.h"
#include "repl_instance.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF time_t gtmsource_last_flush_time;
GBLREF volatile time_t gtmsource_now;
GBLREF gtmsource_state_t gtmsource_state;
@@ -31,21 +32,21 @@ void gtmsource_flush_fh(seq_num resync_seqno)
{
sgmnt_addrs *repl_csa;
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
DEBUG_ONLY(
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
assert(!repl_csa->hold_onto_crit);
ASSERT_VALID_JNLPOOL(repl_csa);
)
- jnlpool.gtmsource_local->read_jnl_seqno = resync_seqno;
+ jnlpool->gtmsource_local->read_jnl_seqno = resync_seqno;
gtmsource_last_flush_time = gtmsource_now;
- if (jnlpool.gtmsource_local->last_flush_resync_seqno == resync_seqno)
+ if (jnlpool->gtmsource_local->last_flush_resync_seqno == resync_seqno)
return;
/* need to flush resync_seqno to instance file. Grab the journal pool lock before flushing */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK); /* sets gtmsource_state */
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK); /* sets gtmsource_state */
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
return;
repl_inst_flush_gtmsrc_lcl(); /* this requires the ftok semaphore to be held */
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
return;
}
diff --git a/sr_unix/gtmsource_freeze.c b/sr_unix/gtmsource_freeze.c
index 153d166..1797ac8 100644
--- a/sr_unix/gtmsource_freeze.c
+++ b/sr_unix/gtmsource_freeze.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2012, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2012-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -20,7 +21,7 @@
#include "filestruct.h"
#include "util.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
@@ -33,10 +34,10 @@ int gtmsource_showfreeze(void)
boolean_t instance_frozen;
assert(!holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- instance_frozen = jnlpool.jnlpool_ctl->freeze;
+ instance_frozen = jnlpool->jnlpool_ctl->freeze;
util_out_print("Instance Freeze: !AZ", TRUE, instance_frozen ? "ON" : "OFF");
- if (jnlpool.jnlpool_ctl->freeze)
- util_out_print(" Freeze Comment: !AZ", TRUE, jnlpool.jnlpool_ctl->freeze_comment);
+ if (jnlpool->jnlpool_ctl->freeze)
+ util_out_print(" Freeze Comment: !AZ", TRUE, jnlpool->jnlpool_ctl->freeze_comment);
return (instance_frozen ? (SRV_ERR + NORMAL_SHUTDOWN) : NORMAL_SHUTDOWN);
}
@@ -45,21 +46,21 @@ int gtmsource_setfreeze(void)
if (gtmsource_options.freezeval)
{
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK); /* sets gtmsource_state */
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK); /* sets gtmsource_state */
} else
assert(!holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- jnlpool.jnlpool_ctl->freeze = gtmsource_options.freezeval;
+ jnlpool->jnlpool_ctl->freeze = gtmsource_options.freezeval;
if (gtmsource_options.setcomment)
- STRNCPY_STR(jnlpool.jnlpool_ctl->freeze_comment, gtmsource_options.freeze_comment,
- SIZEOF(jnlpool.jnlpool_ctl->freeze_comment));
+ STRNCPY_STR(jnlpool->jnlpool_ctl->freeze_comment, gtmsource_options.freeze_comment,
+ SIZEOF(jnlpool->jnlpool_ctl->freeze_comment));
if (gtmsource_options.freezeval)
{
- send_msg(VARLSTCNT(3) ERR_REPLINSTFROZEN, 1, jnlpool.repl_inst_filehdr->inst_info.this_instname);
- send_msg(VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool.jnlpool_ctl->freeze_comment);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ send_msg_csa(NULL, VARLSTCNT(3) ERR_REPLINSTFROZEN, 1, jnlpool->repl_inst_filehdr->inst_info.this_instname);
+ send_msg_csa(NULL, VARLSTCNT(3) ERR_REPLINSTFREEZECOMMENT, 1, jnlpool->jnlpool_ctl->freeze_comment);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
} else
{
- send_msg(VARLSTCNT(3) ERR_REPLINSTUNFROZEN, 1, jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ send_msg_csa(NULL, VARLSTCNT(3) ERR_REPLINSTUNFROZEN, 1, jnlpool->repl_inst_filehdr->inst_info.this_instname);
}
return (NORMAL_SHUTDOWN);
}
diff --git a/sr_unix/gtmsource_get_opt.c b/sr_unix/gtmsource_get_opt.c
index b292109..b46c5c3 100755
--- a/sr_unix/gtmsource_get_opt.c
+++ b/sr_unix/gtmsource_get_opt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2016 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -68,7 +68,7 @@ int gtmsource_get_opt(void)
char *c, *connect_parm, *connect_parms_str, *connect_parm_token_str;
char tmp_connect_parms_str[GTMSOURCE_CONN_PARMS_LEN + 1];
char freeze_comment[SIZEOF(gtmsource_options.freeze_comment)];
- char freeze_val[SIZEOF("OFF")]; /* "ON" or "OFF" */
+ char freeze_val[SIZEOF("OFF")]; /* "ON" or "OFF", including null terminator */
char inst_name[MAX_FN_LEN + 1], *ip_end, *strtokptr;
char secondary_sys[MAX_SECONDARY_LEN];
char statslog_val[SIZEOF("OFF")]; /* "ON" or "OFF" */
@@ -391,12 +391,13 @@ int gtmsource_get_opt(void)
}
if (gtmsource_options.statslog)
{
- statslog_val_len = 4; /* max(strlen("ON"), strlen("OFF")) + 1 */
+ statslog_val_len = SIZEOF(statslog_val) - 1;
if (!cli_get_str("STATSLOG", statslog_val, &statslog_val_len))
{
util_out_print("Error parsing STATSLOG qualifier", TRUE);
return(-1);
}
+ statslog_val[statslog_val_len] = '\0';
cli_strupper(statslog_val);
if (0 == STRCMP(statslog_val, "ON"))
gtmsource_options.statslog = TRUE;
@@ -410,10 +411,11 @@ int gtmsource_get_opt(void)
}
if (cli_present("FREEZE") == CLI_PRESENT)
{
- freeze_val_len = SIZEOF(freeze_val);
+ freeze_val_len = SIZEOF(freeze_val) - 1;
if (cli_get_str("FREEZE", freeze_val, &freeze_val_len))
{
gtmsource_options.setfreeze = TRUE;
+ freeze_val[freeze_val_len] = '\0';
cli_strupper(freeze_val);
if (0 == STRCMP(freeze_val, "ON"))
gtmsource_options.freezeval = TRUE;
diff --git a/sr_unix/gtmsource_heartbeat.c b/sr_unix/gtmsource_heartbeat.c
index d346018..3f6583b 100755
--- a/sr_unix/gtmsource_heartbeat.c
+++ b/sr_unix/gtmsource_heartbeat.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2015 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -42,7 +42,7 @@
#include "gtmsource_heartbeat.h"
#include "relqop.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF int gtmsource_sock_fd;
GBLREF boolean_t gtmsource_logstats;
GBLREF int gtmsource_log_fd;
@@ -65,7 +65,8 @@ void gtmsource_heartbeat_timer(TID tid, int4 interval_len, int *interval_ptr)
assert(0 != gtmsource_now);
UNIX_ONLY(assert(*interval_ptr == heartbeat_period);) /* interval_len and interval_ptr are dummies on VMS */
gtmsource_now += heartbeat_period; /* cannot use *interval_ptr on VMS */
- REPL_DPRINT4("Repeating heartbeat timer with %d s\tSource now is %ld\tTime now is %ld\n", heartbeat_period, gtmsource_now, time(NULL));
+ REPL_DPRINT4("Repeating heartbeat timer with %d s\tSource now is %ld\tTime now is %ld\n", heartbeat_period,
+ gtmsource_now, time(NULL));
start_timer((TID)gtmsource_heartbeat_timer, heartbeat_period * 1000, gtmsource_heartbeat_timer, SIZEOF(heartbeat_period),
&heartbeat_period); /* start_timer expects time interval in milli seconds, heartbeat_period is in seconds */
}
@@ -77,8 +78,8 @@ int gtmsource_init_heartbeat(void)
assert(NULL == repl_heartbeat_que_head);
- heartbeat_period = jnlpool.gtmsource_local->connect_parms[GTMSOURCE_CONN_HEARTBEAT_PERIOD];
- heartbeat_max_wait = jnlpool.gtmsource_local->connect_parms[GTMSOURCE_CONN_HEARTBEAT_MAX_WAIT];
+ heartbeat_period = jnlpool->gtmsource_local->connect_parms[GTMSOURCE_CONN_HEARTBEAT_PERIOD];
+ heartbeat_max_wait = jnlpool->gtmsource_local->connect_parms[GTMSOURCE_CONN_HEARTBEAT_MAX_WAIT];
num_q_entries = DIVIDE_ROUND_UP(heartbeat_max_wait, heartbeat_period) + 2;
REPL_DPRINT4("Initialized heartbeat, heartbeat_period = %d s, heartbeat_max_wait = %d s, num_q_entries = %d\n",
heartbeat_period, heartbeat_max_wait, num_q_entries);
@@ -105,7 +106,8 @@ int gtmsource_init_heartbeat(void)
*/
start_timer((TID)gtmsource_heartbeat_timer, heartbeat_period * 1000, gtmsource_heartbeat_timer, SIZEOF(heartbeat_period),
&heartbeat_period); /* start_timer expects time interval in milli seconds, heartbeat_period is in seconds */
- REPL_DPRINT4("Started heartbeat timer with %d s\tSource now is %ld\tTime now is %ld\n", heartbeat_period, gtmsource_now, time(NULL));
+ REPL_DPRINT4("Started heartbeat timer with %d s\tSource now is %ld\tTime now is %ld\n",
+ heartbeat_period, gtmsource_now, time(NULL));
heartbeat_stalled = FALSE;
earliest_sent_time = 0;
return (SS_NORMAL);
@@ -113,7 +115,8 @@ int gtmsource_init_heartbeat(void)
int gtmsource_stop_heartbeat(void)
{
- REPL_DPRINT4("Stopping heartbeat timer with %d s\tSource now is %ld\tTime now is %ld\n", heartbeat_period, gtmsource_now, time(NULL));
+ REPL_DPRINT4("Stopping heartbeat timer with %d s\tSource now is %ld\tTime now is %ld\n",
+ heartbeat_period, gtmsource_now, time(NULL));
cancel_timer((TID)gtmsource_heartbeat_timer);
if (NULL != repl_heartbeat_que_head)
free(repl_heartbeat_que_head);
@@ -172,7 +175,7 @@ int gtmsource_send_heartbeat(time_t *now)
heartbeat_element = (repl_heartbeat_que_entry_t *)remqh((que_ent_ptr_t)repl_heartbeat_free_head);
if (NULL == heartbeat_element) /* Too many pending heartbeats, send later */
return (SS_NORMAL);
- QWASSIGN(*(seq_num *)&heartbeat_element->heartbeat.ack_seqno[0], jnlpool.jnlpool_ctl->jnl_seqno);
+ QWASSIGN(*(seq_num *)&heartbeat_element->heartbeat.ack_seqno[0], jnlpool->jnlpool_ctl->jnl_seqno);
*(gtm_time4_t *)&heartbeat_element->heartbeat.ack_time[0] = (gtm_time4_t)(*now);
heartbeat_element->heartbeat.type = REPL_HEARTBEAT;
@@ -202,7 +205,7 @@ int gtmsource_send_heartbeat(time_t *now)
repl_log(gtmsource_log_fp, TRUE, TRUE, "Connection reset while attempting to send heartbeat. Status = %d ; %s\n",
status, STRERROR(status));
repl_close(>msource_sock_fd);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
return (SS_NORMAL);
}
if (EREPL_SEND == repl_errno)
diff --git a/sr_unix/gtmsource_jnlpool.c b/sr_unix/gtmsource_jnlpool.c
index 6b394d9..dcd9143 100755
--- a/sr_unix/gtmsource_jnlpool.c
+++ b/sr_unix/gtmsource_jnlpool.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2011 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -38,7 +39,7 @@
#include "repl_inst_dump.h"
#include "cli.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
GBLREF boolean_t detail_specified; /* set to TRUE if -DETAIL is specified */
GBLREF uint4 section_offset; /* Used by PRINT_OFFSET_PREFIX macro in repl_inst_dump.c */
@@ -52,34 +53,34 @@ int gtmsource_jnlpool(void)
boolean_t value_present;
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- assert(NULL == jnlpool.gtmsource_local);
+ assert((NULL != jnlpool) && (NULL == jnlpool->gtmsource_local));
if (CLI_PRESENT == cli_present("NAME"))
{
util_out_print("Error: NAME cannot be used with JNLPOOL", TRUE);
- rts_error(VARLSTCNT(1) ERR_MUPCLIERR);
+ rts_error_csa(NULL, VARLSTCNT(1) ERR_MUPCLIERR);
}
if (CLI_PRESENT == cli_present("SHOW"))
{
detail_specified = (CLI_PRESENT == cli_present("DETAIL"));
section_offset = 0;
- repl_inst_dump_jnlpoolctl(jnlpool.jnlpool_ctl);
- section_offset = (uint4)((sm_uc_ptr_t)jnlpool.repl_inst_filehdr - (sm_uc_ptr_t)jnlpool.jnlpool_ctl);
- repl_inst_dump_filehdr(jnlpool.repl_inst_filehdr);
- section_offset = (uint4)((sm_uc_ptr_t)jnlpool.gtmsrc_lcl_array - (sm_uc_ptr_t)jnlpool.jnlpool_ctl);
- repl_inst_dump_gtmsrclcl(jnlpool.gtmsrc_lcl_array);
- section_offset = (uint4)((sm_uc_ptr_t)jnlpool.gtmsource_local_array - (sm_uc_ptr_t)jnlpool.jnlpool_ctl);
- repl_inst_dump_gtmsourcelocal(jnlpool.gtmsource_local_array);
+ repl_inst_dump_jnlpoolctl(jnlpool->jnlpool_ctl);
+ section_offset = (uint4)((sm_uc_ptr_t)jnlpool->repl_inst_filehdr - (sm_uc_ptr_t)jnlpool->jnlpool_ctl);
+ repl_inst_dump_filehdr(jnlpool->repl_inst_filehdr);
+ section_offset = (uint4)((sm_uc_ptr_t)jnlpool->gtmsrc_lcl_array - (sm_uc_ptr_t)jnlpool->jnlpool_ctl);
+ repl_inst_dump_gtmsrclcl(jnlpool->gtmsrc_lcl_array);
+ section_offset = (uint4)((sm_uc_ptr_t)jnlpool->gtmsource_local_array - (sm_uc_ptr_t)jnlpool->jnlpool_ctl);
+ repl_inst_dump_gtmsourcelocal(jnlpool->gtmsource_local_array);
}
if (CLI_PRESENT == cli_present("CHANGE"))
{
mupcli_get_offset_size_value(&offset, &size, &value, &value_present);
- if (size > jnlpool.jnlpool_ctl->jnlpool_size)
+ if (size > jnlpool->jnlpool_ctl->jnlpool_size)
{
util_out_print("Error: SIZE specified [0x!XL] is greater than size of journal pool [0x!XL]", TRUE,
- size, jnlpool.jnlpool_ctl->jnlpool_size);
- rts_error(VARLSTCNT(1) ERR_MUPCLIERR);
+ size, jnlpool->jnlpool_ctl->jnlpool_size);
+ rts_error_csa(NULL, VARLSTCNT(1) ERR_MUPCLIERR);
}
- mupcli_edit_offset_size_value(&((sm_uc_ptr_t)jnlpool.jnlpool_ctl)[offset], offset, size, value, value_present);
+ mupcli_edit_offset_size_value(&((sm_uc_ptr_t)jnlpool->jnlpool_ctl)[offset], offset, size, value, value_present);
}
return (NORMAL_SHUTDOWN);
}
diff --git a/sr_unix/gtmsource_losttncomplete.c b/sr_unix/gtmsource_losttncomplete.c
index 481f864..5df705b 100755
--- a/sr_unix/gtmsource_losttncomplete.c
+++ b/sr_unix/gtmsource_losttncomplete.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -32,7 +33,7 @@
#include "cli.h"
#include "repl_log.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
int gtmsource_losttncomplete(void)
@@ -43,20 +44,20 @@ int gtmsource_losttncomplete(void)
uint4 exit_status;
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- assert(NULL == jnlpool.gtmsource_local);
+ assert((NULL != jnlpool) && (NULL == jnlpool->gtmsource_local));
repl_log(stderr, TRUE, TRUE, "Initiating LOSTTNCOMPLETE operation on instance [%s]\n",
- jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ jnlpool->repl_inst_filehdr->inst_info.this_instname);
/* If this is a root primary instance, propagate this information to secondaries as well so they reset zqgblmod_seqno to 0.
* If propagating primary, no need to send this to tertiaries as the receiver on the tertiary cannot have started with
* non-zero "zqgblmod_seqno" to begin with (PRIMARYNOTROOT error would have been issued).
*/
- if (!jnlpool.jnlpool_ctl->upd_disabled)
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke "grab_lock" and "rel_lock" unconditionally */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- jnlpool.jnlpool_ctl->send_losttn_complete = TRUE;
- gtmsourcelocal_ptr = jnlpool.gtmsource_local_array;
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ jnlpool->jnlpool_ctl->send_losttn_complete = TRUE;
+ gtmsourcelocal_ptr = jnlpool->gtmsource_local_array;
for (idx = 0; idx < NUM_GTMSRC_LCL; idx++, gtmsourcelocal_ptr++)
{
if (('\0' == gtmsourcelocal_ptr->secondary_instname[0])
@@ -65,7 +66,7 @@ int gtmsource_losttncomplete(void)
continue;
gtmsourcelocal_ptr->send_losttn_complete = TRUE;
}
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
/* Reset zqgblmod_seqno and zqgblmod_tn to 0 in this instance as well */
exit_status = repl_inst_reset_zqgblmod_seqno_and_tn();
diff --git a/sr_unix/gtmsource_mode_change.c b/sr_unix/gtmsource_mode_change.c
index e22a1b2..371dc89 100755
--- a/sr_unix/gtmsource_mode_change.c
+++ b/sr_unix/gtmsource_mode_change.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2015 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -36,7 +36,7 @@
#include "repl_log.h"
#include "repl_instance.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
error_def(ERR_REPLLOGOPN);
@@ -54,16 +54,16 @@ int gtmsource_mode_change(int to_mode)
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
repl_log(stdout, TRUE, TRUE, "Initiating %s operation on source server pid [%d] for secondary instance [%s]\n",
(GTMSOURCE_MODE_ACTIVE_REQUESTED == to_mode) ? "ACTIVATE" : "DEACTIVATE",
- jnlpool.gtmsource_local->gtmsource_pid, jnlpool.gtmsource_local->secondary_instname);
- if ((jnlpool.gtmsource_local->mode == GTMSOURCE_MODE_ACTIVE_REQUESTED)
- || (jnlpool.gtmsource_local->mode == GTMSOURCE_MODE_PASSIVE_REQUESTED))
+ jnlpool->gtmsource_local->gtmsource_pid, jnlpool->gtmsource_local->secondary_instname);
+ if ((jnlpool->gtmsource_local->mode == GTMSOURCE_MODE_ACTIVE_REQUESTED)
+ || (jnlpool->gtmsource_local->mode == GTMSOURCE_MODE_PASSIVE_REQUESTED))
{
repl_log(stderr, FALSE, TRUE, "Source Server %s already requested, not changing mode\n",
(to_mode == GTMSOURCE_MODE_ACTIVE_REQUESTED) ? "ACTIVATE" : "DEACTIVATE");
return (ABNORMAL_SHUTDOWN);
}
- if (((GTMSOURCE_MODE_ACTIVE == jnlpool.gtmsource_local->mode) && (GTMSOURCE_MODE_ACTIVE_REQUESTED == to_mode))
- || ((GTMSOURCE_MODE_PASSIVE == jnlpool.gtmsource_local->mode) && (GTMSOURCE_MODE_PASSIVE_REQUESTED == to_mode)))
+ if (((GTMSOURCE_MODE_ACTIVE == jnlpool->gtmsource_local->mode) && (GTMSOURCE_MODE_ACTIVE_REQUESTED == to_mode))
+ || ((GTMSOURCE_MODE_PASSIVE == jnlpool->gtmsource_local->mode) && (GTMSOURCE_MODE_PASSIVE_REQUESTED == to_mode)))
{
repl_log(stderr, FALSE, TRUE, "Source Server already %s, not changing mode\n",
(to_mode == GTMSOURCE_MODE_ACTIVE_REQUESTED) ? "ACTIVE" : "PASSIVE");
@@ -71,7 +71,7 @@ int gtmsource_mode_change(int to_mode)
}
assert(ROOTPRIMARY_UNSPECIFIED != gtmsource_options.rootprimary);
/*check if the new log file is writable*/
- if ('\0' != gtmsource_options.log_file[0] && 0 != STRCMP(jnlpool.gtmsource_local->log_file, gtmsource_options.log_file))
+ if ('\0' != gtmsource_options.log_file[0] && 0 != STRCMP(jnlpool->gtmsource_local->log_file, gtmsource_options.log_file))
{
OPENFILE3_CLOEXEC(gtmsource_options.log_file,
O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, log_fd);
@@ -89,44 +89,44 @@ int gtmsource_mode_change(int to_mode)
assert(close_status==0);
}
if ((GTMSOURCE_MODE_ACTIVE_REQUESTED == to_mode)
- && (ROOTPRIMARY_SPECIFIED == gtmsource_options.rootprimary) && jnlpool.jnlpool_ctl->upd_disabled)
+ && (ROOTPRIMARY_SPECIFIED == gtmsource_options.rootprimary) && jnlpool->jnlpool_ctl->upd_disabled)
{ /* ACTIVATE is specified with ROOTPRIMARY on a journal pool that was created with PROPAGATEPRIMARY. This is a
* case of transition from propagating primary to root primary. Enable updates in this journal pool and append
* a histinfo record to the replication instance file. The function "gtmsource_rootprimary_init" does just that.
*/
- gtmsource_rootprimary_init(jnlpool.jnlpool_ctl->jnl_seqno);
+ gtmsource_rootprimary_init(jnlpool->jnlpool_ctl->jnl_seqno);
}
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke "grab_lock" and "rel_lock" unconditionally */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
/* Any ACTIVATE/DEACTIVATE versus ROOTPRIMARY/PROPAGATE incompatibilities have already been checked in the
* function "jnlpool_init" so go ahead and document the impending activation/deactivation and return.
* This flag will be eventually detected by the concurrently running source server which will then change mode.
*/
if (GTMSOURCE_MODE_ACTIVE_REQUESTED == to_mode)
{
- jnlpool.gtmsource_local->secondary_port = gtmsource_options.secondary_port;
- STRCPY(jnlpool.gtmsource_local->secondary_host, gtmsource_options.secondary_host);
- jnlpool.gtmsource_local->secondary_port = gtmsource_options.secondary_port;
- memcpy(&jnlpool.gtmsource_local->connect_parms[0], >msource_options.connect_parms[0],
+ jnlpool->gtmsource_local->secondary_port = gtmsource_options.secondary_port;
+ STRCPY(jnlpool->gtmsource_local->secondary_host, gtmsource_options.secondary_host);
+ jnlpool->gtmsource_local->secondary_port = gtmsource_options.secondary_port;
+ memcpy(&jnlpool->gtmsource_local->connect_parms[0], >msource_options.connect_parms[0],
SIZEOF(gtmsource_options.connect_parms));
}
- if ('\0' != gtmsource_options.log_file[0] && 0 != STRCMP(jnlpool.gtmsource_local->log_file, gtmsource_options.log_file))
+ if ('\0' != gtmsource_options.log_file[0] && 0 != STRCMP(jnlpool->gtmsource_local->log_file, gtmsource_options.log_file))
{
repl_log(stdout, FALSE, TRUE, "Signaling change in log file from %s to %s\n",
- jnlpool.gtmsource_local->log_file, gtmsource_options.log_file);
- STRCPY(jnlpool.gtmsource_local->log_file, gtmsource_options.log_file);
- jnlpool.gtmsource_local->changelog |= REPLIC_CHANGE_LOGFILE;
+ jnlpool->gtmsource_local->log_file, gtmsource_options.log_file);
+ STRCPY(jnlpool->gtmsource_local->log_file, gtmsource_options.log_file);
+ jnlpool->gtmsource_local->changelog |= REPLIC_CHANGE_LOGFILE;
}
- if (0 != gtmsource_options.src_log_interval && jnlpool.gtmsource_local->log_interval != gtmsource_options.src_log_interval)
+ if (0 != gtmsource_options.src_log_interval && jnlpool->gtmsource_local->log_interval != gtmsource_options.src_log_interval)
{
repl_log(stdout, FALSE, TRUE, "Signaling change in log interval from %u to %u\n",
- jnlpool.gtmsource_local->log_interval, gtmsource_options.src_log_interval);
- jnlpool.gtmsource_local->log_interval = gtmsource_options.src_log_interval;
- jnlpool.gtmsource_local->changelog |= REPLIC_CHANGE_LOGINTERVAL;
+ jnlpool->gtmsource_local->log_interval, gtmsource_options.src_log_interval);
+ jnlpool->gtmsource_local->log_interval = gtmsource_options.src_log_interval;
+ jnlpool->gtmsource_local->changelog |= REPLIC_CHANGE_LOGINTERVAL;
}
- jnlpool.gtmsource_local->mode = to_mode;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ jnlpool->gtmsource_local->mode = to_mode;
+ rel_lock(jnlpool->jnlpool_dummy_reg);
REPL_DPRINT1("Change mode signalled\n");
return (NORMAL_SHUTDOWN);
}
diff --git a/sr_unix/gtmsource_needrestart.c b/sr_unix/gtmsource_needrestart.c
index 7f1090e..5f27894 100755
--- a/sr_unix/gtmsource_needrestart.c
+++ b/sr_unix/gtmsource_needrestart.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -30,7 +31,7 @@
#include "repl_log.h"
#include "repl_instance.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
GBLREF gtmsource_options_t gtmsource_options;
@@ -43,7 +44,7 @@ int gtmsource_needrestart(void)
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
if (NULL != gtmsource_local)
{
assert(!STRCMP(gtmsource_options.secondary_instname, gtmsource_local->secondary_instname));
@@ -53,13 +54,13 @@ int gtmsource_needrestart(void)
} else
repl_log(stderr, TRUE, TRUE, "Initiating NEEDRESTART operation for secondary instance [%s]\n",
gtmsource_options.secondary_instname);
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke "grab_lock" and "rel_lock" unconditionally */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- if ((NULL != gtmsource_local) && (gtmsource_local->connect_jnl_seqno >= jnlpool.jnlpool_ctl->start_jnl_seqno))
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ if ((NULL != gtmsource_local) && (gtmsource_local->connect_jnl_seqno >= jnlpool->jnlpool_ctl->start_jnl_seqno))
util_out_print("Secondary Instance [!AZ] DOES NOT NEED to be restarted", TRUE, gtmsource_local->secondary_instname);
else
util_out_print("Secondary Instance [!AZ] NEEDS to be restarted first", TRUE, gtmsource_options.secondary_instname);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
return (NORMAL_SHUTDOWN);
}
diff --git a/sr_unix/gtmsource_onln_rlbk_clnup.c b/sr_unix/gtmsource_onln_rlbk_clnup.c
index ad4d7e2..1f11498 100644
--- a/sr_unix/gtmsource_onln_rlbk_clnup.c
+++ b/sr_unix/gtmsource_onln_rlbk_clnup.c
@@ -35,8 +35,7 @@
#include "tp_frame.h"
GBLREF gtmsource_state_t gtmsource_state;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF seq_num gtmsource_save_read_jnl_seqno;
GBLREF uint4 process_id;
@@ -46,8 +45,8 @@ void gtmsource_onln_rlbk_clnup()
boolean_t was_crit;
sgmnt_addrs *repl_csa;
- gtmsource_local = jnlpool.gtmsource_local;
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ gtmsource_local = jnlpool->gtmsource_local;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
was_crit = repl_csa->now_crit;
assert(!repl_csa->hold_onto_crit);
assert(was_crit || (process_id == gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid)
@@ -78,15 +77,15 @@ void gtmsource_onln_rlbk_clnup()
*/
gtmsource_local->gtmsource_state = gtmsource_state = GTMSOURCE_HANDLE_ONLN_RLBK;
if (!was_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
/* We have to let the read files logic know that until we have sent data "upto" the current journal sequence number
* at this point, we cannot rely on the journal pool. Indicate this through the gtmsource_save_read_jnl_seqno global
* variable
*/
- gtmsource_save_read_jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ gtmsource_save_read_jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
GTMSOURCE_SET_READ_ADDR(gtmsource_local, jnlpool);
if (!was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
return;
}
diff --git a/sr_unix/gtmsource_process.c b/sr_unix/gtmsource_process.c
index a80e331..7798693 100644
--- a/sr_unix/gtmsource_process.c
+++ b/sr_unix/gtmsource_process.c
@@ -191,7 +191,7 @@ GBLREF uchar_ptr_t repl_filter_buff;
GBLREF int repl_filter_bufsiz;
GBLREF volatile time_t gtmsource_now;
GBLREF int gtmsource_sock_fd;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF gd_region *gv_cur_region;
@@ -437,7 +437,7 @@ void gtmsource_recv_ctl(void)
else if (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state)
break;
}
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
if ((SS_NORMAL == status) && (0 != recvd_len))
{ /* Process the received control message */
assert(MIN_REPL_MSGLEN == recvd_len);
@@ -690,16 +690,16 @@ int gtmsource_process(void)
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
DEBUG_ONLY(
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
assert(!repl_csa->hold_onto_crit); /* so we can do unconditional grab_lock/rel_lock */
ASSERT_VALID_JNLPOOL(repl_csa);
)
assert(REPL_MSG_HDRLEN == SIZEOF(jnldata_hdr_struct)); /* necessary for reading multiple transactions from jnlpool in
* a single attempt */
- jctl = jnlpool.jnlpool_ctl;
- gtmsource_local = jnlpool.gtmsource_local;
+ jctl = jnlpool->jnlpool_ctl;
+ gtmsource_local = jnlpool->gtmsource_local;
gtmsource_msgp = NULL;
gtmsource_msgbufsiz = MAX_REPL_MSGLEN;
if (ZLIB_CMPLVL_NONE != gtm_zlib_cmp_level)
@@ -751,7 +751,7 @@ int gtmsource_process(void)
* | |
* \--------------------->---------/
*/
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
/* Before entering the loop find the max EPOCH interval (for use in lock waits) */
max_epoch_interval = 0;
for (reg = gd_header->regions, region_top = gd_header->regions + gd_header->n_regions; reg < region_top; reg++)
@@ -780,7 +780,7 @@ int gtmsource_process(void)
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
}
- jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
repl_log(gtmsource_log_fp, TRUE, TRUE, "REPL INFO - Current Jnlpool Seqno : "INT8_FMT"\n",
jnl_seqno);
repl_log(gtmsource_log_fp, TRUE, TRUE, "REPL INFO - Last Seqno sent : "INT8_FMT"\n",
@@ -896,11 +896,11 @@ int gtmsource_process(void)
}
rollback_first = FALSE;
secondary_ahead = FALSE;
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
continue;
local_jnl_seqno = jctl->jnl_seqno;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
/* Take care to set the flush parameter in repl_log calls below to FALSE until at least the first message
* gets sent back. This is so the fetchresync rollback on the other side does not timeout before receiving
* a response. */
@@ -929,7 +929,7 @@ int gtmsource_process(void)
* next_histinfo_seqno. Note that we are fetching the value of "num_histinfo" without holding a lock on the instance
* file but that is ok since all we care about is if it is 0 or not. We do not rely on the actual value.
*/
- num_histinfo = jnlpool.repl_inst_filehdr->num_histinfo;
+ num_histinfo = jnlpool->repl_inst_filehdr->num_histinfo;
assert(0 <= num_histinfo);
assert(num_histinfo || jctl->upd_disabled);
gtmsource_local->next_histinfo_num = -1;/* Initial value. Reset by the call to "gtmsource_set_next_histinfo_seqno"
@@ -949,7 +949,7 @@ int gtmsource_process(void)
return (SS_NORMAL);
else if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
break; /* Break this loop */
- num_histinfo = jnlpool.repl_inst_filehdr->num_histinfo;
+ num_histinfo = jnlpool->repl_inst_filehdr->num_histinfo;
if (num_histinfo) /* Number of histinfos is non-zero */
break;
} while (TRUE);
@@ -992,7 +992,7 @@ int gtmsource_process(void)
skip_last_histinfo_check = TRUE;
else
{
- assert(jnlpool.repl_inst_filehdr->num_histinfo); /* should be at least 1 history record */
+ assert(jnlpool->repl_inst_filehdr->num_histinfo); /* should be at least 1 history record */
/* If -updateresync is specified and receiver instance seqno is exactly equal to the
* start_seqno of the earliest history record in the instance file, then skip last
* histinfo check. Note that in case both source and receiver instances are supplementary,
@@ -1000,12 +1000,12 @@ int gtmsource_process(void)
* the 0th history record in the instance file corresponds to the 0th stream. So it is
* safe to look at the start_seqno of just the 0th history record in all cases.
*/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
continue;
status = repl_inst_histinfo_get(0, &local_histinfo);
assert(0 == status); /* Since we pass histinfo_num of 0 which is >=0 and < num_histinfo */
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (local_histinfo.start_seqno == recvd_seqno)
skip_last_histinfo_check = TRUE;
else
@@ -1016,14 +1016,14 @@ int gtmsource_process(void)
}
if (!skip_last_histinfo_check)
{ /* Find histinfo record in the local instance file corresponding to seqno "recvd_seqno-1" */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
continue;
assert(recvd_seqno <= local_jnl_seqno);
assert(recvd_seqno <= jctl->jnl_seqno);
assert((INVALID_SUPPL_STRM == strm_index) || (0 == strm_index));
status = repl_inst_histinfo_find_seqno(recvd_seqno, strm_index, &local_histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
assert((0 != status) || (local_histinfo.start_seqno < recvd_seqno));
if (0 != status)
{ /* If recvd_seqno is the earliest history record's start_seqno and -udpateresync was
@@ -1076,7 +1076,7 @@ int gtmsource_process(void)
* (i.e. not rollback) and if we still intend on sending a REPL_WILL_RESTART_WITH_INFO
* message.
*/
- assert(this_side->is_supplementary == jnlpool.repl_inst_filehdr->is_supplementary);
+ assert(this_side->is_supplementary == jnlpool->repl_inst_filehdr->is_supplementary);
if (this_side->is_supplementary && remote_side->is_supplementary
&& (REPL_START_JNL_SEQNO == recvd_msg_type)
&& !rollback_first && !secondary_ahead)
@@ -1103,7 +1103,7 @@ int gtmsource_process(void)
reply_msgp->len = MIN_REPL_MSGLEN;
reply_msgp->proto_ver = REPL_PROTO_VER_THIS;
reply_msgp->node_endianness = NODE_ENDIANNESS;
- reply_msgp->is_supplementary = jnlpool.repl_inst_filehdr->is_supplementary;
+ reply_msgp->is_supplementary = jnlpool->repl_inst_filehdr->is_supplementary;
assert((1 != recvd_seqno) || !rollback_first);
if ((GTMSOURCE_SEARCHING_FOR_RESTART == gtmsource_state) || (REPL_START_JNL_SEQNO == recvd_msg_type))
{
@@ -1240,14 +1240,14 @@ int gtmsource_process(void)
/* After having established connection, initialize a few fields in the gtmsource_local
* structure and flush those changes to the instance file on disk.
*/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
continue;
gtmsource_local->connect_jnl_seqno = jctl->jnl_seqno;
gtmsource_local->send_losttn_complete = jctl->send_losttn_complete;
/* Now that "connect_jnl_seqno" has been updated, flush it to corresponding gtmsrc_lcl on disk */
repl_inst_flush_gtmsrc_lcl(); /* this requires the jnlpool lock to be held */
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (REPL_WILL_RESTART_WITH_INFO != reply_msgp->type)
{
assert(reply_msgp->type == REPL_RESYNC_SEQNO || reply_msgp->type == REPL_ROLLBACK_FIRST);
@@ -1257,8 +1257,8 @@ int gtmsource_process(void)
INT8_FMT" "INT8_FMTX"\n",
(*(seq_num *)&reply_msgp->start_seqno[0]), (*(seq_num *)&reply_msgp->start_seqno[0]));
region_top = gd_header->regions + gd_header->n_regions;
- assert(NULL != jnlpool.jnlpool_dummy_reg);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
continue;
zqgblmod_seqno = jctl->max_zqgblmod_seqno;
@@ -1274,7 +1274,7 @@ int gtmsource_process(void)
jctl->send_losttn_complete = FALSE;
gtmsource_local->send_losttn_complete = jctl->send_losttn_complete;
}
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
REPL_DPRINT2("BEFORE FINDING RESYNC - zqgblmod_seqno is "INT8_FMT, zqgblmod_seqno);
REPL_DPRINT2(", curr_seqno is "INT8_FMT"\n", jctl->jnl_seqno);
if (zqgblmod_seqno > resync_seqno)
@@ -1439,11 +1439,11 @@ int gtmsource_process(void)
losttncomplete_msg.len = MIN_REPL_MSGLEN;
gtmsource_repl_send((repl_msg_ptr_t)&losttncomplete_msg, "REPL_LOSTTNCOMPLETE",
MAX_SEQNO, INVALID_SUPPL_STRM);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
break; /* the outerloop will continue */
gtmsource_local->send_losttn_complete = FALSE;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
if (gtmsource_local->send_new_histrec)
{ /* We are at the beginning of a new histinfo record boundary. Send a REPL_HISTREC message
@@ -1673,7 +1673,7 @@ int gtmsource_process(void)
* case of a multisite scenario, it is always the receiver server that tells the
* sequence number from where the source server should start sending. So, even if
* the source server notes down a higher value of journal sequence number in
- * jnlpool.gtmsource_local->read_jnl_seqno, it is not a problem since the receiver
+ * jnlpool->gtmsource_local->read_jnl_seqno, it is not a problem since the receiver
* server will communicate the appropriate sequence number as part of the histinfo
* exchange.
*/
@@ -1723,16 +1723,16 @@ int gtmsource_process(void)
if (intfilter_error)
{ /* Now that we are done sending whatever buffer was filter converted, issue
* the error. This will bring down the source server (due to the rts_error).
- * At this point, jnlpool.gtmsource_local->read_jnl_seqno could effectively
+ * At this point, jnlpool->gtmsource_local->read_jnl_seqno could effectively
* be behind the receiver server's journal sequence number. But, that is
* okay since as part of reconnection (when the source server comes back up),
- * the receiever server will communicate the appropriate sequence number as
+ * the receiver server will communicate the appropriate sequence number as
* part of the histinfo exchange.
*/
assert(filter_seqno <= post_read_seqno);
INT_FILTER_RTS_ERROR(filter_seqno, repl_errno); /* no return */
}
- jnlpool.gtmsource_local->read_jnl_seqno = post_read_seqno;
+ jnlpool->gtmsource_local->read_jnl_seqno = post_read_seqno;
repl_source_cmp_sent += (qw_num)send_tr_len;
repl_source_msg_sent += (qw_num)pre_cmpmsglen;
repl_source_data_sent += (qw_num)(pre_cmpmsglen)
@@ -1830,10 +1830,10 @@ int gtmsource_process(void)
* in immediate mode (second parameter FALSE below). If not
* available, then try again next iteration.
*/
- if (grab_lock(jnlpool.jnlpool_dummy_reg, FALSE, GRAB_LOCK_ONLY))
+ if (grab_lock(jnlpool->jnlpool_dummy_reg, FALSE, GRAB_LOCK_ONLY))
{
- repl_phase2_cleanup(&jnlpool);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ repl_phase2_cleanup(jnlpool);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
phase2_commit_wait_cnt = 0;
} else
phase2_commit_wait_cnt--; /* Try again next iteration */
diff --git a/sr_unix/gtmsource_process_ops.c b/sr_unix/gtmsource_process_ops.c
index 913605c..214cc1c 100644
--- a/sr_unix/gtmsource_process_ops.c
+++ b/sr_unix/gtmsource_process_ops.c
@@ -102,7 +102,7 @@ GBLREF int gtmsource_msgbufsiz;
GBLREF int gtmsource_sock_fd;
GBLREF int repl_filter_bufsiz;
GBLREF int repl_max_send_buffsize, repl_max_recv_buffsize;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF repl_conn_info_t *this_side, *remote_side;
GBLREF repl_ctl_element *repl_ctl_list;
GBLREF repl_msg_ptr_t gtmsource_cmpmsgp;
@@ -143,7 +143,7 @@ int gtmsource_est_conn()
sockaddr_ptr secondary_sa;
gtmsource_local_ptr_t gtmsource_local;
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
# ifdef GTM_TLS
assert(!repl_tls.enabled); /* Set after REPL_NEED_TLS_INFO/REPL_TLS_INFO messages are exchanged. */
assert(REPLTLS_RENEG_STATE_NONE == repl_tls.renegotiate_state);
@@ -425,7 +425,7 @@ int gtmsource_recv_restart(seq_num *recvd_jnl_seqno, int *msg_type, int *start_f
SETUP_THREADGBL_ACCESS;
status = SS_NORMAL;
- assert(remote_side == &jnlpool.gtmsource_local->remote_side);
+ assert(remote_side == &jnlpool->gtmsource_local->remote_side);
DEBUG_ONLY(*msg_type = -1);
for (log_waitmsg = TRUE; SS_NORMAL == status; )
{
@@ -574,7 +574,7 @@ int gtmsource_recv_restart(seq_num *recvd_jnl_seqno, int *msg_type, int *start_f
} else
{ /* Issue REPL2OLD error because receiver is dual-site */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPL2OLD, 4, LEN_AND_STR(UNKNOWN_INSTNAME),
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname));
}
assert(*start_flags & START_FLAG_HASINFO); /* V4.2+ versions have jnl ver in the start msg */
remote_side->jnl_ver = ((repl_start_msg_ptr_t)&msg)->jnl_ver;
@@ -599,7 +599,7 @@ int gtmsource_recv_restart(seq_num *recvd_jnl_seqno, int *msg_type, int *start_f
remote_side->tls_requested = (*start_flags & START_FLAG_ENABLE_TLS) ? TRUE : FALSE;
if (REPL_PROTO_VER_REMOTE_LOGPATH > remote_side->proto_ver)
return SS_NORMAL; /* Remote side doesn't support REPL_LOGFILE_INFO message */
- SEND_REPL_LOGFILE_INFO(jnlpool.gtmsource_local->log_file, logfile_msg);
+ SEND_REPL_LOGFILE_INFO(jnlpool->gtmsource_local->log_file, logfile_msg);
log_waitmsg = FALSE;
} else if (REPL_FETCH_RESYNC == msg.type)
{ /* Determine the protocol version of the receiver side.
@@ -622,7 +622,7 @@ int gtmsource_recv_restart(seq_num *recvd_jnl_seqno, int *msg_type, int *start_f
"%llu [0x%llx]\n", INT8_PRINT(*recvd_jnl_seqno), INT8_PRINT(*recvd_jnl_seqno));
if (REPL_PROTO_VER_REMOTE_LOGPATH > remote_side->proto_ver)
return SS_NORMAL; /* Remote side doesn't support REPL_LOGFILE_INFO message */
- SEND_REPL_LOGFILE_INFO(jnlpool.gtmsource_local->log_file, logfile_msg);
+ SEND_REPL_LOGFILE_INFO(jnlpool->gtmsource_local->log_file, logfile_msg);
log_waitmsg = FALSE;
} else if (REPL_XOFF_ACK_ME == msg.type)
{
@@ -649,7 +649,7 @@ int gtmsource_recv_restart(seq_num *recvd_jnl_seqno, int *msg_type, int *start_f
assert(FALSE);
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
return (SS_NORMAL);
}
}
@@ -668,9 +668,9 @@ int gtmsource_srch_restart(seq_num recvd_jnl_seqno, int recvd_start_flags)
gd_region *reg, *region_top;
sgmnt_addrs *csa, *repl_csa;
- jctl = jnlpool.jnlpool_ctl;
+ jctl = jnlpool->jnlpool_ctl;
jnlpool_size = jctl->jnlpool_size;
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
assert(recvd_jnl_seqno <= jctl->jnl_seqno);
cur_read_jnl_seqno = gtmsource_local->read_jnl_seqno;
if (recvd_jnl_seqno > cur_read_jnl_seqno)
@@ -690,11 +690,11 @@ int gtmsource_srch_restart(seq_num recvd_jnl_seqno, int recvd_start_flags)
*/
if ((READ_FILE != gtmsource_local->read_state) || (recvd_jnl_seqno > gtmsource_save_read_jnl_seqno))
{
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
gtmsource_local->read_state = READ_FILE;
gtmsource_save_read_jnl_seqno = jctl->jnl_seqno;
GTMSOURCE_SET_READ_ADDR(gtmsource_local, jnlpool);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
} else if (READ_POOL == gtmsource_local->read_state)
{ /* Follow the back-chain in the Journal Pool to find whether or not recvd_jnl_seqno is in the Pool */
@@ -747,7 +747,7 @@ int gtmsource_srch_restart(seq_num recvd_jnl_seqno, int recvd_start_flags)
* That will bring jctl->write_addr more uptodate. And then redo the read_addr/write_addr check.
*/
if (jctl->write_addr != jctl->rsrv_write_addr)
- repl_phase2_cleanup(&jnlpool);
+ repl_phase2_cleanup(jnlpool);
if (QWEQ(cur_read_addr, jctl->write_addr))
{ /* We caught a GTM process writing cur_read_jnl_seqno + 1,
* we cannot rely on lastwrite_len as it may or may not have changed.
@@ -763,7 +763,7 @@ int gtmsource_srch_restart(seq_num recvd_jnl_seqno, int recvd_start_flags)
* That will bring jctl->write_addr more uptodate.
*/
if (jctl->write_addr != jctl->rsrv_write_addr)
- repl_phase2_cleanup(&jnlpool);
+ repl_phase2_cleanup(jnlpool);
}
repl_log(gtmsource_log_fp, TRUE, FALSE, "SEARCHING RESYNC POINT IN POOL : "
"GTM process finished writing journal records to the pool\n");
@@ -775,7 +775,7 @@ int gtmsource_srch_restart(seq_num recvd_jnl_seqno, int recvd_start_flags)
QWGT(cur_read_jnl_seqno, jctl->start_jnl_seqno))
{
assert(cur_read + SIZEOF(jnldata_hdr_struct) <= jnlpool_size);
- prev_tr_size = ((jnldata_hdr_ptr_t)(jnlpool.jnldata_base + cur_read))->prev_jnldata_len;
+ prev_tr_size = ((jnldata_hdr_ptr_t)(jnlpool->jnldata_base + cur_read))->prev_jnldata_len;
if ((prev_tr_size <= cur_read_addr) &&
jnlpool_hasnt_overflowed(jctl, jnlpool_size, cur_read_addr - prev_tr_size))
{
@@ -873,8 +873,8 @@ int gtmsource_get_jnlrecs(uchar_ptr_t buff, int *data_len, int maxbufflen, boole
SETUP_THREADGBL_ACCESS;
# endif
- jctl = jnlpool.jnlpool_ctl;
- gtmsource_local = jnlpool.gtmsource_local;
+ jctl = jnlpool->jnlpool_ctl;
+ gtmsource_local = jnlpool->gtmsource_local;
jnl_seqno = jctl->jnl_seqno;
read_jnl_seqno = gtmsource_local->read_jnl_seqno;
read_addr = gtmsource_local->read_addr;
@@ -889,7 +889,7 @@ int gtmsource_get_jnlrecs(uchar_ptr_t buff, int *data_len, int maxbufflen, boole
assert((0 <= index1) && (JPL_PHASE2_COMMIT_ARRAY_SIZE > index1));
if ((index1 != jctl->phase2_commit_index2) && jctl->phase2_commit_array[index1].write_complete
&& (LOCK_AVAILABLE == jctl->phase2_commit_latch.u.parts.latch_pid))
- repl_phase2_cleanup(&jnlpool);
+ repl_phase2_cleanup(jnlpool);
/* Now that write_addr is uptodate, go ahead and read jnl records */
write_addr = jctl->write_addr;
assert((0 != write_addr) || (read_jnl_seqno <= jctl->start_jnl_seqno));
@@ -1030,7 +1030,7 @@ void gtmsource_repl_send(repl_msg_ptr_t msg, char *msgtypestr, seq_num optional_
msgtypestr, status, STRERROR(status));
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
return;
}
if (EREPL_SEND == repl_errno)
@@ -1107,7 +1107,7 @@ static boolean_t gtmsource_repl_recv(repl_msg_ptr_t msg, int4 msglen, int4 msgty
msgtypestr, status, STRERROR(status));
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state =
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state =
GTMSOURCE_WAITING_FOR_CONNECTION;
return FALSE;
} else
@@ -1160,7 +1160,7 @@ static boolean_t gtmsource_repl_recv(repl_msg_ptr_t msg, int4 msglen, int4 msgty
gtmsource_repl_send((repl_msg_ptr_t)&xoff_ack, "REPL_XOFF_ACK", MAX_SEQNO, INVALID_SUPPL_STRM);
if ((GTMSOURCE_CHANGING_MODE == gtmsource_state) || (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state))
return FALSE; /* "gtmsource_repl_send" did not complete */
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_RESTART;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_RESTART;
return FALSE;
} else if (msgtype != msg->type)
{
@@ -1169,7 +1169,7 @@ static boolean_t gtmsource_repl_recv(repl_msg_ptr_t msg, int4 msglen, int4 msgty
". Closing connection.\n", msg->type, msgtype);
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
return FALSE;
} else
{
@@ -1353,7 +1353,7 @@ boolean_t gtmsource_exchange_tls_info(void)
"Status = %d; %s\n", status, STRERROR(status));
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
return FALSE;
}
errp = (-1 == status) ? (char *)gtm_tls_get_error() : STRERROR(status);
@@ -1364,7 +1364,7 @@ boolean_t gtmsource_exchange_tls_info(void)
repl_log(gtmsource_log_fp, TRUE, TRUE, "Plaintext fallback enabled. Closing and reconnecting without TLS/SSL.\n");
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
CLEAR_REPL_TLS_REQUESTED; /* As if -tlsid qualifier was never specified. */
return FALSE;
}
@@ -1381,8 +1381,8 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
repl_old_instinfo_msg_t old_instinfo_msg;
repl_old_needinst_msg_t old_needinst_msg;
- gtmsource_local = jnlpool.gtmsource_local;
- assert(NULL != jnlpool.repl_inst_filehdr); /* journal pool should be set up */
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr)); /* journal pool should be set up */
+ gtmsource_local = jnlpool->gtmsource_local;
assert(REPL_PROTO_VER_MULTISITE <= remote_side->proto_ver);
if (REPL_PROTO_VER_SUPPLEMENTARY > remote_side->proto_ver)
{ /* Use pre-supplementary protocol to communicate */
@@ -1390,10 +1390,10 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
memset(&old_needinst_msg, 0, SIZEOF(old_needinst_msg));
old_needinst_msg.type = REPL_OLD_NEED_INSTANCE_INFO;
old_needinst_msg.len = MIN_REPL_MSGLEN;
- memcpy(old_needinst_msg.instname, jnlpool.repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
+ memcpy(old_needinst_msg.instname, jnlpool->repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
old_needinst_msg.proto_ver = REPL_PROTO_VER_THIS;
old_needinst_msg.node_endianness = NODE_ENDIANNESS;
- old_needinst_msg.is_rootprimary = !(jnlpool.jnlpool_ctl->upd_disabled);
+ old_needinst_msg.is_rootprimary = !(jnlpool->jnlpool_ctl->upd_disabled);
gtmsource_repl_send((repl_msg_ptr_t)&old_needinst_msg, "REPL_OLD_NEED_INSTANCE_INFO",
MAX_SEQNO, INVALID_SUPPL_STRM);
if ((GTMSOURCE_CHANGING_MODE == gtmsource_state) || (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state))
@@ -1405,19 +1405,19 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
return FALSE; /* recv did not succeed */
assert(REPL_OLD_INSTANCE_INFO == old_instinfo_msg.type);
repl_log(gtmsource_log_fp, TRUE, FALSE, "Received secondary instance name is [%s]\n", old_instinfo_msg.instname);
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{ /* Issue REPL2OLD error because this is a supplementary instance and remote side runs
* on a GT.M version that does not understand the supplementary protocol */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPL2OLD, 4, LEN_AND_STR(old_instinfo_msg.instname),
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname));
}
/* Check if instance name in the REPL_OLD_INSTANCE_INFO message matches that in the source server command line */
- if (STRCMP(old_instinfo_msg.instname, jnlpool.gtmsource_local->secondary_instname))
+ if (STRCMP(old_instinfo_msg.instname, jnlpool->gtmsource_local->secondary_instname))
{ /* Instance name obtained from the receiver does not match what was specified in the
* source server command line. Issue error.
*/
sgtm_putmsg(print_msg, VARLSTCNT(6) ERR_REPLINSTSECMTCH, 4,
- LEN_AND_STR(old_instinfo_msg.instname), LEN_AND_STR(jnlpool.gtmsource_local->secondary_instname));
+ LEN_AND_STR(old_instinfo_msg.instname), LEN_AND_STR(jnlpool->gtmsource_local->secondary_instname));
repl_log(gtmsource_log_fp, TRUE, TRUE, print_msg);
status = gtmsource_shutdown(TRUE, NORMAL_SHUTDOWN) - NORMAL_SHUTDOWN;
gtmsource_exit(status);
@@ -1429,8 +1429,8 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
memset(&needinst_msg, 0, SIZEOF(needinst_msg));
needinst_msg.type = REPL_NEED_INSTINFO;
needinst_msg.len = SIZEOF(needinst_msg);
- memcpy(needinst_msg.instname, jnlpool.repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
- needinst_msg.lms_group_info = jnlpool.repl_inst_filehdr->lms_group_info;
+ memcpy(needinst_msg.instname, jnlpool->repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
+ needinst_msg.lms_group_info = jnlpool->repl_inst_filehdr->lms_group_info;
/* Need to byteswap a few multi-byte fields to take into account the receiver endianness */
assert(remote_side->endianness_known); /* only then is remote_side->cross_endian reliable */
/* Starting GT.M V62001, the receiver server expects an endian converted lms_group_info. So endian
@@ -1440,8 +1440,8 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
if (remote_side->cross_endian && (REPL_PROTO_VER_XENDIANFIXES <= remote_side->proto_ver))
ENDIAN_CONVERT_REPL_INST_UUID(&needinst_msg.lms_group_info);
needinst_msg.proto_ver = REPL_PROTO_VER_THIS;
- needinst_msg.is_rootprimary = !(jnlpool.jnlpool_ctl->upd_disabled);
- needinst_msg.is_supplementary = jnlpool.repl_inst_filehdr->is_supplementary;
+ needinst_msg.is_rootprimary = !(jnlpool->jnlpool_ctl->upd_disabled);
+ needinst_msg.is_supplementary = jnlpool->repl_inst_filehdr->is_supplementary;
needinst_msg.jnl_ver = JNL_VER_THIS;
gtmsource_repl_send((repl_msg_ptr_t)&needinst_msg, "REPL_NEED_INSTINFO", MAX_SEQNO, INVALID_SUPPL_STRM);
if ((GTMSOURCE_CHANGING_MODE == gtmsource_state) || (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state))
@@ -1455,15 +1455,15 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
repl_log(gtmsource_log_fp, TRUE, FALSE, "Received secondary instance name is [%s]\n", instinfo_msg.instname);
if (!remote_side->is_supplementary)
{ /* Remote side is non-supplementary */
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{ /* Issue SECNOTSUPPLEMENTARY error because this is a supplementary primary and secondary
* is not a supplementary instance.
*/
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_SECNOTSUPPLEMENTARY, 4,
- LEN_AND_STR(jnlpool.repl_inst_filehdr->inst_info.this_instname),
+ LEN_AND_STR(jnlpool->repl_inst_filehdr->inst_info.this_instname),
LEN_AND_STR(instinfo_msg.instname));
}
- } else if (!jnlpool.repl_inst_filehdr->is_supplementary)
+ } else if (!jnlpool->repl_inst_filehdr->is_supplementary)
{ /* Remote side is supplementary and Local side is non-supplementary.
* The REPL_INSTINFO message would have a non-zero "strm_jnl_seqno" field.
* Pass it back on to the caller.
@@ -1475,12 +1475,12 @@ boolean_t gtmsource_get_instance_info(boolean_t *secondary_was_rootprimary, seq_
*strm_jnl_seqno = instinfo_msg.strm_jnl_seqno;
}
/* Check if instance name in the REPL_INSTINFO message matches that in the source server command line */
- if (STRCMP(instinfo_msg.instname, jnlpool.gtmsource_local->secondary_instname))
+ if (STRCMP(instinfo_msg.instname, jnlpool->gtmsource_local->secondary_instname))
{ /* Instance name obtained from the receiver does not match what was specified in the
* source server command line. Issue error.
*/
sgtm_putmsg(print_msg, VARLSTCNT(6) ERR_REPLINSTSECMTCH, 4,
- LEN_AND_STR(instinfo_msg.instname), LEN_AND_STR(jnlpool.gtmsource_local->secondary_instname));
+ LEN_AND_STR(instinfo_msg.instname), LEN_AND_STR(jnlpool->gtmsource_local->secondary_instname));
repl_log(gtmsource_log_fp, TRUE, TRUE, print_msg);
status = gtmsource_shutdown(TRUE, NORMAL_SHUTDOWN) - NORMAL_SHUTDOWN;
gtmsource_exit(status);
@@ -1540,7 +1540,7 @@ boolean_t gtmsource_get_remote_histinfo(seq_num seqno, repl_histinfo *histinfo)
histinfo2_msg.start_seqno, histinfo2_msg.start_seqno);
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
return FALSE;
}
memset(histinfo, 0, SIZEOF(*histinfo));
@@ -1598,11 +1598,11 @@ boolean_t gtmsource_check_remote_strm_histinfo(seq_num seqno, boolean_t *rollbac
return FALSE; /* recv did not succeed */
assert(REPL_STRMINFO == strminfo_msg.type);
/* Verify that the list of known streams is identical on both sides */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
return FALSE; /* concurrent online rollback happened */
status = repl_inst_histinfo_find_seqno(seqno, INVALID_SUPPL_STRM, &local_histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
assert(0 == status); /* we are guaranteed to find this since we have already verified 0th stream matches */
/* Fix last_histinfo_num[] in local side to include "local_histinfo" too (which could have strm_index > 0) */
if (0 < local_histinfo.strm_index)
@@ -1653,12 +1653,12 @@ boolean_t gtmsource_check_remote_strm_histinfo(seq_num seqno, boolean_t *rollbac
return FALSE; /* recv did not succeed */
assert(REPL_HISTINFO == histinfo_msg.type);
/* Find corresponding history record on LOCAL side */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
return FALSE; /* concurrent online rollback happened */
status = repl_inst_histinfo_get(lcl_histinfo_num, &local_histinfo);
assert(0 == status); /* Since we pass histinfo_num of 0 which is >=0 and < num_histinfo */
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
/* Compare the two history records. If they are not identical for even one stream, signal rollback on receiver */
if (!gtmsource_is_histinfo_identical(&histinfo_msg.history, &local_histinfo, seqno, OK_TO_LOG_TRUE))
*rollback_first = TRUE;
@@ -1677,9 +1677,9 @@ void gtmsource_histinfo_get(int4 index, repl_histinfo *histinfo)
int4 status;
repl_msg_t instnohist_msg;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr)); /* journal pool should be set up */
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(udi->s_addrs.now_crit);
- assert(NULL != jnlpool.repl_inst_filehdr); /* journal pool should be set up */
status = repl_inst_histinfo_get(index, histinfo);
assert((0 == status) || (INVALID_HISTINFO_NUM == index));
assert((0 != status) || (index == histinfo->histinfo_num));
@@ -1700,7 +1700,7 @@ void gtmsource_histinfo_get(int4 index, repl_histinfo *histinfo)
repl_log(gtmsource_log_fp, TRUE, TRUE, "Connection reset due to above REPLINSTNOHIST error\n");
repl_close(>msource_sock_fd);
SHORT_SLEEP(GTMSOURCE_WAIT_FOR_RECEIVER_CLOSE_CONN);
- gtmsource_state = jnlpool.gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
+ gtmsource_state = jnlpool->gtmsource_local->gtmsource_state = GTMSOURCE_WAITING_FOR_CONNECTION;
}
}
@@ -1764,9 +1764,9 @@ seq_num gtmsource_find_resync_seqno(repl_histinfo *local_histinfo, repl_histinfo
DEBUG_ONLY(sgmnt_addrs *csa;)
DEBUG_ONLY(seq_num min_start_seqno;)
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
DEBUG_ONLY(
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
ASSERT_VALID_JNLPOOL(csa);
)
DEBUG_ONLY(prev_remote_histinfo_num = remote_histinfo->prev_histinfo_num;)
@@ -1796,11 +1796,11 @@ seq_num gtmsource_find_resync_seqno(repl_histinfo *local_histinfo, repl_histinfo
{ /* Need to get the previous histinfo record on the primary */
local_histinfo_num = local_histinfo->prev_histinfo_num;
assert(0 <= local_histinfo->histinfo_num);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
return MAX_SEQNO;
gtmsource_histinfo_get(local_histinfo_num, local_histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state)
return MAX_SEQNO; /* Connection got reset in "gtmsource_histinfo_get" due to REPLINSTNOHIST */
}
@@ -1840,12 +1840,12 @@ void gtmsource_send_new_histrec()
int4 zero_histinfo_num;
DEBUG_ONLY(sgmnt_addrs *csa;)
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
DEBUG_ONLY(
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
ASSERT_VALID_JNLPOOL(csa);
)
- gtmsource_local = jnlpool.gtmsource_local;
+ gtmsource_local = jnlpool->gtmsource_local;
assert(gtmsource_local->send_new_histrec);
assert(gtmsource_local->read_jnl_seqno <= gtmsource_local->next_histinfo_seqno);
first_histrec_send = (-1 == gtmsource_local->next_histinfo_num);
@@ -1853,7 +1853,7 @@ void gtmsource_send_new_histrec()
if ((GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state) || (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state))
return; /* "gtmsource_set_next_histinfo_seqno" encountered REPLINSTNOHIST or concurrent online rollback occurred */
/*************** Read histinfo (to send) from instance file first ***************/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
return;
assert(1 <= gtmsource_local->next_histinfo_num);
@@ -1885,7 +1885,7 @@ void gtmsource_send_new_histrec()
gtmsource_histinfo_get(zero_histinfo_num, &zero_histinfo);
} else
zero_histinfo_num = INVALID_HISTINFO_NUM;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state)
{
assert(FALSE);
@@ -1970,21 +1970,21 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
DEBUG_ONLY(sgmnt_addrs *csa;)
- assert((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open);
DEBUG_ONLY(
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
ASSERT_VALID_JNLPOOL(csa);
)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
return;
- assert(NULL != jnlpool.repl_inst_filehdr); /* journal pool should be set up */
- gtmsource_local = jnlpool.gtmsource_local;
+ assert(NULL != jnlpool->repl_inst_filehdr); /* journal pool should be set up */
+ gtmsource_local = jnlpool->gtmsource_local;
next_histinfo_num = gtmsource_local->next_histinfo_num;
/* assert((-1 == next_histinfo_num) || (gtmsource_local->next_histinfo_seqno >= gtmsource_local->read_jnl_seqno)); */
read_seqno = gtmsource_local->read_jnl_seqno;
assert(gtmsource_local->next_histinfo_seqno >= read_seqno);
- num_histinfo = jnlpool.repl_inst_filehdr->num_histinfo;
+ num_histinfo = jnlpool->repl_inst_filehdr->num_histinfo;
if (!detect_new_histinfo)
{
if (-1 == next_histinfo_num)
@@ -1993,7 +1993,7 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
* across i.e. "gtmsource_local->read_jnl_seqno". The below function will return the history record
* just BEFORE read_jnl_seqno. So fetch the immediately next history record to get the desired record.
*/
- assert(read_seqno <= jnlpool.jnlpool_ctl->jnl_seqno);
+ assert(read_seqno <= jnlpool->jnlpool_ctl->jnl_seqno);
status = repl_inst_histinfo_find_seqno(read_seqno, INVALID_SUPPL_STRM, &prev_histinfo);
if (0 != status)
{
@@ -2007,7 +2007,7 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
*/
NON_GTM64_ONLY(SPRINTF(histdetail, "seqno [0x%llx]", read_seqno - 1));
GTM64_ONLY(SPRINTF(histdetail, "seqno [0x%lx]", read_seqno - 1));
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPLINSTNOHIST, 4,
LEN_AND_STR(histdetail), LEN_AND_STR(udi->fn));
/* Send error status to the receiver server before closing the connection. This way the
@@ -2019,7 +2019,7 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
memset(&instnohist_msg.msg[0], 0, SIZEOF(instnohist_msg.msg));
gtmsource_repl_send((repl_msg_ptr_t)&instnohist_msg, "REPL_INST_NOHIST",
MAX_SEQNO, INVALID_SUPPL_STRM);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
repl_log(gtmsource_log_fp, TRUE, TRUE,
"Connection reset due to above REPLINSTNOHIST error\n");
repl_close(>msource_sock_fd);
@@ -2038,7 +2038,7 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
if (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state)
{
assert(FALSE);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
return; /* Connection got reset in "gtmsource_histinfo_get" due to REPLINSTNOHIST */
}
assert(next_histinfo.start_seqno >= read_seqno);
@@ -2078,7 +2078,7 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
if (GTMSOURCE_WAITING_FOR_CONNECTION == gtmsource_state)
{
assert(FALSE);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
return; /* Connection got reset in "gtmsource_histinfo_get" due to REPLINSTNOHIST */
}
assert(next_histinfo.start_seqno >= read_seqno);
@@ -2087,5 +2087,5 @@ void gtmsource_set_next_histinfo_seqno(boolean_t detect_new_histinfo)
gtmsource_local->next_histinfo_seqno = MAX_SEQNO;
gtmsource_local->next_histinfo_num = next_histinfo_num;
gtmsource_local->num_histinfo = num_histinfo;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
diff --git a/sr_unix/gtmsource_readfiles.c b/sr_unix/gtmsource_readfiles.c
index 1a34e8c..36e61cd 100644
--- a/sr_unix/gtmsource_readfiles.c
+++ b/sr_unix/gtmsource_readfiles.c
@@ -117,7 +117,7 @@ MBSTART { \
} MBEND
GBLREF unsigned char *gtmsource_tcombuff_start;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF repl_ctl_element *repl_ctl_list;
GBLREF repl_rctl_elem_t *repl_rctl_list;
GBLREF seq_num gtmsource_save_read_jnl_seqno;
@@ -1579,7 +1579,8 @@ static int read_regions(unsigned char **buff, int *buff_avail,
cumul_read = 0;
*brkn_trans = TRUE;
assert(repl_ctl_list->next != NULL);
- jctl = jnlpool.jnlpool_ctl;
+ assert(NULL != jnlpool);
+ jctl = jnlpool->jnlpool_ctl;
/* For each region */
assert(repl_ctl_list->next == repl_rctl_list->ctl_start);
for (repl_rctl = repl_rctl_list; (NULL != repl_rctl) && !trans_read; repl_rctl = repl_rctl->next)
@@ -1932,8 +1933,8 @@ int gtmsource_readfiles(unsigned char *buff, int *data_len, int maxbufflen, bool
boolean_t stop_bunching;
gtmsource_state_t gtmsource_state_sav;
- jctl = jnlpool.jnlpool_ctl;
- gtmsource_local = jnlpool.gtmsource_local;
+ jctl = jnlpool->jnlpool_ctl;
+ gtmsource_local = jnlpool->gtmsource_local;
jnlpool_size = jctl->jnlpool_size;
max_read_seqno = jctl->jnl_seqno;
/* Note that we are fetching the value of "jctl->jnl_seqno" without a lock on the journal pool. This means we could
@@ -2040,7 +2041,7 @@ int gtmsource_readfiles(unsigned char *buff, int *data_len, int maxbufflen, bool
TIMEOUT_DONE(stop_bunching);
assert(read_jnl_seqno <= max_read_seqno);
if ((gtmsource_local->next_histinfo_num < gtmsource_local->num_histinfo)
- || (gtmsource_local->num_histinfo == jnlpool.repl_inst_filehdr->num_histinfo))
+ || (gtmsource_local->num_histinfo == jnlpool->repl_inst_filehdr->num_histinfo))
{ /* We are either sending seqnos of a histinfo that is not the last one in the instance file OR
* we are sending seqnos of the last histinfo (that is open-ended) but there has been no more histinfo
* records concurrently added to this instance file compared to what is in our private memory. In either
@@ -2068,7 +2069,7 @@ int gtmsource_readfiles(unsigned char *buff, int *data_len, int maxbufflen, bool
* condition happens frequently with replicating instances and instances with infrequent updates.
*/
if (jctl->write_addr < read_addr)
- repl_phase2_cleanup(&jnlpool);
+ repl_phase2_cleanup(jnlpool);
assert(jctl->write_addr >= read_addr);
gtmsource_local->read = (uint4)(read_addr % jnlpool_size) ;
gtmsource_local->read_state = read_state = READ_POOL;
@@ -2170,7 +2171,7 @@ int gtmsource_update_zqgblmod_seqno_and_tn(seq_num resync_seqno)
grab_crit(ctl->reg);
if (csa->onln_rlbk_cycle != csa->nl->onln_rlbk_cycle)
{
- assert(process_id != jnlpool.gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
+ assert(process_id != jnlpool->gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
SYNC_ONLN_RLBK_CYCLES;
gtmsource_onln_rlbk_clnup(); /* would have set gtmsource_state accordingly */
if (!was_crit)
@@ -2184,18 +2185,18 @@ int gtmsource_update_zqgblmod_seqno_and_tn(seq_num resync_seqno)
if (max_zqgblmod_seqno < start_seqno)
max_zqgblmod_seqno = start_seqno;
}
- assert(!jnlpool.jnlpool_ctl->max_zqgblmod_seqno || jnlpool.jnlpool_ctl->max_zqgblmod_seqno > resync_seqno);
+ assert(!jnlpool->jnlpool_ctl->max_zqgblmod_seqno || jnlpool->jnlpool_ctl->max_zqgblmod_seqno > resync_seqno);
assert(0 < max_zqgblmod_seqno);
assert(resync_seqno >= max_zqgblmod_seqno);
- assert(!(FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs.now_crit));
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
+ assert(!(FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs.now_crit));
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, HANDLE_CONCUR_ONLINE_ROLLBACK);
if (GTMSOURCE_HANDLE_ONLN_RLBK == gtmsource_state)
{
- assert(process_id != jnlpool.gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
+ assert(process_id != jnlpool->gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
return -1; /* gtmsource_ctl_close will be done by gtmsource_process */
}
- jnlpool.jnlpool_ctl->max_zqgblmod_seqno = max_zqgblmod_seqno;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ jnlpool->jnlpool_ctl->max_zqgblmod_seqno = max_zqgblmod_seqno;
+ rel_lock(jnlpool->jnlpool_dummy_reg);
gtmsource_ctl_close(); /* close all structures now that we are done; if we have to read from journal files; we'll open
* the structures again */
return (SS_NORMAL);
diff --git a/sr_unix/gtmsource_readpool.c b/sr_unix/gtmsource_readpool.c
index 6c1f50e..57f87ed 100644
--- a/sr_unix/gtmsource_readpool.c
+++ b/sr_unix/gtmsource_readpool.c
@@ -48,7 +48,7 @@
#include "min_max.h"
#include "repl_instance.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_state_t gtmsource_state;
int gtmsource_readpool(uchar_ptr_t buff, int *data_len, int maxbufflen, boolean_t read_multiple, qw_num stop_read_at)
@@ -67,14 +67,14 @@ int gtmsource_readpool(uchar_ptr_t buff, int *data_len, int maxbufflen, boolean_
boolean_t trim_this_seqno;
uchar_ptr_t trim_buff;
- jctl = jnlpool.jnlpool_ctl;
+ jctl = jnlpool->jnlpool_ctl;
jnlpool_size = jctl->jnlpool_size;
DEBUG_ONLY(jnl_seqno = jctl->jnl_seqno;) /* jnl_seqno is used in an assert below. jnl_seqno is a local variable for
* debugging purposes since shared memory can change from the time the assert
* fails to the time the core gets created
*/
- jnldata_base = jnlpool.jnldata_base;
- gtmsource_local = jnlpool.gtmsource_local;
+ jnldata_base = jnlpool->jnldata_base;
+ gtmsource_local = jnlpool->gtmsource_local;
do
{
read = gtmsource_local->read;
@@ -240,7 +240,7 @@ int gtmsource_readpool(uchar_ptr_t buff, int *data_len, int maxbufflen, boolean_
/* Before sending the seqnos, check if a new histinfo got concurrently written */
assert(gtmsource_local->next_histinfo_num <= gtmsource_local->num_histinfo);
if ((gtmsource_local->next_histinfo_num == gtmsource_local->num_histinfo)
- && (gtmsource_local->num_histinfo != jnlpool.repl_inst_filehdr->num_histinfo))
+ && (gtmsource_local->num_histinfo != jnlpool->repl_inst_filehdr->num_histinfo))
{ /* We are sending seqnos of the last histinfo (that is open-ended) and
* there has been at least one histinfo concurrently added to this instance
* file compared to what is in our private memory. Set the next histinfo's
diff --git a/sr_unix/gtmsource_rootprimary_init.c b/sr_unix/gtmsource_rootprimary_init.c
index 4ee3b4d..f9a2ffd 100644
--- a/sr_unix/gtmsource_rootprimary_init.c
+++ b/sr_unix/gtmsource_rootprimary_init.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2016 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -28,7 +28,7 @@
#include "jnl.h"
#include "change_reg.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF jnl_gbls_t jgbl;
GBLREF gd_addr *gd_header;
@@ -54,51 +54,52 @@ void gtmsource_rootprimary_init(seq_num start_seqno)
jnl_buffer_ptr_t jbp;
uint4 jnl_status;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert(NULL != jnlpool);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
+ assert(NULL != jnlpool->repl_inst_filehdr);
/* Update journal pool fields to reflect this is a root primary startup and updates are enabled */
assert(!udi->s_addrs.hold_onto_crit || jgbl.onlnrlbk);
was_crit = udi->s_addrs.now_crit;
if (!was_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- jnlpool.repl_inst_filehdr->root_primary_cycle++;
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ jnlpool->repl_inst_filehdr->root_primary_cycle++;
/* If this instance is transitioning from a non-rootprimary to rootprimary, switch journal files.
* This helps with maintaining accurate value of csd->zqgblmod_tn when the former primary connects
* to the current primary through a fetchresync-rollback or receiver-server-autorollback..
*/
- switch_jnl = (!jnlpool.repl_inst_filehdr->was_rootprimary && (0 < jnlpool.repl_inst_filehdr->num_histinfo));
- jnlpool.repl_inst_filehdr->was_rootprimary = TRUE;
- assert(start_seqno >= jnlpool.jnlpool_ctl->start_jnl_seqno);
- assert(start_seqno == jnlpool.jnlpool_ctl->jnl_seqno);
- jnlpool.repl_inst_filehdr->jnl_seqno = start_seqno;
- assert(jgbl.onlnrlbk || jnlpool.jnlpool_ctl->upd_disabled);
+ switch_jnl = (!jnlpool->repl_inst_filehdr->was_rootprimary && (0 < jnlpool->repl_inst_filehdr->num_histinfo));
+ jnlpool->repl_inst_filehdr->was_rootprimary = TRUE;
+ assert(start_seqno >= jnlpool->jnlpool_ctl->start_jnl_seqno);
+ assert(start_seqno == jnlpool->jnlpool_ctl->jnl_seqno);
+ jnlpool->repl_inst_filehdr->jnl_seqno = start_seqno;
+ assert(jgbl.onlnrlbk || jnlpool->jnlpool_ctl->upd_disabled);
if (!jgbl.onlnrlbk)
- jnlpool.jnlpool_ctl->upd_disabled = FALSE;
- if (IS_REPL_INST_UUID_NULL(jnlpool.repl_inst_filehdr->lms_group_info))
+ jnlpool->jnlpool_ctl->upd_disabled = FALSE;
+ if (IS_REPL_INST_UUID_NULL(jnlpool->repl_inst_filehdr->lms_group_info))
{ /* This is the first time this instance is being brought up either as a root primary or as a propagating
* primary. Initialize the "lms_group_info" fields in the instance file header in journal pool shared memory.
* They will be flushed to the instance file as part of the "repl_inst_histinfo_add -> repl_inst_flush_filehdr"
* function invocation below.
*/
- assert('\0' == jnlpool.repl_inst_filehdr->lms_group_info.created_nodename[0]);
- assert('\0' == jnlpool.repl_inst_filehdr->lms_group_info.this_instname[0]);
- assert(!jnlpool.repl_inst_filehdr->lms_group_info.creator_pid);
- jnlpool.repl_inst_filehdr->lms_group_info = jnlpool.repl_inst_filehdr->inst_info;
- assert('\0' != jnlpool.repl_inst_filehdr->lms_group_info.created_nodename[0]);
- DBG_CHECK_CREATED_NODENAME(jnlpool.repl_inst_filehdr->lms_group_info.created_nodename);
- assert('\0' != jnlpool.repl_inst_filehdr->lms_group_info.this_instname[0]);
- assert(jnlpool.repl_inst_filehdr->lms_group_info.created_time);
- assert(jnlpool.repl_inst_filehdr->lms_group_info.creator_pid);
+ assert('\0' == jnlpool->repl_inst_filehdr->lms_group_info.created_nodename[0]);
+ assert('\0' == jnlpool->repl_inst_filehdr->lms_group_info.this_instname[0]);
+ assert(!jnlpool->repl_inst_filehdr->lms_group_info.creator_pid);
+ jnlpool->repl_inst_filehdr->lms_group_info = jnlpool->repl_inst_filehdr->inst_info;
+ assert('\0' != jnlpool->repl_inst_filehdr->lms_group_info.created_nodename[0]);
+ DBG_CHECK_CREATED_NODENAME(jnlpool->repl_inst_filehdr->lms_group_info.created_nodename);
+ assert('\0' != jnlpool->repl_inst_filehdr->lms_group_info.this_instname[0]);
+ assert(jnlpool->repl_inst_filehdr->lms_group_info.created_time);
+ assert(jnlpool->repl_inst_filehdr->lms_group_info.creator_pid);
}
/* Initialize histinfo fields */
- memcpy(histinfo.root_primary_instname, jnlpool.repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
+ memcpy(histinfo.root_primary_instname, jnlpool->repl_inst_filehdr->inst_info.this_instname, MAX_INSTNAME_LEN - 1);
histinfo.root_primary_instname[MAX_INSTNAME_LEN - 1] = '\0';
assert('\0' != histinfo.root_primary_instname[0]);
histinfo.start_seqno = start_seqno;
- assert(jnlpool.jnlpool_ctl->strm_seqno[0] == jnlpool.repl_inst_filehdr->strm_seqno[0]);
- assert(jnlpool.repl_inst_filehdr->is_supplementary || (0 == jnlpool.jnlpool_ctl->strm_seqno[0]));
- histinfo.strm_seqno = (!jnlpool.repl_inst_filehdr->is_supplementary) ? 0 : jnlpool.jnlpool_ctl->strm_seqno[0];
- histinfo.root_primary_cycle = jnlpool.repl_inst_filehdr->root_primary_cycle;
+ assert(jnlpool->jnlpool_ctl->strm_seqno[0] == jnlpool->repl_inst_filehdr->strm_seqno[0]);
+ assert(jnlpool->repl_inst_filehdr->is_supplementary || (0 == jnlpool->jnlpool_ctl->strm_seqno[0]));
+ histinfo.strm_seqno = (!jnlpool->repl_inst_filehdr->is_supplementary) ? 0 : jnlpool->jnlpool_ctl->strm_seqno[0];
+ histinfo.root_primary_cycle = jnlpool->repl_inst_filehdr->root_primary_cycle;
assert(process_id == getpid());
histinfo.creator_pid = process_id;
JNL_SHORT_TIME(histinfo.created_time);
@@ -113,7 +114,7 @@ void gtmsource_rootprimary_init(seq_num start_seqno)
/* Add the histinfo record to the instance file and flush the changes in the journal pool to the file header */
repl_inst_histinfo_add(&histinfo);
if (!was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
if (switch_jnl)
{
SET_GBL_JREC_TIME; /* jnl_ensure_open/jnl_file_extend and its callees assume jgbl.gbl_jrec_time is set */
diff --git a/sr_unix/gtmsource_seqno_init.c b/sr_unix/gtmsource_seqno_init.c
old mode 100755
new mode 100644
index b70a189..deaccf5
--- a/sr_unix/gtmsource_seqno_init.c
+++ b/sr_unix/gtmsource_seqno_init.c
@@ -30,8 +30,7 @@
#include "repl_instance.h"
GBLREF gd_addr *gd_header;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF repl_conn_info_t *this_side;
error_def(ERR_NOREPLCTDREG);
@@ -51,13 +50,13 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
unix_db_info *udi;
/* Unix and VMS have different field names for now, but will both be soon changed to instfilename instead of gtmgbldir */
- gld_fn = (sm_uc_ptr_t)jnlpool_ctl->jnlpool_id.instfilename;
+ gld_fn = (sm_uc_ptr_t)jnlpool->jnlpool_ctl->jnlpool_id.instfilename;
zqgblmod_seqno = 0;
region_top = gd_header->regions + gd_header->n_regions;
db_seqno = 0;
- replinst_seqno = jnlpool.repl_inst_filehdr->jnl_seqno;
+ replinst_seqno = jnlpool->repl_inst_filehdr->jnl_seqno;
/* The stream specific jnl seqnos are valid only if this is a supplementary instance. */
- is_supplementary = jnlpool.repl_inst_filehdr->is_supplementary;
+ is_supplementary = jnlpool->repl_inst_filehdr->is_supplementary;
if (is_supplementary)
{ /* Since this is a supplementary instance, the 0th stream should be at least 1 (even if the db file header
* still says 0). The first update to that replicated database will set the strm_reg_seqno to a non-zero value.
@@ -99,13 +98,13 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
/* Assert that the jnl seqno of the instance is greater than or equal to the start_seqno of the last histinfo record in the
* instance file. If this was not the case, a REPLINSTSEQORD error would have been issued in "jnlpool_init"
*/
- assert(!jnlpool_ctl->last_histinfo_seqno || (replinst_seqno >= jnlpool_ctl->last_histinfo_seqno));
+ assert(!jnlpool->jnlpool_ctl->last_histinfo_seqno || (replinst_seqno >= jnlpool->jnlpool_ctl->last_histinfo_seqno));
/* Check if jnl seqno in db and instance file match */
if (0 != replinst_seqno)
{
if (db_seqno != replinst_seqno)
{ /* Journal seqno from the databases does NOT match that stored in the replication instance file header. */
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPLINSTDBMATCH, 4, LEN_AND_STR(udi->fn), &replinst_seqno,
&db_seqno);
gtmsource_exit(ABNORMAL_SHUTDOWN);
@@ -114,10 +113,10 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
{ /* Check that each of the potentially 16 stream seqnos are also identical between db and instance file */
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
{
- strm_inst_seqno = jnlpool.repl_inst_filehdr->strm_seqno[idx];
+ strm_inst_seqno = jnlpool->repl_inst_filehdr->strm_seqno[idx];
if (strm_inst_seqno && (strm_db_seqno[idx] != strm_inst_seqno))
{
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_REPLINSTDBSTRM, 5, LEN_AND_STR(udi->fn),
&strm_inst_seqno, idx, &strm_db_seqno[idx]);
assert(FALSE);
@@ -127,11 +126,11 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
}
} else
{ /* Instance file header has no seqno values. Initialize it from the db file header. */
- jnlpool.repl_inst_filehdr->jnl_seqno = db_seqno;
+ jnlpool->repl_inst_filehdr->jnl_seqno = db_seqno;
if (is_supplementary)
{ /* Initialize each of the potentially 16 stream seqnos from the db */
idx = 0;
- jnlpool.repl_inst_filehdr->strm_seqno[idx] = strm_db_seqno[idx];
+ jnlpool->repl_inst_filehdr->strm_seqno[idx] = strm_db_seqno[idx];
idx++;
/* For streams 1 thru 15, if the db seqno is at 1, it means that stream
* has no updates yet in this instance. In that case, keep the instance file
@@ -142,7 +141,7 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
for ( ; idx < MAX_SUPPL_STRMS; idx++)
{
assert(0 < strm_db_seqno[idx]);
- jnlpool.repl_inst_filehdr->strm_seqno[idx] = (1 < strm_db_seqno[idx]) ? strm_db_seqno[idx] : 0;
+ jnlpool->repl_inst_filehdr->strm_seqno[idx] = (1 < strm_db_seqno[idx]) ? strm_db_seqno[idx] : 0;
}
}
}
@@ -150,23 +149,23 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
* server command is still waiting with the ftok lock for the pool to be initialized by this child). Even then it
* does not hurt to get the lock on the journal pool before updating fields in there.
*/
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke "grab_lock" and "rel_lock" unconditionally */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- jnlpool_ctl->start_jnl_seqno = db_seqno;
- jnlpool_ctl->jnl_seqno = db_seqno;
- jnlpool_ctl->max_zqgblmod_seqno = zqgblmod_seqno;
- jnlpool_ctl->prev_jnlseqno_time = 0;
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ jnlpool->jnlpool_ctl->start_jnl_seqno = db_seqno;
+ jnlpool->jnlpool_ctl->jnl_seqno = db_seqno;
+ jnlpool->jnlpool_ctl->max_zqgblmod_seqno = zqgblmod_seqno;
+ jnlpool->jnlpool_ctl->prev_jnlseqno_time = 0;
if (is_supplementary)
{ /* Copy stream jnl seqno info from instance file header to jnlpool.
* From this point onwards, only the jnlpool will have uptodate values for strm_seqno.
* Therefore only that should be used by whoever wants to find out the current strm_seqno.
*/
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
- jnlpool.jnlpool_ctl->strm_seqno[idx] = jnlpool.repl_inst_filehdr->strm_seqno[idx];
+ jnlpool->jnlpool_ctl->strm_seqno[idx] = jnlpool->repl_inst_filehdr->strm_seqno[idx];
}
/* Initialize details for this side of the replication connection. Do it while we still have the jnlpool lock. */
- assert(this_side == &jnlpool_ctl->this_side);
+ assert(this_side == &jnlpool->jnlpool_ctl->this_side);
this_side->proto_ver = REPL_PROTO_VER_THIS;
this_side->jnl_ver = JNL_VER_THIS;
this_side->is_std_null_coll = this_side_std_null_coll;
@@ -179,19 +178,19 @@ void gtmsource_seqno_init(boolean_t this_side_std_null_coll)
this_side->endianness_known = FALSE;
this_side->null_subs_xform = FALSE;
this_side->is_supplementary = is_supplementary;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
DEBUG_ONLY(
/* Assert that seqno fields in "gtmsrc_lcl" array are within the instance journal seqno.
* This is taken care of in "mur_close_files".
*/
for (idx = 0; NUM_GTMSRC_LCL > idx; idx++)
{
- if ('\0' != jnlpool.gtmsrc_lcl_array[idx].secondary_instname[0])
+ if ('\0' != jnlpool->gtmsrc_lcl_array[idx].secondary_instname[0])
{
- assert(jnlpool.gtmsrc_lcl_array[idx].resync_seqno <= db_seqno);
- assert(jnlpool.gtmsrc_lcl_array[idx].connect_jnl_seqno <= db_seqno);
+ assert(jnlpool->gtmsrc_lcl_array[idx].resync_seqno <= db_seqno);
+ assert(jnlpool->gtmsrc_lcl_array[idx].connect_jnl_seqno <= db_seqno);
}
}
)
- jnlpool.jnlpool_ctl->pool_initialized = TRUE; /* It is only now that the journal pool is completely initialized */
+ jnlpool->jnlpool_ctl->pool_initialized = TRUE; /* It is only now that the journal pool is completely initialized */
}
diff --git a/sr_unix/gtmsource_showbacklog.c b/sr_unix/gtmsource_showbacklog.c
index 01ff00b..c9c8aef 100755
--- a/sr_unix/gtmsource_showbacklog.c
+++ b/sr_unix/gtmsource_showbacklog.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2013 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -43,7 +44,7 @@
#include "repl_log.h"
#include "is_proc_alive.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
@@ -58,16 +59,16 @@ int gtmsource_showbacklog(void)
uint4 gtmsource_pid;
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
- if (NULL != jnlpool.gtmsource_local) /* Show backlog for a specific source server */
- gtmsourcelocal_ptr = jnlpool.gtmsource_local;
+ jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
+ if (NULL != jnlpool->gtmsource_local) /* Show backlog for a specific source server */
+ gtmsourcelocal_ptr = jnlpool->gtmsource_local;
else
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for (index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++)
{
if ('\0' == gtmsourcelocal_ptr->secondary_instname[0])
{
- assert(NULL == jnlpool.gtmsource_local);
+ assert(NULL == jnlpool->gtmsource_local);
continue;
}
/* If SHOWBACKLOG on a specific secondary instance is requested, print the backlog information irrespective
@@ -75,7 +76,7 @@ int gtmsource_showbacklog(void)
* print backlog information only for those instances that have an active or passive source server alive.
*/
gtmsource_pid = gtmsourcelocal_ptr->gtmsource_pid;
- if ((NULL == jnlpool.gtmsource_local) && (0 == gtmsource_pid))
+ if ((NULL == jnlpool->gtmsource_local) && (0 == gtmsource_pid))
continue;
repl_log(stderr, TRUE, TRUE,
"Initiating SHOWBACKLOG operation on source server pid [%d] for secondary instance [%s]\n",
@@ -100,7 +101,7 @@ int gtmsource_showbacklog(void)
else if ((gtmsourcelocal_ptr->mode == GTMSOURCE_MODE_PASSIVE)
|| (gtmsourcelocal_ptr->mode == GTMSOURCE_MODE_ACTIVE_REQUESTED))
util_out_print("WARNING - Source Server is in passive mode, transactions are not being replicated", TRUE);
- if (NULL != jnlpool.gtmsource_local)
+ if (NULL != jnlpool->gtmsource_local)
break;
}
return (NORMAL_SHUTDOWN);
diff --git a/sr_unix/gtmsource_shutdown.c b/sr_unix/gtmsource_shutdown.c
old mode 100755
new mode 100644
index 347edfc..9aca29a
--- a/sr_unix/gtmsource_shutdown.c
+++ b/sr_unix/gtmsource_shutdown.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2016 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -48,16 +48,14 @@
#include "gtm_threadgbl.h"
#endif
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF int gtmsource_srv_count;
GBLREF gtmsource_options_t gtmsource_options;
-GBLREF int4 jnlpool_shmid;
GBLREF boolean_t is_src_server;
GBLREF void (*call_on_signal)();
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
GBLREF gd_addr *gd_header;
error_def(ERR_JNLPOOLSETUP);
@@ -89,22 +87,23 @@ int gtmsource_shutdown(boolean_t auto_shutdown, int exit_status)
*/
call_on_signal = NULL; /* Don't reenter on error */
assert(pool_init); /* should have attached to the journal pool before coming here */
- udi = (unix_db_info *)FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool);
+ udi = (unix_db_info *)FILE_INFO(jnlpool->jnlpool_dummy_reg);
if (!auto_shutdown)
{ /* ftok semaphore and jnlpool access semaphore should already be held from the previous call to "jnlpool_init" */
assert(udi->grabbed_ftok_sem);
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- if (NULL != jnlpool.gtmsource_local)
+ if (NULL != jnlpool->gtmsource_local)
{ /* Shutdown source server for the secondary instance specified in the command line */
- savepid[0] = jnlpool.gtmsource_local->gtmsource_pid;
+ savepid[0] = jnlpool->gtmsource_local->gtmsource_pid;
/* Set flag to signal concurrently running source server to shutdown */
- jnlpool.gtmsource_local->shutdown = SHUTDOWN;
+ jnlpool->gtmsource_local->shutdown = SHUTDOWN;
repl_log(stdout, TRUE, TRUE, "Initiating SHUTDOWN operation on source server pid [%d] for secondary"
- " instance [%s]\n", savepid[0], jnlpool.gtmsource_local->secondary_instname);
+ " instance [%s]\n", savepid[0], jnlpool->gtmsource_local->secondary_instname);
maxindex = 1; /* Only one process id to check */
} else
{ /* Shutdown ALL source servers that are up and running */
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for (maxindex = 0, index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++)
{
savepid[index] = gtmsourcelocal_ptr->gtmsource_pid;
@@ -185,12 +184,12 @@ int gtmsource_shutdown(boolean_t auto_shutdown, int exit_status)
{
lcnt++;
GET_C_STACK_FROM_SCRIPT("ERR_SHUTDOWN", process_id, savepid[index], lcnt);
- if (NULL != jnlpool.gtmsource_local)
+ if (NULL != jnlpool->gtmsource_local)
{
assert(0 == index);
- gtmsourcelocal_ptr = jnlpool.gtmsource_local;
+ gtmsourcelocal_ptr = jnlpool->gtmsource_local;
} else
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[index];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[index];
repl_log(stderr, FALSE, FALSE,
" ---> Source server pid [%d] for secondary instance [%s] is still alive\n",
savepid[index], gtmsourcelocal_ptr->secondary_instname);
@@ -271,12 +270,12 @@ int gtmsource_shutdown(boolean_t auto_shutdown, int exit_status)
first_time = TRUE;
for (index = 0; index < maxindex; index++)
{
- if (NULL != jnlpool.gtmsource_local)
+ if (NULL != jnlpool->gtmsource_local)
{
assert(0 == index);
- gtmsourcelocal_ptr = jnlpool.gtmsource_local;
+ gtmsourcelocal_ptr = jnlpool->gtmsource_local;
} else
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[index];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[index];
exit_status = gtmsourcelocal_ptr->shutdown;
if (SHUTDOWN == exit_status)
{
@@ -302,14 +301,14 @@ int gtmsource_shutdown(boolean_t auto_shutdown, int exit_status)
* other error occurs in that function causing it to return ABNORMAL_SHUTDOWN, then we should return ABNORMAL_SHUTDOWN
* from this function as well.
*/
- ftok_counter_halted = jnlpool.jnlpool_ctl->ftok_counter_halted; /* Note down before jnlpool.jnlpool_ctl is NULLed */
+ ftok_counter_halted = jnlpool->jnlpool_ctl->ftok_counter_halted; /* Copy before jnlpool->jnlpool_ctl is NULLed */
if (FALSE == gtmsource_ipc_cleanup(auto_shutdown, &exit_status, &num_src_servers_running))
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
else
{ /* Journal Pool and Access Control Semaphores removed. Invalidate corresponding fields in file header */
repl_inst_jnlpool_reset();
}
- if (!ftok_sem_release(jnlpool.jnlpool_dummy_reg, !ftok_counter_halted && udi->counter_ftok_incremented, FALSE))
+ if (!ftok_sem_release(jnlpool->jnlpool_dummy_reg, !ftok_counter_halted && udi->counter_ftok_incremented, FALSE))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_JNLPOOLSETUP);
assert(!num_src_servers_running || (ABNORMAL_SHUTDOWN == exit_status));
return (((1 == maxindex) && num_src_servers_running) ? shutdown_status : exit_status);
diff --git a/sr_unix/gtmsource_srv_latch.c b/sr_unix/gtmsource_srv_latch.c
index b4f9053..1e8439a 100644
--- a/sr_unix/gtmsource_srv_latch.c
+++ b/sr_unix/gtmsource_srv_latch.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2012-2015 Fidelity National Information *
+ * Copyright (c) 2012-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -36,7 +36,7 @@
GBLREF int4 process_id;
GBLREF int num_additional_processors;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF jnl_gbls_t jgbl;
#ifdef DEBUG
GBLREF node_local_ptr_t locknl;
@@ -60,7 +60,7 @@ boolean_t grab_gtmsource_srv_latch(sm_global_latch_ptr_t latch, uint4 max_timeou
char scndry_msg[OUT_BUFF_SIZE];
assert(!have_crit(CRIT_HAVE_ANY_REG));
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
repl_csa = &udi->s_addrs;
maxspins = num_additional_processors ? MAX_LOCK_SPINS(LOCK_SPINS, num_additional_processors) : 1;
max_retries = max_timeout_in_secs * 4 * 1000; /* outer-loop : X minutes, 1 loop in 4 is sleep of 1 ms */
@@ -74,7 +74,7 @@ boolean_t grab_gtmsource_srv_latch(sm_global_latch_ptr_t latch, uint4 max_timeou
DEBUG_ONLY(locknl = repl_csa->nl); /* Use the journal pool to maintain lock history */
LOCK_HIST("OBTN", latch, process_id, retries);
DEBUG_ONLY(locknl = NULL);
- if (jnlpool.repl_inst_filehdr->file_corrupt && !jgbl.onlnrlbk)
+ if (jnlpool->repl_inst_filehdr->file_corrupt && !jgbl.onlnrlbk)
{
/* Journal pool indicates an abnormally terminated online rollback. Cannot continue until
* the rollback command is re-run to bring the journal pool/file and instance file to a
@@ -88,7 +88,7 @@ boolean_t grab_gtmsource_srv_latch(sm_global_latch_ptr_t latch, uint4 max_timeou
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, LEN_AND_STR(udi->fn),
ERR_TEXT, 2, LEN_AND_STR(scndry_msg));
}
- cycle_mismatch = (repl_csa->onln_rlbk_cycle != jnlpool.jnlpool_ctl->onln_rlbk_cycle);
+ cycle_mismatch = (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle);
assert((ASSERT_NO_ONLINE_ROLLBACK != onln_rlbk_action) || !cycle_mismatch);
if ((HANDLE_CONCUR_ONLINE_ROLLBACK == onln_rlbk_action) && cycle_mismatch)
{
@@ -114,8 +114,8 @@ boolean_t grab_gtmsource_srv_latch(sm_global_latch_ptr_t latch, uint4 max_timeou
}
DUMP_LOCKHIST();
assert(FALSE);
- assert(jnlpool.gtmsource_local && jnlpool.gtmsource_local->gtmsource_pid);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_SRVLCKWT2LNG, 2, max_timeout_in_secs, jnlpool.gtmsource_local->gtmsource_pid);
+ assert(jnlpool->gtmsource_local && jnlpool->gtmsource_local->gtmsource_pid);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_SRVLCKWT2LNG, 2, max_timeout_in_secs, jnlpool->gtmsource_local->gtmsource_pid);
return FALSE; /* to keep the compiler happy */
}
@@ -123,7 +123,7 @@ boolean_t rel_gtmsource_srv_latch(sm_global_latch_ptr_t latch)
{
sgmnt_addrs *repl_csa;
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
DEBUG_ONLY(locknl = repl_csa->nl);
LOCK_HIST("RLSE", latch, process_id, 0);
DEBUG_ONLY(locknl = NULL);
@@ -134,5 +134,5 @@ boolean_t rel_gtmsource_srv_latch(sm_global_latch_ptr_t latch)
boolean_t gtmsource_srv_latch_held_by_us()
{
- return (process_id == jnlpool.gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
+ return (process_id == jnlpool->gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid);
}
diff --git a/sr_unix/gtmsource_statslog.c b/sr_unix/gtmsource_statslog.c
index a2ab02f..6aa9731 100755
--- a/sr_unix/gtmsource_statslog.c
+++ b/sr_unix/gtmsource_statslog.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -45,7 +46,7 @@
#include "util.h"
#include "repl_log.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
error_def(ERR_REPLLOGOPN);
@@ -53,8 +54,8 @@ int gtmsource_statslog(void)
{
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
repl_log(stderr, TRUE, TRUE, "Initiating STATSLOG operation on source server pid [%d] for secondary instance [%s]\n",
- jnlpool.gtmsource_local->gtmsource_pid, jnlpool.gtmsource_local->secondary_instname);
- if (gtmsource_options.statslog == jnlpool.gtmsource_local->statslog)
+ jnlpool->gtmsource_local->gtmsource_pid, jnlpool->gtmsource_local->secondary_instname);
+ if (gtmsource_options.statslog == jnlpool->gtmsource_local->statslog)
{
util_out_print("STATSLOG is already !AD. Not initiating change in stats log", TRUE, gtmsource_options.statslog ?
strlen("ON") : strlen("OFF"), gtmsource_options.statslog ? "ON" : "OFF");
@@ -62,12 +63,12 @@ int gtmsource_statslog(void)
}
if (!gtmsource_options.statslog)
{
- jnlpool.gtmsource_local->statslog = FALSE;
- jnlpool.gtmsource_local->statslog_file[0] = '\0';
+ jnlpool->gtmsource_local->statslog = FALSE;
+ jnlpool->gtmsource_local->statslog_file[0] = '\0';
util_out_print("STATSLOG turned OFF", TRUE);
return (NORMAL_SHUTDOWN);
}
- jnlpool.gtmsource_local->statslog = TRUE;
+ jnlpool->gtmsource_local->statslog = TRUE;
util_out_print("Stats log turned on", TRUE);
return (NORMAL_SHUTDOWN);
}
diff --git a/sr_unix/gtmsource_stopfilter.c b/sr_unix/gtmsource_stopfilter.c
index c268ecf..c1c3b24 100755
--- a/sr_unix/gtmsource_stopfilter.c
+++ b/sr_unix/gtmsource_stopfilter.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2006 Fidelity Information Services, Inc *
+ * Copyright (c) 2006-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -42,7 +43,7 @@
#include "util.h"
#include "repl_log.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
@@ -51,13 +52,13 @@ int gtmsource_stopfilter(void)
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
repl_log(stderr, TRUE, TRUE,
"Initiating STOPSOURCEFILTER operation on source server pid [%d] for secondary instance [%s]\n",
- jnlpool.gtmsource_local->gtmsource_pid, jnlpool.gtmsource_local->secondary_instname);
- if ('\0' == jnlpool.gtmsource_local->filter_cmd[0])
+ jnlpool->gtmsource_local->gtmsource_pid, jnlpool->gtmsource_local->secondary_instname);
+ if ('\0' == jnlpool->gtmsource_local->filter_cmd[0])
{
util_out_print("No filter currently active", TRUE);
return (ABNORMAL_SHUTDOWN);
}
- jnlpool.gtmsource_local->filter_cmd[0] = '\0';
+ jnlpool->gtmsource_local->filter_cmd[0] = '\0';
util_out_print("Stop filter initiated", TRUE);
return (NORMAL_SHUTDOWN);
}
diff --git a/sr_unix/gtmthreadgblasm.m b/sr_unix/gtmthreadgblasm.m
index 803c50e..fb0dabd 100644
--- a/sr_unix/gtmthreadgblasm.m
+++ b/sr_unix/gtmthreadgblasm.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2014-2016 Fidelity National Information ;
+; Copyright (c) 2014-2017 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -56,6 +56,7 @@
set gtmhdwr=$ZPiece(gtmzv," ",4)
if (0=$get(platform(gtmos,gtmhdwr))) do
. write "gtmthreadgblasm: Not running on a recognized platform",!
+ . set $etrap="zgoto 0"
. zhalt 1
set platform=platform(gtmos,gtmhdwr)
set fmtrtn="formatrecfor"_platform
@@ -65,6 +66,7 @@
if ($zlength($zcmdline," ")'=3) do
. write "gtmthreadgblasm: Invalid arguments ",!
. write "gtmthreadgblasm: $gtm_tools/gtm_threadgbl_asm_access.txt <input file name>.in <output file name>.si",!
+ . set $etrap="zgoto 0"
. zhalt 1
;
; Read in variable list to make available to assembler routines
@@ -144,6 +146,7 @@ verify(line)
if (""=var) do
. use $principal
. write "gtmthreadgblasm: invalid character(s) in variable specification on line "_i,!
+ . set $etrap="zgoto 0"
. zhalt 1
set var=$zpiece(var,"#",1) ; Isolate variable name
set line=var
diff --git a/sr_unix/gv_trigger.h b/sr_unix/gv_trigger.h
index 8b82767..d5d65a4 100644
--- a/sr_unix/gv_trigger.h
+++ b/sr_unix/gv_trigger.h
@@ -499,7 +499,7 @@ typedef struct gvtr_invoke_parms_struct
\
assert(!IS_STATSDB_REGNAME(reg)); /* caller should have ensured this */ \
if (!reg->open) \
- gv_init_reg(reg); \
+ gv_init_reg(reg, NULL); \
gv_cur_region = reg; \
change_reg(); /* TP_CHANGE_REG wont work as we need to set sgm_info_ptr */ \
if (NULL != cs_addrs) \
diff --git a/sr_unix/gvcst_init_sysops.c b/sr_unix/gvcst_init_sysops.c
index 7db9846..47373eb 100644
--- a/sr_unix/gvcst_init_sysops.c
+++ b/sr_unix/gvcst_init_sysops.c
@@ -361,13 +361,18 @@ GBLREF boolean_t is_src_server;
GBLREF boolean_t mupip_jnl_recover;
GBLREF gd_region *gv_cur_region, *db_init_region;
GBLREF ipcs_mesg db_ipcs;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF gd_addr *gd_header;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF node_local_ptr_t locknl;
GBLREF uint4 mutex_per_process_init_pid;
GBLREF uint4 process_id;
GBLREF jnl_gbls_t jgbl;
GBLREF uint4 mu_reorg_encrypt_in_prog;
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
+GBLREF boolean_t jnlpool_init_needed;
+GBLREF mstr extnam_str;
+GBLREF mval dollar_zgbldir;
#ifndef MUTEX_MSEM_WAKE
GBLREF int mutex_sock_fd;
#endif
@@ -586,10 +591,11 @@ gd_region *dbfilopn(gd_region *reg)
csa->read_write = FALSE; /* maintain reg->read_only simultaneously */
csa->orig_read_write = FALSE;
}
- if (!reg->owning_gd->is_dummy_gbldir)
+ if (!reg->owning_gd->is_dummy_gbldir && (pool_init || !jnlpool_init_needed || !CUSTOM_ERRORS_AVAILABLE))
break;
/* Caller created a dummy region (not a region from a gld). So determine asyncio & acc_meth setting
* from db file header and copy that to segment to avoid DBGLDMISMATCH error later in "db_init".
+ * Or need to check replication state to decide if an early call to jnlpool_init is needed in gvcst_init
*/
tsd = udi->fd_opened_with_o_direct ? (sgmnt_data_ptr_t)(TREF(dio_buff)).aligned : &tsdbuff;
/* If O_DIRECT, use aligned buffer */
@@ -599,6 +605,10 @@ gd_region *dbfilopn(gd_region *reg)
fc->op_pos = 1;
fc->op_len = SGMNT_HDR_LEN;
dbfilop(fc);
+ if (!pool_init && jnlpool_init_needed && CUSTOM_ERRORS_AVAILABLE)
+ csa->repl_state = tsd->repl_state; /* needed in gvcst_init */
+ if (!reg->owning_gd->is_dummy_gbldir)
+ break;
if (!IS_AIO_DBGLDMISMATCH(seg, tsd))
break;
CLOSEFILE_RESET(udi->fd, rc); /* close file and reopen it with correct asyncio setting */
@@ -672,6 +682,11 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
node_local_ptr_t cnl;
sgmnt_data tsdbuff;
sgmnt_data_ptr_t csd, tsd;
+ jnlpool_addrs_ptr_t save_jnlpool, local_jnlpool;
+ replpool_identifier replpool_id;
+ unsigned int full_len; /* for REPL_INST_AVAILABLE */
+ gd_id replfile_gdid, *tmp_gdid;
+ boolean_t need_jnlpool_setup;
struct sembuf sop[3];
struct stat stat_buf;
union semun semarg;
@@ -874,7 +889,8 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
ERR_TEXT, 2, LEN_AND_LIT("Error with database control semget"), errno);
}
udi->shmid = INVALID_SHMID; /* reset shmid so dbinit_ch does not get confused in case we go there */
- udi->sem_created = udi->shm_created = TRUE;
+ udi->sem_created = TRUE;
+ udi->shm_created = !tsd->read_only;
/* change group and permissions */
semarg.buf = &semstat;
if (-1 == semctl(udi->semid, FTOK_SEM_PER_ID - 1, IPC_STAT, semarg))
@@ -984,7 +1000,7 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
* wait time). Eventually, we will either get hold of the semaphore OR will error out.
*/
RETURN_IF_BYPASSED(bypassed_ftok, indefinite_wait, sem_stacktrace_time, sem_timedout);
- udi->shm_created = TRUE; /* Need to create shared memory */
+ udi->shm_created = !tsd->read_only; /* Need to create shared memory */
}
}
incr_cnt = !read_only;
@@ -1090,7 +1106,8 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
assert((INVALID_SHMID == udi->shmid) && (0 == udi->gt_shm_ctime));
/* In pro, just clear it and proceed */
udi->shmid = INVALID_SHMID; /* reset shmid so dbinit_ch does not get confused in case we go there */
- udi->shm_created = udi->sem_created = TRUE;
+ udi->sem_created = TRUE;
+ udi->shm_created = !tsd->read_only;
}
assert(udi->grabbed_access_sem || bypassed_access);
if (udi->fd_opened_with_o_direct)
@@ -1124,9 +1141,10 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
* unconditionally
*/
reg->dyn.addr->acc_meth = tsd->acc_meth;
+ reg->dyn.addr->read_only = tsd->read_only;
COPY_AIO_SETTINGS(reg->dyn.addr, tsd); /* copy "asyncio" from tsd to reg->dyn.addr */
new_shm_ipc = udi->shm_created;
- if (new_shm_ipc)
+ if (new_shm_ipc && !tsd->read_only)
{ /* Bypassers are not allowed to create shared memory so we don't end up with conflicting shared memories */
assert(!bypassed_ftok && !bypassed_access);
/* Since we are about to allocate new shared memory, if necessary, adjust the journal buffer size right now.
@@ -1187,6 +1205,23 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
tsd->gt_shm_ctime.ctime = udi->gt_shm_ctime = shmstat.shm_ctime;
GTM_ATTACH_SHM;
shm_setup_ok = TRUE;
+ } else if (tsd->read_only)
+ {
+ dbsecspc(reg, tsd, &sec_size); /* Find db segment size */
+ csa->db_addrs[0] = malloc(ROUND_UP2(sec_size, OS_PAGE_SIZE) + OS_PAGE_SIZE);
+ /* Init the space to zero; the system assumes shared memory gets init'd to zero, funny errors without this */
+ memset(csa->db_addrs[0], 0, ROUND_UP2(sec_size, OS_PAGE_SIZE) + OS_PAGE_SIZE);
+ /* Move the pointer above so it falls on a cacheline boundary;
+ * since this segment will be needed during all of process execution
+ * we don't need to record the original place for cleanup */
+ csa->db_addrs[0] = (sm_uc_ptr_t)((UINTPTR_T)csa->db_addrs[0] + OS_PAGE_SIZE)
+ - ((UINTPTR_T)csa->db_addrs[0] % OS_PAGE_SIZE);
+ csa->nl = (node_local_ptr_t)csa->db_addrs[0];
+ read_only = TRUE;
+ reg->read_only = TRUE;
+ csa->read_write = FALSE;
+ shm_setup_ok = TRUE;
+ incr_cnt = 0;
} else
{
GTM_ATTACH_SHM_AND_CHECK_VERS(vermismatch, shm_setup_ok);
@@ -1279,8 +1314,8 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
*/
if (shm_setup_ok && !cnl->glob_sec_init && !(bypassed_ftok || bypassed_access))
{
- assert(udi->shm_created);
- assert(new_shm_ipc);
+ assert(udi->shm_created || tsd->read_only);
+ assert(new_shm_ipc || tsd->read_only);
assert(!vermismatch);
memcpy(csd, tsd, SIZEOF(sgmnt_data));
READ_DB_FILE_MASTERMAP(reg, csd);
@@ -1483,36 +1518,68 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
* would have lost the jnlpool initialization that the source server did. So do it on behalf of the source
* server even though this is not a source server.
*/
- if ((REPL_ALLOWED(csd) && is_src_server) || (pool_init && udi->shm_created))
+ need_jnlpool_setup = REPL_ALLOWED(csd) && is_src_server;
+ save_jnlpool = jnlpool;
+ if (need_jnlpool_setup)
+ assert(jnlpool && jnlpool->pool_init); /* only one jnlpool for source server */
+ else if (!is_src_server && pool_init && REPL_ALLOWED(csd) && gd_header && udi->shm_created
+ && REPL_INST_AVAILABLE(csa->gd_ptr))
+ { /* not source server but db shm created so check proper jnlpool */
+ status = filename_to_id(&replfile_gdid, replpool_id.instfilename); /* set by REPL_INST_AVAILABLE */
+ assertpro(SS_NORMAL == status);
+ if (jnlpool && jnlpool->pool_init)
+ {
+ tmp_gdid = &FILE_ID(jnlpool->jnlpool_dummy_reg);
+ if (!gdid_cmp(tmp_gdid, &replfile_gdid))
+ need_jnlpool_setup = TRUE; /* current jnlpool is for this region */
+ }
+ if (!need_jnlpool_setup)
+ { /* need to find right jnlpool */
+ for (local_jnlpool = jnlpool_head; local_jnlpool; local_jnlpool = local_jnlpool->next)
+ {
+ if (local_jnlpool->pool_init)
+ {
+ tmp_gdid = &FILE_ID(jnlpool->jnlpool_dummy_reg);
+ if (!gdid_cmp(tmp_gdid, &replfile_gdid))
+ {
+ jnlpool = local_jnlpool;
+ need_jnlpool_setup = TRUE;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (need_jnlpool_setup)
{
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
/* Note: cnl->replinstfilename is changed under control of the init/rundown semaphore only. */
- assert('\0' != jnlpool.jnlpool_ctl->jnlpool_id.instfilename[0]);
+ assert('\0' != jnlpool->jnlpool_ctl->jnlpool_id.instfilename[0]);
replinst_mismatch = FALSE;
if ('\0' == cnl->replinstfilename[0])
- STRCPY(cnl->replinstfilename, jnlpool.jnlpool_ctl->jnlpool_id.instfilename);
- else if (STRCMP(cnl->replinstfilename, jnlpool.jnlpool_ctl->jnlpool_id.instfilename))
+ STRCPY(cnl->replinstfilename, jnlpool->jnlpool_ctl->jnlpool_id.instfilename);
+ else if (STRCMP(cnl->replinstfilename, jnlpool->jnlpool_ctl->jnlpool_id.instfilename))
{
- assert(!(pool_init && udi->shm_created));
+ assert(!(jnlpool->pool_init && udi->shm_created));
replinst_mismatch = TRUE;
}
/* Note: cnl->jnlpool_shmid is changed under control of the init/rundown semaphore only. */
- assert(INVALID_SHMID != jnlpool.repl_inst_filehdr->jnlpool_shmid);
+ assert(INVALID_SHMID != jnlpool->repl_inst_filehdr->jnlpool_shmid);
if (INVALID_SHMID == cnl->jnlpool_shmid)
- cnl->jnlpool_shmid = jnlpool.repl_inst_filehdr->jnlpool_shmid;
- else if (cnl->jnlpool_shmid != jnlpool.repl_inst_filehdr->jnlpool_shmid)
+ cnl->jnlpool_shmid = jnlpool->repl_inst_filehdr->jnlpool_shmid;
+ else if (cnl->jnlpool_shmid != jnlpool->repl_inst_filehdr->jnlpool_shmid)
{ /* shmid mismatch. Check if the shmid noted down in db filehdr is out-of-date.
* Possible if the jnlpool has since been deleted. If so, note the new one down.
* If not, then issue an error.
*/
- assert(!(pool_init && udi->shm_created));
+ assert(!(jnlpool->pool_init && udi->shm_created));
if (-1 == shmctl(cnl->jnlpool_shmid, IPC_STAT, &shmstat))
{
save_errno = errno;
if (SHM_REMOVED(save_errno))
{
replinst_mismatch = FALSE;
- cnl->jnlpool_shmid = jnlpool.repl_inst_filehdr->jnlpool_shmid;
+ cnl->jnlpool_shmid = jnlpool->repl_inst_filehdr->jnlpool_shmid;
} else
replinst_mismatch = TRUE;
} else
@@ -1521,13 +1588,13 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
/* Replication instance file or jnlpool id mismatch. Issue error. */
if (replinst_mismatch)
{
- assert(!(pool_init && udi->shm_created));
+ assert(!(jnlpool->pool_init && udi->shm_created));
if (INVALID_SHMID == cnl->jnlpool_shmid)
RTS_ERROR(VARLSTCNT(4) ERR_REPLINSTNOSHM, 2, DB_LEN_STR(reg));
else
RTS_ERROR(VARLSTCNT(10) ERR_REPLINSTMISMTCH, 8,
- LEN_AND_STR(jnlpool.jnlpool_ctl->jnlpool_id.instfilename),
- jnlpool.repl_inst_filehdr->jnlpool_shmid, DB_LEN_STR(reg),
+ LEN_AND_STR(jnlpool->jnlpool_ctl->jnlpool_id.instfilename),
+ jnlpool->repl_inst_filehdr->jnlpool_shmid, DB_LEN_STR(reg),
LEN_AND_STR(cnl->replinstfilename), cnl->jnlpool_shmid);
}
}
@@ -1547,7 +1614,8 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
cnl->first_writer_seen = TRUE;
cnl->remove_shm = FALSE;
}
- if (!cnl->first_nonbypas_writer_seen && !bypassed_ftok && !bypassed_access && !FROZEN_CHILLED(csd))
+ if (!cnl->first_nonbypas_writer_seen && !bypassed_ftok && !bypassed_access && !FROZEN_CHILLED(csa)
+ && !tsd->read_only)
{ /* For read-write process flush file header to write machine_name,
* semaphore, shared memory id and semaphore creation time to disk.
* Note: If first process to open db was read-only, then sem/shm info would have already been flushed
@@ -1566,6 +1634,8 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
DB_LSEEKWRITE(csa, udi, udi->fn, udi->fd, (off_t)0, (sm_uc_ptr_t)csd, SGMNT_HDR_LEN, save_errno);
if (0 != save_errno)
{
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
RTS_ERROR(VARLSTCNT(9) ERR_DBFILERR, 2, DB_LEN_STR(reg),
ERR_TEXT, 2, LEN_AND_LIT("Error with database header flush"), save_errno);
}
@@ -1586,9 +1656,15 @@ int db_init(gd_region *reg, boolean_t ok_to_bypass)
secshrstat = send_mesg2gtmsecshr(FLUSH_DB_IPCS_INFO, 0, (char *)NULL, 0);
csa->read_only_fs = (EROFS == secshrstat);
if ((0 != secshrstat) && !csa->read_only_fs)
+ {
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
RTS_ERROR(VARLSTCNT(8) ERR_DBFILERR, 2, DB_LEN_STR(reg),
ERR_TEXT, 2, LEN_AND_LIT("gtmsecshr failed to update database file header"));
+ }
}
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
if (ftok_counter_halted || access_counter_halted)
{
if (!csd->mumps_can_bypass)
diff --git a/sr_unix/io_open_try.c b/sr_unix/io_open_try.c
index 8b049b0..008ee3c 100755
--- a/sr_unix/io_open_try.c
+++ b/sr_unix/io_open_try.c
@@ -45,6 +45,8 @@
#include "gtm_utf8.h"
#include "gtmimagename.h"
#include "gtmio.h"
+#include "op.h"
+#include "indir_enum.h"
#define LOGNAME_LEN 255
/* avoid calling getservbyname for shell and Kerberos shell */
@@ -92,11 +94,9 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
int char_or_block_special;
int stat_res;
int fstat_res;
-
int p_offset, len;
boolean_t mknod_err , stat_err, dir_err;
int save_mknod_err, save_stat_err, save_gsn_err;
-
int gso_stat, gsn_stat, sockoptval;
in_port_t sockport;
GTM_SOCKLEN_TYPE socknamelen;
@@ -106,8 +106,11 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
int errcode;
unsigned int port_len;
char port_buffer[NI_MAXSERV], *port_ptr;
- io_desc *temp_iod;
+ io_desc *iod, *temp_iod;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
+ iod = naml->iod;
mt_ptr = NULL;
char_or_block_special = FALSE;
out_of_time = FALSE;
@@ -128,7 +131,7 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
timed = FALSE;
else
timed = (0 != msec_timeout);
- if (0 == naml->iod)
+ if (0 == iod)
{
if (0 == tl->iod)
{
@@ -175,7 +178,8 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
mknod_err = TRUE;
save_mknod_err = errno;
/* This save_err will be checked immediately after error_handler is set;
- In that way error handler will get the chance to handle any error */
+ * In that way error handler will get the chance to handle any error
+ */
}
}
tl->iod = temp_iod;
@@ -183,11 +187,9 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
if ((n_io_dev_types == tl->iod->type) && mspace && mspace->str.len)
{
lower_to_upper(dev_type, (uchar_ptr_t)mspace->str.addr, mspace->str.len);
- if (((SIZEOF("SOCKET") - 1) == mspace->str.len)
- && (0 == MEMCMP_LIT(dev_type, "SOCKET")))
+ if (((SIZEOF("SOCKET") - 1) == mspace->str.len) && (0 == MEMCMP_LIT(dev_type, "SOCKET")))
tl->iod->type = gtmsocket;
- else if (((SIZEOF("PIPE") - 1) == mspace->str.len)
- && (0 == MEMCMP_LIT(dev_type, "PIPE")))
+ else if (((SIZEOF("PIPE") - 1) == mspace->str.len) && (0 == MEMCMP_LIT(dev_type, "PIPE")))
tl->iod->type = pi;
else
tl->iod->type = us;
@@ -268,11 +270,11 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
{
socknamelen = SIZEOF(sockname);
gsn_stat = getsockname(file_des,
- (struct sockaddr *)&sockname,
- (GTM_SOCKLEN_TYPE *)&socknamelen);
+ (struct sockaddr *)&sockname,
+ (GTM_SOCKLEN_TYPE *)&socknamelen);
save_gsn_err = errno;
if (!gsn_stat && ((AF_INET == ((sockaddr_ptr)&sockname)->sa_family)
- || (AF_INET6 == ((sockaddr_ptr)&sockname)->sa_family)))
+ || (AF_INET6 == ((sockaddr_ptr)&sockname)->sa_family)))
{
port_len = NI_MAXSERV;
if (0 != (errcode = getnameinfo((struct sockaddr *)&sockname,
@@ -291,13 +293,13 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
}
}
else if ((!gsn_stat && ((AF_UNIX == ((sockaddr_ptr)&sockname)->sa_family)
- || (0 == socknamelen)
- || (0 == ((sockaddr_ptr)&sockname)->sa_family)))
- || (EOPNOTSUPP == save_gsn_err)
-# if defined(_AIX)
- || (ENOTCONN == save_gsn_err)
-# endif
- )
+ || (0 == socknamelen)
+ || (0 == ((sockaddr_ptr)&sockname)->sa_family)))
+ || (EOPNOTSUPP == save_gsn_err)
+# if defined(_AIX)
+ || (ENOTCONN == save_gsn_err)
+# endif
+ )
{
tl->iod->type = gtmsocket;
break;
@@ -318,12 +320,12 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
}
}
}
- naml->iod = tl->iod;
+ naml->iod = iod = tl->iod;
}
- assert((0 <= naml->iod->state) && (n_io_dev_states > naml->iod->state));
- active_device = naml->iod;
- if ((-2 == file_des) && (dev_open != naml->iod->state) && (us != naml->iod->type)
- && (gtmsocket != naml->iod->type) && (pi != naml->iod->type))
+ assert((0 <= iod->state) && (n_io_dev_states > iod->state));
+ active_device = iod;
+ if ((-2 == file_des) && (dev_open != iod->state) && (us != iod->type)
+ && (gtmsocket != iod->type) && (pi != iod->type))
{
oflag |= (O_RDWR | O_CREAT | O_NOCTTY);
p_offset = 0;
@@ -335,19 +337,18 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
{
case iop_exception:
{
- naml->iod->error_handler.len = *(pp->str.addr + p_offset);
- naml->iod->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&naml->iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
}
case iop_append:
/* this deviceparameter will move the file pointer to EOF in iorm_open.c
- but will no longer force write to the EOF, so nothing to do here */
+ * but will no longer force write to the EOF, so nothing to do here
+ */
break;
case iop_contiguous:
break;
case iop_newversion:
- if ((dev_open != naml->iod->state) && (rm == naml->iod->type))
+ if ((dev_open != iod->state) && (rm == iod->type))
oflag |= O_TRUNC;
break;
case iop_readonly:
@@ -356,7 +357,7 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
break;
case iop_writeonly:
# ifdef __MVS__
- if (ff != naml->iod->type)
+ if (ff != iod->type)
# endif
{
oflag &= ~(O_RDWR | O_RDONLY);
@@ -365,25 +366,25 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
break;
case iop_ipchset:
# ifdef KEEP_zOS_EBCDIC
- if ( (iconv_t)0 != naml->iod->input_conv_cd )
+ if ( (iconv_t)0 != iod->input_conv_cd )
{
- ICONV_CLOSE_CD(naml->iod->input_conv_cd);
+ ICONV_CLOSE_CD(iod->input_conv_cd);
}
- SET_CODE_SET(naml->iod->in_code_set, (char *)(pp->str.addr + p_offset + 1));
- if (DEFAULT_CODE_SET != naml->iod->in_code_set)
- ICONV_OPEN_CD(naml->iod->input_conv_cd,
- (char *)(pp->str.addr + p_offset + 1), INSIDE_CH_SET);
+ SET_CODE_SET(iod->in_code_set, (char *)(pp->str.addr + p_offset + 1));
+ if (DEFAULT_CODE_SET != iod->in_code_set)
+ ICONV_OPEN_CD(iod->input_conv_cd,
+ (char *)(pp->str.addr + p_offset + 1), INSIDE_CH_SET);
# endif
break;
case iop_opchset:
# ifdef KEEP_zOS_EBCDIC
- if ( (iconv_t)0 != naml->iod->output_conv_cd)
+ if ( (iconv_t)0 != iod->output_conv_cd)
{
- ICONV_CLOSE_CD(naml->iod->output_conv_cd);
+ ICONV_CLOSE_CD(iod->output_conv_cd);
}
- SET_CODE_SET(naml->iod->out_code_set, (char *)(pp->str.addr + p_offset + 1));
- if (DEFAULT_CODE_SET != naml->iod->out_code_set)
- ICONV_OPEN_CD(naml->iod->output_conv_cd, INSIDE_CH_SET,
+ SET_CODE_SET(iod->out_code_set, (char *)(pp->str.addr + p_offset + 1));
+ if (DEFAULT_CODE_SET != iod->out_code_set)
+ ICONV_OPEN_CD(iod->output_conv_cd, INSIDE_CH_SET,
(char *)(pp->str.addr + p_offset + 1));
# endif
break;
@@ -415,8 +416,7 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
umask_orig = umask(000); /* determine umask (destructive) */
(void)umask(umask_orig); /* reset umask */
umask_creat = 0666 & ~umask_orig;
- /*
- * no OPEN EINTR macros in the following while loop due to complex error checks and processing between
+ /* no OPEN EINTR macros in the following while loop due to complex error checks and processing between
* top of while and calls to OPEN3
*/
while ((-1 == (file_des = OPEN3(buf, SETOCLOEXEC(oflag), umask_creat))) && !out_of_time)
@@ -425,11 +425,11 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
out_of_time = TRUE;
if (outofband)
outofband_action(FALSE);
- if ( EINTR == errno
- || ETXTBSY == errno
- || ENFILE == errno
- || EBUSY == errno
- || ((mb == naml->iod->type) && (ENXIO == errno)))
+ if (EINTR == errno
+ || ETXTBSY == errno
+ || ENFILE == errno
+ || EBUSY == errno
+ || ((mb == iod->type) && (ENXIO == errno)))
continue;
else
{
@@ -447,11 +447,11 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
out_of_time = TRUE;
if (outofband)
outofband_action(FALSE);
- if ( EINTR == errno
+ if (EINTR == errno
|| ETXTBSY == errno
|| ENFILE == errno
|| EBUSY == errno
- || ((mb == naml->iod->type) && (ENXIO == errno)))
+ || ((mb == iod->type) && (ENXIO == errno)))
continue;
else
break;
@@ -467,11 +467,11 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
out_of_time = TRUE;
if (outofband)
outofband_action(FALSE);
- if ( EINTR == errno
+ if (EINTR == errno
|| ETXTBSY == errno
|| ENFILE == errno
|| EBUSY == errno
- || ((mb == naml->iod->type) && (ENXIO == errno)))
+ || ((mb == iod->type) && (ENXIO == errno)))
continue;
else
break;
@@ -496,27 +496,27 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
}
}
# ifdef KEEP_zOS_EBCDIC
- if (gtmsocket != naml->iod->type)
+ if (gtmsocket != iod->type)
{
- SET_CODE_SET(naml->iod->in_code_set, OUTSIDE_CH_SET);
- if (DEFAULT_CODE_SET != naml->iod->in_code_set)
- ICONV_OPEN_CD(naml->iod->input_conv_cd, OUTSIDE_CH_SET, INSIDE_CH_SET);
- SET_CODE_SET(naml->iod->out_code_set, OUTSIDE_CH_SET);
- if (DEFAULT_CODE_SET != naml->iod->out_code_set)
- ICONV_OPEN_CD(naml->iod->output_conv_cd, INSIDE_CH_SET, OUTSIDE_CH_SET);
+ SET_CODE_SET(iod->in_code_set, OUTSIDE_CH_SET);
+ if (DEFAULT_CODE_SET != iod->in_code_set)
+ ICONV_OPEN_CD(iod->input_conv_cd, OUTSIDE_CH_SET, INSIDE_CH_SET);
+ SET_CODE_SET(iod->out_code_set, OUTSIDE_CH_SET);
+ if (DEFAULT_CODE_SET != iod->out_code_set)
+ ICONV_OPEN_CD(iod->output_conv_cd, INSIDE_CH_SET, OUTSIDE_CH_SET);
} else
{
- SET_CODE_SET(naml->iod->out_code_set, INSIDE_CH_SET);
- if (DEFAULT_CODE_SET != naml->iod->out_code_set)
- ICONV_OPEN_CD(naml->iod->output_conv_cd, OUTSIDE_CH_SET, INSIDE_CH_SET);
- SET_CODE_SET(naml->iod->in_code_set, INSIDE_CH_SET);
- if (DEFAULT_CODE_SET != naml->iod->in_code_set)
- ICONV_OPEN_CD(naml->iod->input_conv_cd, INSIDE_CH_SET, OUTSIDE_CH_SET);
+ SET_CODE_SET(iod->out_code_set, INSIDE_CH_SET);
+ if (DEFAULT_CODE_SET != iod->out_code_set)
+ ICONV_OPEN_CD(iod->output_conv_cd, OUTSIDE_CH_SET, INSIDE_CH_SET);
+ SET_CODE_SET(iod->in_code_set, INSIDE_CH_SET);
+ if (DEFAULT_CODE_SET != iod->in_code_set)
+ ICONV_OPEN_CD(iod->input_conv_cd, INSIDE_CH_SET, OUTSIDE_CH_SET);
}
# endif
if (-1 == file_des)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
- if (n_io_dev_types == naml->iod->type)
+ if (n_io_dev_types == iod->type)
{
/* On AIX, /dev/{,*}random are of 'terminal type'.Hence define its type before
* calling isatty()
@@ -525,22 +525,22 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
|| (0 == memvcmp(tn.addr, tn.len, LIT_AND_LEN("/dev/urandom"))))
tl->iod->type = rm;
else if (isatty(file_des))
- naml->iod->type = tt;
+ iod->type = tt;
else if (char_or_block_special && file_des > 2)
if (0 == memvcmp(tn.addr, tn.len, LIT_AND_LEN("/dev/zero")))
tl->iod->type = rm;
else
/* assume mag tape */
- naml->iod->type = mt;
+ iod->type = mt;
else
- naml->iod->type = rm;
+ iod->type = rm;
}
- assert(naml->iod->type < n_io_dev_types);
- naml->iod->disp_ptr = &io_dev_dispatch[naml->iod->type];
+ assert(iod->type < n_io_dev_types);
+ iod->disp_ptr = &io_dev_dispatch[iod->type];
/* Do this deviceparameter check only if type is rm, it is closed, and no_destroy is defined. If a deviceparameter other
* than SEEK or APPEND is defined, then clear no_destroy as state will not be restored.
*/
- if ((rm == naml->iod->type) && (dev_closed == naml->iod->state) && ((d_rm_struct *)naml->iod->dev_sp)->no_destroy)
+ if ((rm == iod->type) && (dev_closed == iod->state) && ((d_rm_struct *)iod->dev_sp)->no_destroy)
{
for (p_offset = 0; iop_eol != *(pp->str.addr + p_offset); p_offset += ((IOP_VAR_SIZE == io_params_size[ch])
? (unsigned char)*(pp->str.addr + p_offset) + 1 : io_params_size[ch]))
@@ -549,34 +549,36 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
assert((params)ch < (params)n_iops);
if ((iop_seek != ch) && (iop_append != ch))
{
- ((d_rm_struct *)naml->iod->dev_sp)->no_destroy = FALSE;
+ ((d_rm_struct *)iod->dev_sp)->no_destroy = FALSE;
break;
}
}
}
- if (dev_never_opened == naml->iod->state)
+ if (dev_never_opened == iod->state)
{
- naml->iod->wrap = DEFAULT_IOD_WRAP;
- naml->iod->width = DEFAULT_IOD_WIDTH;
- naml->iod->length = DEFAULT_IOD_LENGTH;
- naml->iod->write_filter = write_filter;
+ iod->wrap = DEFAULT_IOD_WRAP;
+ iod->width = DEFAULT_IOD_WIDTH;
+ iod->length = DEFAULT_IOD_LENGTH;
+ iod->write_filter = write_filter;
}
- if (dev_open != naml->iod->state)
- {
- /* initialize x and y unless it is closed and rm and no_destroy is TRUE */
- if (!((dev_closed == naml->iod->state) && (rm == naml->iod->type) &&
- ((d_rm_struct *)naml->iod->dev_sp)->no_destroy))
+ if (dev_open != iod->state)
+ { /* initialize x and y unless it is closed and rm and no_destroy is TRUE */
+ if (!((dev_closed == iod->state) && (rm == iod->type) &&
+ ((d_rm_struct *)iod->dev_sp)->no_destroy))
{
- naml->iod->dollar.x = 0;
- naml->iod->dollar.y = 0;
+ iod->dollar.x = 0;
+ iod->dollar.y = 0;
}
- naml->iod->dollar.za = 0;
- naml->iod->dollar.zb[0] = 0;
- naml->iod->dollar.key[0] = 0;
- naml->iod->dollar.device[0] = 0;
+ iod->dollar.za = 0;
+ iod->dollar.zb[0] = 0;
+ iod->dollar.key[0] = 0;
+ iod->dollar.device[0] = 0;
+ if (iod->dollar.devicebuffer)
+ free(iod->dollar.devicebuffer);
+ iod->dollar.devicebuffer = NULL;
}
# ifdef __MVS__
- /* copy over the content of tl->iod(naml->iod) to (tl->iod->pair.out) */
+ /* copy over the content of tl->iod(iod) to (tl->iod->pair.out) */
if (ff == tl->iod->type)
{
*(tl->iod->pair.out) = *(tl->iod);
@@ -599,23 +601,23 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
(tl->iod->pair.out)->state = dev_closed;
}
else if ((-2 == file_des_w) && (O_WRONLY == (oflag & O_ACCMODE)))
- active_device = naml->iod = tl->iod->pair.out;
+ active_device = naml->iod = iod = tl->iod->pair.out;
if (0 == file_des_w)
(tl->iod->pair.out)->dollar.zeof = TRUE;
}
# endif
- naml->iod->newly_created = filecreated;
- status = (naml->iod->disp_ptr->open)(naml, pp, file_des, mspace, msec_timeout);
+ iod->newly_created = filecreated;
+ status = (iod->disp_ptr->open)(naml, pp, file_des, mspace, msec_timeout);
if (TRUE == status)
- naml->iod->state = dev_open;
+ iod->state = dev_open;
else
{
- if ((dev_open == naml->iod->state) && (gtmsocket != naml->iod->type))
- naml->iod->state = dev_closed;
- if ((gtmsocket == naml->iod->type) && naml->iod->newly_created)
+ if ((dev_open == iod->state) && (gtmsocket != iod->type))
+ iod->state = dev_closed;
+ if ((gtmsocket == iod->type) && iod->newly_created)
{
- assert (naml->iod->state != dev_open);
- iosocket_destroy(naml->iod);
+ assert (iod->state != dev_open);
+ iosocket_destroy(iod);
active_device = 0;
return status;
}
@@ -648,9 +650,9 @@ boolean_t io_open_try(io_log_name *naml, io_log_name *tl, mval *pp, int4 msec_ti
}
# endif
if (1 == file_des)
- naml->iod->dollar.zeof = TRUE;
+ iod->dollar.zeof = TRUE;
active_device = 0;
- naml->iod->newly_created = FALSE;
+ iod->newly_created = FALSE;
if ((NO_M_TIMEOUT != msec_timeout) && IS_MCODE_RUNNING)
return (status);
else
diff --git a/sr_unix/iopi_iocontrol.c b/sr_unix/iopi_iocontrol.c
index 12b7388..bea2437 100644
--- a/sr_unix/iopi_iocontrol.c
+++ b/sr_unix/iopi_iocontrol.c
@@ -78,15 +78,10 @@ void iopi_iocontrol(mstr *mn, int4 argcnt, va_list args)
void iopi_dlr_device(mstr *d)
{
io_desc *iod;
- int len;
/* We will default to the input device for setting $device, since pipe uses both */
iod = io_curr_device.in;
- len = STRLEN(iod->dollar.device);
- /* verify internal buffer has enough space for $DEVICE string value */
- assertpro((int)d->len > len);
- memcpy(d->addr, iod->dollar.device, MIN(len,d->len));
- d->len = len;
+ PUT_DOLLAR_DEVICE_INTO_MSTR(iod, d);
return;
}
@@ -101,7 +96,7 @@ void iopi_dlr_key(mstr *d)
/* verify internal buffer has enough space for $KEY string value */
assertpro((int)d->len > len);
if (len > 0)
- memcpy(d->addr, iod->dollar.key, MIN(len,d->len));
+ memcpy(d->addr, iod->dollar.key, MIN(len, d->len));
d->len = len;
return;
}
@@ -109,7 +104,7 @@ void iopi_dlr_key(mstr *d)
void iopi_dlr_zkey(mstr *d)
{
io_desc *iod;
- int len;
+ int len, save_errno;
d_rm_struct *d_rm;
char tname[MAX_FIXED_STRING];
gtm_int64_t record_num; /* record offset in fixed record file */
@@ -131,8 +126,10 @@ void iopi_dlr_zkey(mstr *d)
cur_position = lseek(d_rm->fildes, 0, SEEK_CUR);
if ((off_t)-1 == cur_position)
{
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7, RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("iopi_dlr_zkey()"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("iopi_dlr_zkey()"), CALLFROM, save_errno);
} else
d_rm->file_pos = cur_position;
}
diff --git a/sr_unix/iopi_open.c b/sr_unix/iopi_open.c
index f384465..e9decc0 100644
--- a/sr_unix/iopi_open.c
+++ b/sr_unix/iopi_open.c
@@ -42,6 +42,8 @@
#endif
#include "send_msg.h"
#include "wbox_test_init.h"
+#include "op.h"
+#include "indir_enum.h"
LITREF unsigned char io_params_size[];
ZOS_ONLY(GBLREF boolean_t gtm_tag_utf8_as_ascii;)
@@ -69,51 +71,51 @@ enum
int parse_pipe(char *cmd_string, char *ret_token);
/* The parse_pipe routine is to used to determine if all the commands in a pipe string are valid commands so
- the iopi_open() routine can detect the problem prior to a fork.
-
- Command Parsing Limitations:
-
- All commands will be searched for in $PATH and in $gtm_dist and if not found will trap. Most pipe strings can be
- entered with some minor exceptions. First, no parentheses around commands are allowed. An example of this which would
- fail is:
-
- o p:(comm="(cd; pwd)":writeonly)::"pipe"
-
- This produces nothing different from:
-
- o p:(comm="cd; pwd":writeonly)::"pipe"
-
- This restriction does not include parentheses embedded in character strings as in:
-
- o p:(comm="echo ""(test)""":writeonly)::"pipe" (which would output: (test) )
-
- or as parameters to a command as in:
-
- o p:(comm="tr -d '()'":writeonly)::"pipe" (which if passed (test) would output: test )
-
- Second, commands must be valid commands - not aliases. Third, no shell built-in commands are allowed (unless a version
- is found in the $PATH and $gtm_dist); with the exception of nohup and cd. In the case of nohup, the next token will be
- the command to be looked for in $PATH and $gtm_dist. "cd" will be allowed, but no parsing for a command will occur
- until the next "|" token - if there is one. In addition, environment variables may be used to define a path, or actual
- paths may be given.
-
- The following are examples of valid open commands:
-
- 1. o a:(comm="tr e j | echoback":stderr=e:exception="g BADOPEN")::"pipe"
- 2. o a:(comm="/bin/cat |& nl")::"pipe"
- 3. o a:(comm="mupip integ mumps.dat")::"pipe"
- 4. o a:(comm="$gtm_dist/mupip integ mumps.dat")::"pipe"
- 5. o a:(comm="nohup cat")::"pipe"
- 6. o p:(comm="cd ..; pwd | tr -d e":writeonly)::"pipe"
-
- In the first example the commands parsed are "tr" and "echoback". "echoback" is in the current directory which is
- included in the $PATH. In the second example an explicit path is given for "cat", but "nl" is found via $PATH.
- In the third example mupip will be found if it is in the $PATH or in $gtm_dist. In the fourth example the
- $gtm_dist environment variable is explicitly used to find mupip. In the fifth example the "cat" after "nohup"
- is used as the command looked up in $PATH. In the sixth example the default directory is moved up a level and
- pwd is executed with the output piped to the tr command. The pwd command is not checked for existence, but the
- "tr" command after the "|" is checked.
-*/
+ * the iopi_open() routine can detect the problem prior to a fork.
+ *
+ * Command Parsing Limitations:
+ *
+ * All commands will be searched for in $PATH and in $gtm_dist and if not found will trap. Most pipe strings can be
+ * entered with some minor exceptions. First, no parentheses around commands are allowed. An example of this which would
+ * fail is:
+ *
+ * o p:(comm="(cd; pwd)":writeonly)::"pipe"
+ *
+ * This produces nothing different from:
+ *
+ * o p:(comm="cd; pwd":writeonly)::"pipe"
+ *
+ * This restriction does not include parentheses embedded in character strings as in:
+ *
+ * o p:(comm="echo ""(test)""":writeonly)::"pipe" (which would output: (test) )
+ *
+ * or as parameters to a command as in:
+ *
+ * o p:(comm="tr -d '()'":writeonly)::"pipe" (which if passed (test) would output: test )
+ *
+ * Second, commands must be valid commands - not aliases. Third, no shell built-in commands are allowed (unless a version
+ * is found in the $PATH and $gtm_dist); with the exception of nohup and cd. In the case of nohup, the next token will be
+ * the command to be looked for in $PATH and $gtm_dist. "cd" will be allowed, but no parsing for a command will occur
+ * until the next "|" token - if there is one. In addition, environment variables may be used to define a path, or actual
+ * paths may be given.
+ *
+ * The following are examples of valid open commands:
+ *
+ * 1. o a:(comm="tr e j | echoback":stderr=e:exception="g BADOPEN")::"pipe"
+ * 2. o a:(comm="/bin/cat |& nl")::"pipe"
+ * 3. o a:(comm="mupip integ mumps.dat")::"pipe"
+ * 4. o a:(comm="$gtm_dist/mupip integ mumps.dat")::"pipe"
+ * 5. o a:(comm="nohup cat")::"pipe"
+ * 6. o p:(comm="cd ..; pwd | tr -d e":writeonly)::"pipe"
+ *
+ * In the first example the commands parsed are "tr" and "echoback". "echoback" is in the current directory which is
+ * included in the $PATH. In the second example an explicit path is given for "cat", but "nl" is found via $PATH.
+ * In the third example mupip will be found if it is in the $PATH or in $gtm_dist. In the fourth example the
+ * $gtm_dist environment variable is explicitly used to find mupip. In the fifth example the "cat" after "nohup"
+ * is used as the command looked up in $PATH. In the sixth example the default directory is moved up a level and
+ * pwd is executed with the output piped to the tr command. The pwd command is not checked for existence, but the
+ * "tr" command after the "|" is checked.
+ */
int parse_pipe(char *cmd_string, char *ret_token)
{
char *str1, *str2, *str3;
@@ -145,7 +147,6 @@ int parse_pipe(char *cmd_string, char *ret_token)
path = path_buff;
dir_in_path = (char *)malloc(GTM_PATH_MAX);
}
-
cmd_string_size = STRLEN(cmd_string) + 1;
pathsize = GTM_PATH_MAX + cmd_string_size;
buf = (char *)malloc(pathsize);
@@ -153,27 +154,23 @@ int parse_pipe(char *cmd_string, char *ret_token)
command2 = (char *)malloc(cmd_string_size);
temp = (char *)malloc(pathsize);
memcpy(copy_cmd_string, cmd_string, cmd_string_size);
-
/* guaranteed at least one token when we get here because it is checked right after iop_eol loop and
- before this code is executed. */
+ * before this code is executed.
+ */
for (str1 = copy_cmd_string; FALSE == notfound ; str1 = NULL)
- {
- /* separate into tokens in a pipe */
+ { /* separate into tokens in a pipe */
token1 = STRTOK_R(str1, "|", &saveptr1);
if (NULL == token1)
break;
-
/* separate into tokens using space as delimiter */
/* if the first token is a non-alpha-numeric or if it is nohup then skip it */
/* and use the next one as a command to find */
memcpy(command2, token1, STRLEN(token1) + 1);
-
for (str2 = command2; ; str2 = NULL)
{
token2 = STRTOK_R(str2, " >&;", &saveptr2);
if (NULL != token2 && !strcmp(token2, "cd"))
- {
- /* if the command is cd then skip the rest before the next pipe */
+ { /* if the command is cd then skip the rest before the next pipe */
token2 = NULL;
break;
}
@@ -182,31 +179,26 @@ int parse_pipe(char *cmd_string, char *ret_token)
if (NULL == token2)
break;
}
-
if (NULL == token2)
continue;
-
notfound = TRUE;
if (NULL != strchr(token2, '/'))
{
/* if the first character is a $ sign then assume it is an environment variable used
- like $gtm_dist/mupip. Get the environment variable and substitute it. */
+ * like $gtm_dist/mupip. Get the environment variable and substitute it.
+ */
notfound = TRUE;
temp[0] = '\0';
if ('$' == *token2)
{
for (env_inc = 1; '/' != *(token2 + env_inc); env_inc++)
- {
temp[env_inc - 1] = *(token2 + env_inc);
- }
temp[env_inc - 1] = '\0';
env_var = GETENV(temp);
if (NULL != env_var)
- {
- /* build a translated path to command */
+ { /* build a translated path to command */
assert(pathsize > (STRLEN(token2 + env_inc) + STRLEN(env_var)));
SPRINTF(temp, "%s%s", env_var, token2 + env_inc);
-
/* The command must be a regular file and executable */
STAT_FILE(temp, &sb, ret_stat);
if (0 == ret_stat && (S_ISREG(sb.st_mode)) && (sb.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR)))
@@ -219,11 +211,9 @@ int parse_pipe(char *cmd_string, char *ret_token)
notfound = FALSE;
}
} else
- {
- /* look in $gtm_dist in case not explicitly listed or not in the $PATH variable */
+ { /* look in $gtm_dist in case not explicitly listed or not in the $PATH variable */
if (gtm_dist_ok_to_use)
- {
- /* build a translated path to command */
+ { /* build a translated path to command */
SPRINTF(temp, "%s/%s", gtm_dist, token2);
STAT_FILE(temp, &sb, ret_stat);
if (0 == ret_stat && (S_ISREG(sb.st_mode)) && (sb.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR)))
@@ -231,10 +221,8 @@ int parse_pipe(char *cmd_string, char *ret_token)
else
notfound = TRUE;
}
-
- /* search all the directories in the $PATH if defined */
if (NULL != path)
- {
+ { /* search all the directories in the $PATH if defined */
memcpy(dir_in_path, path, path_len + 1);
for (str3 = dir_in_path; TRUE == notfound; str3 = NULL)
{
@@ -285,7 +273,7 @@ short iopi_open(io_log_name *dev_name, mval *pp, int fd, mval *mspace, int4 time
{
io_desc *iod;
io_desc *stderr_iod;
- d_rm_struct *d_rm;
+ d_rm_struct *d_rm;
io_log_name *stderr_naml; /* logical record for stderr device */
unsigned char ch;
int param_cnt = 0;
@@ -327,22 +315,17 @@ short iopi_open(io_log_name *dev_name, mval *pp, int fd, mval *mspace, int4 time
boolean_t textflag;
int ccsid, status, realfiletag;
#endif
-# ifdef DEBUG
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
-# endif
iod = dev_name->iod;
-
while (iop_eol != *(pp->str.addr + p_offset))
{
assert((params) *(pp->str.addr + p_offset) < (params)n_iops);
switch ((ch = *(pp->str.addr + p_offset++)))
{
case iop_exception:
- dev_name->iod->error_handler.len = *(pp->str.addr + p_offset);
- dev_name->iod->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&dev_name->iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
case iop_shell:
slen[PSHELL] = (unsigned int)(unsigned char)*(pp->str.addr + p_offset);
@@ -731,13 +714,12 @@ short iopi_open(io_log_name *dev_name, mval *pp, int fd, mval *mspace, int4 time
io_desc *io_ptr;
d_rm_struct *in_d_rm;
- io_ptr = ( stderr_iod->pair.in);
+ io_ptr = (stderr_iod->pair.in);
if (!(in_d_rm = (d_rm_struct *) io_ptr->dev_sp))
{
io_ptr->dev_sp = (void*)malloc(SIZEOF(d_rm_struct));
memset(io_ptr->dev_sp, 0, SIZEOF(d_rm_struct));
in_d_rm = (d_rm_struct *) io_ptr->dev_sp;
- memcpy(io_ptr->dollar.device, "0", SIZEOF("0"));
io_ptr->state = dev_closed;
in_d_rm->stream = d_rm->stream;
io_ptr->width = iod->width;
@@ -749,6 +731,9 @@ short iopi_open(io_log_name *dev_name, mval *pp, int fd, mval *mspace, int4 time
io_ptr->dollar.zb[0] = 0;
io_ptr->dollar.key[0] = 0;
io_ptr->dollar.device[0] = 0;
+ if (io_ptr->dollar.devicebuffer)
+ free(io_ptr->dollar.devicebuffer);
+ io_ptr->dollar.devicebuffer = NULL;
io_ptr->disp_ptr = iod->disp_ptr;
in_d_rm->fixed = d_rm->fixed;
in_d_rm->read_only = TRUE;
@@ -762,9 +747,9 @@ short iopi_open(io_log_name *dev_name, mval *pp, int fd, mval *mspace, int4 time
io_ptr->type = rm;
status_read = iorm_open(stderr_naml, pp, file_des_read_stderr, mspace, timeout);
if (TRUE == status_read)
- ( stderr_iod->pair.in)->state = dev_open;
+ (stderr_iod->pair.in)->state = dev_open;
else if (dev_open == ( stderr_iod->pair.out)->state)
- ( stderr_iod->pair.in)->state = dev_closed;
+ (stderr_iod->pair.in)->state = dev_closed;
}
d_rm->stderr_child = stderr_iod;
}
diff --git a/sr_unix/iorm_close.c b/sr_unix/iorm_close.c
index c498d80..def2ce4 100755
--- a/sr_unix/iorm_close.c
+++ b/sr_unix/iorm_close.c
@@ -18,6 +18,7 @@
#include "gtm_unistd.h"
#include "gtm_stat.h"
#include "gtm_stdio.h"
+#include "gtm_string.h"
#include "io.h"
#include "iormdef.h"
@@ -25,7 +26,6 @@
#include "gtm_signal.h"
#include "gtmio.h"
#include "iosp.h"
-#include "string.h"
#include "stringpool.h"
#include "iotimer.h"
#include "gt_timer.h"
@@ -53,6 +53,7 @@ void iorm_close(io_desc *iod, mval *pp)
unsigned char c;
char *path, *path2;
int stat_res;
+ int save_errno;
int fstat_res;
struct stat statbuf, fstatbuf;
int p_offset;
@@ -118,23 +119,43 @@ void iorm_close(io_desc *iod, mval *pp)
path = iod->trans_name->dollar_io;
FSTAT_FILE(rm_ptr->fildes, &fstatbuf, fstat_res);
if (-1 == fstat_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
STAT_FILE(path, &statbuf, stat_res);
if (-1 == stat_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
if (CYGWIN_ONLY(rm_ptr->fifo ||) fstatbuf.st_ino == statbuf.st_ino)
if (UNLINK(path) == -1)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
break;
case iop_rename:
path = iod->trans_name->dollar_io;
path2 = (char*)(pp->str.addr + p_offset + 1);
FSTAT_FILE(rm_ptr->fildes, &fstatbuf, fstat_res);
if (-1 == fstat_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
STAT_FILE(path, &statbuf, stat_res);
if (-1 == stat_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
if (CYGWIN_ONLY(rm_ptr->fifo ||) fstatbuf.st_ino == statbuf.st_ino)
{
/* make a copy of path2 so we can null terminate it */
@@ -148,9 +169,17 @@ void iorm_close(io_desc *iod, mval *pp)
assert(stringpool.free >= stringpool.base);
assert(stringpool.free <= stringpool.top);
if (LINK(path, savepath2) == -1)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
if (UNLINK(path) == -1)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) save_errno);
+ }
}
break;
case iop_destroy:
@@ -193,9 +222,11 @@ void iorm_close(io_desc *iod, mval *pp)
cur_position = lseek(rm_ptr->fildes, (off_t)0, SEEK_CUR);
if ((off_t)-1 == cur_position)
{
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("iorm_close()"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("iorm_close()"), CALLFROM, save_errno);
} else
rm_ptr->file_pos = cur_position;
}
@@ -221,6 +252,11 @@ void iorm_close(io_desc *iod, mval *pp)
free(rm_ptr->tmp_buffer);
rm_ptr->tmp_buffer = NULL;
}
+ if (iod->dollar.devicebuffer)
+ {
+ free(iod->dollar.devicebuffer);
+ iod->dollar.devicebuffer = NULL;
+ }
}
/* Do the close first. If the fclose is done first and we are being called from io_rundown just prior to the execv
@@ -275,10 +311,12 @@ void iorm_close(io_desc *iod, mval *pp)
} while (((pid_t)-1 == done_pid) && (EINTR == errno) && (!out_of_time));
if (((pid_t)-1 == done_pid) && (!out_of_time))
{
+ save_errno = errno;
if (use_timer)
cancel_timer(timer_id);
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
- RTS_ERROR_LITERAL("waitpid"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("waitpid"), CALLFROM, save_errno);
}
if (out_of_time || (!use_timer && (0 == done_pid)))
{
diff --git a/sr_unix/iorm_readfl.c b/sr_unix/iorm_readfl.c
index 7d06185..4d0536b 100755
--- a/sr_unix/iorm_readfl.c
+++ b/sr_unix/iorm_readfl.c
@@ -64,6 +64,17 @@ error_def(ERR_IOERROR);
cancel_timer(timer_id);
#ifdef UNICODE_SUPPORTED
+
+#define UTF8CRLEN 1 /* Length of CR in UTF8 mode. */
+#define SET_UTF8_DOLLARKEY_DOLLARZB(UTF_CODE, DOLLAR_KEY, DOLLAR_ZB) \
+{ \
+ unsigned char *endstr; \
+ endstr = UTF8_WCTOMB(UTF_CODE, DOLLAR_KEY); \
+ *endstr = '\0'; \
+ endstr = UTF8_WCTOMB(UTF_CODE, DOLLAR_ZB); \
+ *endstr = '\0'; \
+}
+
/* Maintenance of $ZB on a badchar error and returning partial data (if any) */
void iorm_readfl_badchar(mval *vmvalptr, int datalen, int delimlen, unsigned char *delimptr, unsigned char *strend)
{
@@ -103,9 +114,7 @@ void iorm_readfl_badchar(mval *vmvalptr, int datalen, int delimlen, unsigned cha
}
}
/* set dollar.device in the output device */
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- memcpy(&iod->dollar.device[len], BADCHAR_DEVICE_MSG, SIZEOF(BADCHAR_DEVICE_MSG));
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, BADCHAR_DEVICE_MSG);
REVERT_GTMIO_CH(&io_curr_device, ch_set);
}
#endif
@@ -117,7 +126,7 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
unsigned char *nextmb, *char_ptr, *char_start, *buffer_start;
int flags = 0;
int len;
- int errlen, real_errno;
+ int save_errno, errlen, real_errno;
int fcntl_res, stp_need;
int4 bytes2read, bytes_read, char_bytes_read, add_bytes, reclen;
int4 buff_len, mblen, char_count, bytes_count, tot_bytes_read, chunk_bytes_read, utf_tot_bytes_read;
@@ -216,12 +225,21 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
flags = 0;
FCNTL2(rm_ptr->fildes, F_GETFL, flags);
if (0 > flags)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, save_errno);
+ }
if (flags & O_NONBLOCK)
{
FCNTL3(rm_ptr->fildes, F_SETFL, (flags & ~O_NONBLOCK), fcntl_res);
if (0 > fcntl_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM,
+ save_errno);
+ }
}
}
/* if the last operation was a write to a disk, we need to initialize it so file_pos is pointing
@@ -232,8 +250,10 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
cur_position = lseek(rm_ptr->fildes, 0, SEEK_CUR);
if ((off_t)-1 == cur_position)
{
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7, RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("iorm_readfl()"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("iorm_readfl()"), CALLFROM, save_errno);
} else
rm_ptr->file_pos = cur_position;
*dollary_ptr = 0;
@@ -257,8 +277,12 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
{
FSTAT_FILE(fildes, &statbuf, fstat_res);
if (-1 == fstat_res)
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, RTS_ERROR_LITERAL("fstat"),
- CALLFROM, errno);
+ CALLFROM, save_errno);
+ }
assert(UTF16BE_BOM_LEN < UTF8_BOM_LEN);
if ((CHSET_UTF8 == io_ptr->ichset) && (statbuf.st_size >= UTF8_BOM_LEN))
bom_size_toread = UTF8_BOM_LEN;
@@ -269,16 +293,24 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
if (0 < bom_size_toread)
{
if ((off_t)-1 == lseek(fildes, 0, SEEK_SET))
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
RTS_ERROR_LITERAL("lseek"), RTS_ERROR_LITERAL(
"Error setting file pointer to beginning of file"),
- CALLFROM, errno);
+ CALLFROM, save_errno);
+ }
rm_ptr->bom_num_bytes = open_get_bom(io_ptr, bom_size_toread);
/* move back to previous file position */
if ((off_t)-1 == lseek(fildes, rm_ptr->file_pos, SEEK_SET))
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
RTS_ERROR_LITERAL("lseek"), RTS_ERROR_LITERAL(
- "Error restoring file pointer"), CALLFROM, errno);
+ "Error restoring file pointer"), CALLFROM, save_errno);
+ }
}
rm_ptr->bom_checked = TRUE;
}
@@ -333,6 +365,8 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
/* save the lastop for zeof test later */
saved_lastop = rm_ptr->lastop;
rm_ptr->lastop = RM_READ;
+ io_ptr->dollar.key[0] = '\0';
+ io_ptr->dollar.zb[0] = '\0';
timer_id = (TID)iorm_readfl;
max_width = io_ptr->width - *dollarx_ptr;
if (0 == width)
@@ -468,10 +502,20 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
out_of_time = TRUE;
FCNTL2(fildes, F_GETFL, flags);
if (0 > flags)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM,
+ save_errno);
+ }
FCNTL3(fildes, F_SETFL, (flags | O_NONBLOCK), fcntl_res);
if (0 > fcntl_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM,
+ save_errno);
+ }
blocked_in = FALSE;
if (rm_ptr->is_pipe)
pipe_zero_timeout = TRUE;
@@ -915,6 +959,8 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
if (NATIVE_NL == inchar)
{
line_term_seen = TRUE;
+ io_ptr->dollar.key[0] = io_ptr->dollar.zb[0] = NATIVE_NL;
+ io_ptr->dollar.key[1] = io_ptr->dollar.zb[1] = '\0';
if (!rdone)
break;
}
@@ -1480,38 +1526,118 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
UTF8_BADCHAR(char_bytes_read, char_start,
char_start + char_bytes_read, 0, NULL);
}
- if (u32_line_term[U32_LT_LF] == *char_start)
- if (rm_ptr->crlast)
+ if (ASCII_LF == *char_start)
+ {
+ if (rm_ptr->crlastbuff)
+ assert(rm_ptr->crlast);
+ if (rm_ptr->crlast && !rdone)
{ /* ignore LF following CR */
rm_ptr->crlast = FALSE;
rm_ptr->inbuf_pos = char_start;
bytes2read = 1; /* reset */
bytes_read = char_bytes_read = 0; /* start fresh */
tot_bytes_read--;
+ if (rm_ptr->crlastbuff)
+ {
+ /* $KEY contains CR at this point. append LF.
+ * Also, CR was the last char of the previous buffer
+ * We needed to inspect this char to be LF and did
+ * not terminate the previous READ. Terminate it.
+ */
+ rm_ptr->crlastbuff = FALSE;
+ assert(ASCII_CR == io_ptr->dollar.key[0]);
+ assert(ASCII_CR == io_ptr->dollar.zb[0]);
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_LF]
+ , &io_ptr->dollar.key[UTF8CRLEN],
+ &io_ptr->dollar.zb[UTF8CRLEN]);
+ break;
+ }
continue;
} else
{
line_term_seen = TRUE;
rm_ptr->inbuf_off = rm_ptr->inbuf_pos; /* mark as read */
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_LF],
+ &io_ptr->dollar.key[0], &io_ptr->dollar.zb[0]);
if (!rdone)
break;
}
+ } else if (rm_ptr->crlastbuff)
+ {
+ /* CR was the last char of the previous buffer.
+ * We needed to inspect this char to be LF.
+ * The previous READ was not terminated, terminate it.
+ * Also reset the buffer pointers so this char goes into next read.
+ */
+ rm_ptr->start_pos -= min_bytes_to_copy;
+ rm_ptr->inbuf_pos = char_start;
+ rm_ptr->crlastbuff = FALSE;
+ if (!rdone)
+ break;
+ }
rm_ptr->inbuf_off = rm_ptr->inbuf_pos; /* mark as read */
- if (u32_line_term[U32_LT_CR] == *char_start)
+ if (ASCII_CR == *char_start)
{
rm_ptr->crlast = TRUE;
line_term_seen = TRUE;
- if (!rdone)
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_CR],
+ &io_ptr->dollar.key[0], &io_ptr->dollar.zb[0]);
+ /* Peep into the next char to see if it's LF and append it to $KEY.
+ * If The buffer ends with 'CR', the next char in the buffer not yet
+ * read can be LF. So don't terminate this read and force the next
+ * read to check for LF in 1st char.
+ * Same is the case if reading from BOM bytes.
+ */
+ if (0 == rm_ptr->tot_bytes_in_buffer)
+ { /* Reading from BOM */
+ if (rm_ptr->bom_buf_off == rm_ptr->bom_buf_cnt)
+ rm_ptr->crlastbuff = TRUE;
+ else
+ {
+ rm_ptr->crlastbuff = FALSE;
+ if (ASCII_LF ==
+ rm_ptr->bom_buf[rm_ptr->bom_buf_off])
+ {
+ SET_UTF8_DOLLARKEY_DOLLARZB(
+ u32_line_term[U32_LT_LF],
+ &io_ptr->dollar.key[UTF8CRLEN],
+ &io_ptr->dollar.zb[UTF8CRLEN]);
+ }
+ }
+ } else
+ { /* Reading from the buffer */
+ if (rm_ptr->start_pos == rm_ptr->tot_bytes_in_buffer)
+ rm_ptr->crlastbuff = TRUE;
+ else
+ {
+ rm_ptr->crlastbuff = FALSE;
+ if (ASCII_LF ==
+ rm_ptr->tmp_buffer[rm_ptr->start_pos])
+ {
+ SET_UTF8_DOLLARKEY_DOLLARZB(
+ u32_line_term[U32_LT_LF],
+ &io_ptr->dollar.key[UTF8CRLEN],
+ &io_ptr->dollar.zb[UTF8CRLEN]);
+ }
+ }
+ }
+ if (!rdone && !rm_ptr->crlastbuff)
break;
} else
+ {
rm_ptr->crlast = FALSE;
- if (u32_line_term[U32_LT_FF] == *char_start)
+ rm_ptr->crlastbuff = FALSE;
+ }
+ if (ASCII_FF == *char_start)
{
line_term_seen = TRUE;
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_FF],
+ &io_ptr->dollar.key[0], &io_ptr->dollar.zb[0]);
if (!rdone)
break;
}
- *temp++ = *char_start;
+ if (!rm_ptr->crlastbuff)
+ *temp++ = *char_start;
PIPE_DEBUG(PRINTF("8: move *char_start to *temp\n"); DEBUGPIPEFLUSH);
} else
{
@@ -1538,6 +1664,8 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
u32_line_term[U32_LT_PS] == utf_code)
{
line_term_seen = TRUE;
+ SET_UTF8_DOLLARKEY_DOLLARZB(utf_code, &io_ptr->dollar.key[0],
+ &io_ptr->dollar.zb[0]);
if (!rdone)
break;
}
@@ -1546,7 +1674,8 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
char_bytes_read); DEBUGPIPEFLUSH);
temp += char_bytes_read;
}
- bytes_count += char_bytes_read;
+ if (!rm_ptr->crlastbuff)
+ bytes_count += char_bytes_read;
PIPE_DEBUG(PRINTF("11: bytes_count: %d \n", bytes_count); DEBUGPIPEFLUSH);
if (bytes_count > MAX_STRLEN)
{ /* need to leave bytes for this character in buffer */
@@ -1595,32 +1724,108 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
assert(nextmb == rm_ptr->inbuf_pos);
if (u32_line_term[U32_LT_LF] == utf_code)
{
- if (rm_ptr->crlast)
+ if (rm_ptr->crlastbuff)
+ assert(rm_ptr->crlast);
+ if (rm_ptr->crlast && !rdone)
{ /* ignore LF following CR */
rm_ptr->crlast = FALSE;
rm_ptr->inbuf_pos = char_start;
bytes2read = 2; /* reset */
bytes_read = char_bytes_read = 0; /* start fresh */
tot_bytes_read -= 2;
+ if (rm_ptr->crlastbuff)
+ {
+ /* $KEY contains CR at this point. append LF
+ * Also, CR was the last char of the previous buffer.
+ * We needed to inspect this char to be LF and did
+ * not terminate the previous READ. Terminate it.
+ */
+ rm_ptr->crlastbuff = FALSE;
+ assert(io_ptr->dollar.key[0] == ASCII_CR);
+ assert(io_ptr->dollar.zb[0] == ASCII_CR);
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_LF],
+ &io_ptr->dollar.key[UTF8CRLEN],
+ &io_ptr->dollar.zb[UTF8CRLEN]);
+ break;
+ }
continue;
+ } else
+ {
+ line_term_seen = TRUE;
+ rm_ptr->inbuf_off = rm_ptr->inbuf_pos; /* mark as read */
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_LF],
+ &io_ptr->dollar.key[0], &io_ptr->dollar.zb[0]);
+ if (!rdone)
+ break;
}
+ } else if (rm_ptr->crlastbuff)
+ {
+ /* CR was the last char of the previous buffer.
+ * We needed to inspect this char for LF.
+ * The previous READ was not terminated, terminate it.
+ * Also reset the buffer pointers so this char goes into next read.
+ */
+ rm_ptr->start_pos -= min_bytes_to_copy;
+ rm_ptr->inbuf_pos = char_start;
+ rm_ptr->crlastbuff = FALSE;
+ if (!rdone)
+ break;
}
rm_ptr->inbuf_off = rm_ptr->inbuf_pos; /* mark as read */
- if (u32_line_term[U32_LT_CR] == utf_code)
- rm_ptr->crlast = TRUE;
- else
- rm_ptr->crlast = FALSE;
for (ltind = 0; 0 < u32_line_term[ltind]; ltind++)
if (u32_line_term[ltind] == utf_code)
{
line_term_seen = TRUE;
+ SET_UTF8_DOLLARKEY_DOLLARZB(utf_code, &io_ptr->dollar.key[0],
+ &io_ptr->dollar.zb[0]);
break;
}
- if (line_term_seen && !rdone)
+ if (u32_line_term[U32_LT_CR] == utf_code)
+ {
+ rm_ptr->crlast = TRUE;
+ /* Peep into the next char to see if it's LF and append it to $KEY.
+ * If The buffer ends with 'CR', the next char in the buffer not yet read
+ * can be LF. So don't terminate this read and force the next read
+ * to check for LF in 1st char.
+ * Same is the case if reading from BOM bytes.
+ */
+ if (0 == rm_ptr->tot_bytes_in_buffer)
+ rm_ptr->crlastbuff = TRUE; /* CR read as BOM. */
+ else
+ { /* Reading from buffer */
+ if (rm_ptr->start_pos == rm_ptr->tot_bytes_in_buffer)
+ rm_ptr->crlastbuff = TRUE; /* CR last char of buf */
+ else
+ {
+ /* This is UTF-16. Consider the BE/LE differences. */
+ rm_ptr->crlastbuff = FALSE;
+ if ((CHSET_UTF16BE == chset) ?
+ ((0x0 == rm_ptr->tmp_buffer[rm_ptr->start_pos]) &&
+ (ASCII_LF ==
+ rm_ptr->tmp_buffer[rm_ptr->start_pos+1])) :
+ ((0x0 == rm_ptr->tmp_buffer[rm_ptr->start_pos+1]) &&
+ (ASCII_LF ==
+ rm_ptr->tmp_buffer[rm_ptr->start_pos])))
+ {
+ SET_UTF8_DOLLARKEY_DOLLARZB(u32_line_term[U32_LT_LF]
+ , &io_ptr->dollar.key[UTF8CRLEN],
+ &io_ptr->dollar.zb[UTF8CRLEN]);
+ }
+ }
+ }
+ } else
+ {
+ rm_ptr->crlast = FALSE;
+ rm_ptr->crlastbuff = FALSE;
+ }
+ if (line_term_seen && !rdone && !rm_ptr->crlastbuff)
break; /* out of do loop */
- temp_start = temp;
- temp = (char *)UTF8_WCTOMB(utf_code, temp_start);
- bytes_count += (int4)(temp - temp_start);
+ if (!rm_ptr->crlastbuff)
+ {
+ temp_start = temp;
+ temp = (char *)UTF8_WCTOMB(utf_code, temp_start);
+ bytes_count += (int4)(temp - temp_start);
+ }
if (bytes_count > MAX_STRLEN)
{ /* need to leave bytes for this character in buffer */
bytes_count -= (int4)(temp - temp_start);
@@ -1630,7 +1835,10 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
}
} else
assertpro(FALSE);
- char_count++;
+ if (!rm_ptr->crlastbuff)
+ {
+ char_count++;
+ }
char_start = rm_ptr->inbuf_pos = rm_ptr->inbuf_off = rm_ptr->inbuf;
bytes_read = char_bytes_read = 0;
bytes2read = (CHSET_UTF8 == chset) ? 1 : 2;
@@ -1673,7 +1881,7 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
cancel_timer(timer_id);
io_ptr->dollar.za = 9;
/* save error in $device */
- DOLLAR_DEVICE_SET(io_ptr, real_errno);
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, real_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) real_errno);
}
ret = FALSE;
@@ -1686,8 +1894,12 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
{
FCNTL3(fildes, F_SETFL, flags, fcntl_res);
if (0 > fcntl_res)
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(io_ptr, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"),
- CALLFROM, errno);
+ CALLFROM, save_errno);
+ }
}
if ((rm_ptr->is_pipe && (0 == status)) || (rm_ptr->fifo && (0 == status || real_errno == EAGAIN)))
ret = FALSE;
@@ -1712,8 +1924,10 @@ int iorm_readfl (mval *v, int4 width, int4 msec_timeout) /* timeout in milliseco
return FALSE;
}
/* on end of file set $za to 9 */
- len = SIZEOF(ONE_COMMA_DEV_DET_EOF);
- memcpy(io_ptr->dollar.device, ONE_COMMA_DEV_DET_EOF, len);
+ if (WBTEST_ENABLED(WBTEST_DOLLARDEVICE_BUFFER))
+ SET_DOLLARDEVICE_ERRSTR(io_ptr, ONE_COMMA_DEV_DET_EOF_DOLLARDEVICE);
+ else
+ SET_DOLLARDEVICE_ERRSTR(io_ptr, ONE_COMMA_DEV_DET_EOF);
io_ptr->dollar.za = 9;
if ((TRUE == io_ptr->dollar.zeof) && (RM_READ == saved_lastop))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_IOEOF);
diff --git a/sr_unix/iorm_use.c b/sr_unix/iorm_use.c
index 59cb5ba..df64ff0 100755
--- a/sr_unix/iorm_use.c
+++ b/sr_unix/iorm_use.c
@@ -39,18 +39,20 @@
#include "error.h"
#include "send_msg.h"
#include "get_fs_block_size.h"
+#include "op.h"
+#include "indir_enum.h"
/* Only want to do fstat() once on this file, not on every use. */
#define FSTAT_CHECK(GETMODE) \
- if (!(GETMODE) || !(fstat_done)) \
- { \
+ if (!(GETMODE) || !(fstat_done)) \
+ { \
FSTAT_FILE(rm_ptr->fildes, &statbuf, fstat_res); \
if (-1 == fstat_res) \
{ \
save_errno = errno; \
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, \
- RTS_ERROR_LITERAL("fstat"), \
- CALLFROM, save_errno); \
+ RTS_ERROR_LITERAL("fstat"), \
+ CALLFROM, save_errno); \
} \
fstat_done = TRUE; \
} \
@@ -203,7 +205,12 @@ void iorm_use(io_desc *iod, mval *pp)
boolean_t ch_set, def_recsize_before;
int disk_block_multiple;
size_t fwrite_buffer_size;
+ unsigned char *ch, ct, *end;
+ int chown_res;
+ uic_struct uic;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
p_offset = 0;
ESTABLISH_GTMIO_CH(&iod->pair, ch_set);
rm_ptr = (d_rm_struct *)iod->dev_sp;
@@ -227,8 +234,7 @@ void iorm_use(io_desc *iod, mval *pp)
switch (c = *(pp->str.addr + p_offset++))
{
case iop_exception:
- GET_LEN_AND_ADDR(iod->error_handler.addr, iod->error_handler.len);
- s2pool(&iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
case iop_fixed:
if (iod->state != dev_open)
@@ -295,7 +301,7 @@ void iorm_use(io_desc *iod, mval *pp)
break;
case iop_recordsize:
if (dev_open != iod->state || (!IS_UTF_CHSET(iod->ichset) && !IS_UTF_CHSET(iod->ochset)) ||
- (!rm_ptr->done_1st_read && !rm_ptr->done_1st_write))
+ (!rm_ptr->done_1st_read && !rm_ptr->done_1st_write))
{ /* only if not open, not UTF, or no reads or writes yet */
GET_LONG(recordsize, (pp->str.addr + p_offset));
if (recordsize <= 0)
@@ -306,7 +312,7 @@ void iorm_use(io_desc *iod, mval *pp)
rm_ptr->def_recsize = FALSE;
/* for sequential device in fixed M mode, recordsize defines initial width */
if (dev_open != iod->state && rm_ptr->fixed && (!rm_ptr->fifo && !rm_ptr->is_pipe) &&
- (!IS_UTF_CHSET(iod->ichset) && !IS_UTF_CHSET(iod->ochset)))
+ (!IS_UTF_CHSET(iod->ichset) && !IS_UTF_CHSET(iod->ochset)))
iod->width = recordsize;
}
break;
@@ -329,12 +335,10 @@ void iorm_use(io_desc *iod, mval *pp)
if ((off_t)-1 == lseek(rm_ptr->fildes, 0, SEEK_SET))
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7, RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("REWIND"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("REWIND"), CALLFROM, errno);
}
-
/* need to do FSTAT_FILE to get file size if not already done */
FSTAT_CHECK(FALSE);
-
/* if file size is not zero then not at end of file */
if (0 != statbuf.st_size)
iod->dollar.zeof = FALSE;
@@ -389,7 +393,6 @@ void iorm_use(io_desc *iod, mval *pp)
int fc_res;
FILE *newstr;
int newfd;
-
/* don't truncate unless it is a regular file */
FSTAT_CHECK(TRUE);
if (!(S_IFREG & mode))
@@ -398,24 +401,23 @@ void iorm_use(io_desc *iod, mval *pp)
* or the end of the file, unless there have been no writes.
*/
if ((0 != rm_ptr->file_pos) && (!iod->dollar.zeof)
- && rm_ptr->output_encrypted && rm_ptr->write_occurred)
+ && rm_ptr->output_encrypted && rm_ptr->write_occurred)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_CRYPTNOTRUNC, 2,
- dev_name->len, dev_name->dollar_io);
+ dev_name->len, dev_name->dollar_io);
}
/* If already open, truncate, close, and reopen the device. */
if (dev_open == iod->state)
{
/* if last operation was a write then set file_pos to position after write */
if (RM_WRITE == rm_ptr->lastop)
- {
- /* need to do an lseek to get current location in file */
+ { /* need to do an lseek to get current location in file */
cur_position = lseek(rm_ptr->fildes, 0, SEEK_CUR);
if ((off_t)-1 == cur_position)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("lseek"),
+ RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
} else
rm_ptr->file_pos = cur_position;
}
@@ -423,10 +425,9 @@ void iorm_use(io_desc *iod, mval *pp)
if (0 != ftruncate_res)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("ftruncate"),
- RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("ftruncate"),
+ RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
}
-
/* the following is only necessary for a non-split device */
if (iod->pair.in == iod->pair.out)
{
@@ -436,8 +437,7 @@ void iorm_use(io_desc *iod, mval *pp)
} while (-1 == newfd && EINTR == errno);
if (-1 == newfd)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
- RTS_ERROR_LITERAL("dup"), CALLFROM, save_errno);
-
+ RTS_ERROR_LITERAL("dup"), CALLFROM, save_errno);
if (TRUE == rm_ptr->read_only)
{
FDOPEN(newstr,newfd,"r");
@@ -446,28 +446,26 @@ void iorm_use(io_desc *iod, mval *pp)
FDOPEN(newstr,newfd,"w");
} else
FDOPEN(newstr,newfd,"r+");
-
CLOSE(rm_ptr->fildes,fc_res);
FCLOSE(rm_ptr->filstr,fc_res);
rm_ptr->filstr = newstr;
rm_ptr->fildes = newfd;
}
}
-
/* the following it only necessary for a non-split device */
if (iod->pair.in == iod->pair.out)
{
if ((off_t)-1 == fseeko(rm_ptr->filstr, rm_ptr->file_pos, SEEK_SET))
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("fseeko"),
- RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("fseeko"),
+ RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
}
}
if ((off_t)-1 == lseek(rm_ptr->fildes, rm_ptr->file_pos, SEEK_SET))
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7, RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
}
/* if not open then do the truncate here */
if (dev_open != iod->state)
@@ -476,10 +474,9 @@ void iorm_use(io_desc *iod, mval *pp)
if (0 != ftruncate_res)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("ftruncate"),
- RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("ftruncate"),
+ RTS_ERROR_LITERAL("TRUNCATE"), CALLFROM, errno);
}
-
}
/* If we have truncated to the beginning of the file, we are starting afresh, so even a different
* KEY or IV may be specified (hence ...was_encrypted is being set to FALSE).
@@ -520,10 +517,6 @@ void iorm_use(io_desc *iod, mval *pp)
break;
case iop_uic:
{
- unsigned char *ch, ct, *end;
- int chown_res;
- uic_struct uic;
-
ch = (unsigned char *)pp->str.addr + p_offset;
ct = *ch++;
end = ch + ct;
@@ -571,10 +564,10 @@ void iorm_use(io_desc *iod, mval *pp)
break; /* ignore wrap if BINARY specified */
} else
{ /* already open so check what conversion is in use */
-#ifdef __MVS__
+# ifdef __MVS__
if (CHSET_BINARY == iod->process_chset)
break;
-#endif
+# endif
}
iod->wrap = TRUE;
seen_wrap = TRUE; /* Don't allow WIDTH=0 to override WRAP */
@@ -584,40 +577,38 @@ void iorm_use(io_desc *iod, mval *pp)
break;
case iop_ipchset:
{
-#ifdef KEEP_zOS_EBCDIC
- if ( (iconv_t)0 != iod->input_conv_cd )
+# ifdef KEEP_zOS_EBCDIC
+ if ((iconv_t)0 != iod->input_conv_cd)
{
ICONV_CLOSE_CD(iod->input_conv_cd);
}
SET_CODE_SET(iod->in_code_set, (char *)(pp->str.addr + p_offset + 1));
if (DEFAULT_CODE_SET != iod->in_code_set)
ICONV_OPEN_CD(iod->input_conv_cd, (char *)(pp->str.addr + p_offset + 1),
- INSIDE_CH_SET);
-#endif
+ INSIDE_CH_SET);
+# endif
if (chset_allowed)
{
GET_ADDR_AND_LEN(chset_mstr.addr, chset_mstr.len);
SET_ENCODING(temp_chset, &chset_mstr);
if (!gtm_utf8_mode && IS_UTF_CHSET(temp_chset))
break; /* ignore UTF chsets if not utf8_mode */
-
CHECK_UTF16_VARIANT_AND_SET_CHSET(rm_ptr->ichset_utf16_variant, iod->ichset, temp_chset);
ichset_specified = TRUE;
}
}
break;
- case iop_opchset:
+ case iop_opchset:
{
-#ifdef KEEP_zOS_EBCDIC
- if ( (iconv_t) 0 != iod->output_conv_cd )
+# ifdef KEEP_zOS_EBCDIC
+ if ((iconv_t) 0 != iod->output_conv_cd)
{
ICONV_CLOSE_CD(iod->output_conv_cd);
}
SET_CODE_SET(iod->out_code_set, (char *)(pp->str.addr + p_offset + 1));
if (DEFAULT_CODE_SET != iod->out_code_set)
- ICONV_OPEN_CD(iod->output_conv_cd, INSIDE_CH_SET,
- (char *)(pp->str.addr + p_offset + 1));
-#endif
+ ICONV_OPEN_CD(iod->output_conv_cd, INSIDE_CH_SET, (char *)(pp->str.addr + p_offset + 1));
+# endif
if (chset_allowed)
{
GET_ADDR_AND_LEN(chset_mstr.addr, chset_mstr.len);
@@ -631,7 +622,7 @@ void iorm_use(io_desc *iod, mval *pp)
}
}
break;
- case iop_chset:
+ case iop_chset:
{
if (chset_allowed)
{
@@ -694,7 +685,6 @@ void iorm_use(io_desc *iod, mval *pp)
{
/* need to do FSTAT_FILE to get file size if not already done */
FSTAT_CHECK(FALSE);
-
/* if file size is not zero then process seek request */
if (0 != statbuf.st_size)
{
@@ -706,8 +696,8 @@ void iorm_use(io_desc *iod, mval *pp)
if ((off_t)-1 == cur_position)
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("SEEK"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("lseek"),
+ RTS_ERROR_LITERAL("SEEK"), CALLFROM, errno);
} else
rm_ptr->file_pos = cur_position;
}
@@ -720,8 +710,8 @@ void iorm_use(io_desc *iod, mval *pp)
* beginning of the file and read the potential BOM.
*/
if ((!rm_ptr->bom_checked) && (!rm_ptr->no_destroy) && (!rm_ptr->fifo) && (!rm_ptr->is_pipe)
- && (!rm_ptr->input_encrypted) && (2 < rm_ptr->fildes) && (0 < statbuf.st_size)
- && IS_UTF_CHSET(iod->ichset) && !rm_ptr->write_only)
+ && (!rm_ptr->input_encrypted) && (2 < rm_ptr->fildes) && (0 < statbuf.st_size)
+ && IS_UTF_CHSET(iod->ichset) && !rm_ptr->write_only)
{
assert(UTF16BE_BOM_LEN < UTF8_BOM_LEN);
if ((CHSET_UTF8 == iod->ichset) && (statbuf.st_size >= UTF8_BOM_LEN))
@@ -734,15 +724,14 @@ void iorm_use(io_desc *iod, mval *pp)
{
if ((off_t)-1 == lseek(rm_ptr->fildes, 0, SEEK_SET))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("SEEK"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("lseek"),
+ RTS_ERROR_LITERAL("SEEK"), CALLFROM, errno);
rm_ptr->bom_num_bytes = open_get_bom(iod, bom_size_toread);
-
/* move back to previous file position */
if ((off_t)-1 == lseek(rm_ptr->fildes, rm_ptr->file_pos, SEEK_SET))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("SEEK"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("lseek"),
+ RTS_ERROR_LITERAL("SEEK"), CALLFROM, errno);
}
rm_ptr->bom_checked = TRUE;
}
@@ -770,63 +759,56 @@ void iorm_use(io_desc *iod, mval *pp)
OUTPUT_SDSEEKERR(seek_str);
if ('\0' != *endptr)
OUTPUT_SDSEEKERR(seek_str);
-
if (SEEK_MINUS == seek_type)
seek_value = -seek_value;
-
/* if fixed then convert record offset to byte offset in file */
if (rm_ptr->fixed)
{
if (IS_UTF_CHSET(iod->ichset))
{
/* utf reads recordsize so if we only processed part of the record
- adjust it back to the beginning of the record. */
+ * adjust it back to the beginning of the record.
+ */
if (rm_ptr->inbuf_top - rm_ptr->inbuf_off)
{
current_offset = rm_ptr->file_pos - rm_ptr->recordsize;
} else
current_offset = rm_ptr->file_pos;
-
if (!rm_ptr->bom_num_bytes)
seek_value *= rm_ptr->recordsize; /* no bom to deal with */
else
{
/* account for bom if absolute seek or relative positive seek
- and we are at the beginning of the file*/
- if ((seek_type == SEEK_ABS) ||
- ((0 == current_offset) && (0 < seek_value)))
- seek_value = seek_value * rm_ptr->recordsize +
- rm_ptr->bom_num_bytes;
+ * and we are at the beginning of the file
+ */
+ if ((seek_type == SEEK_ABS)
+ || ((0 == current_offset) && (0 < seek_value)))
+ seek_value = seek_value * rm_ptr->recordsize
+ + rm_ptr->bom_num_bytes;
else
{
if (0 == current_offset)
- {
- /* zero or less seek from the
- beginning of the file */
+ { /* zero or less seek from beginning of the file */
seek_value = -1; /* new_position will be 0 below */
} else
seek_value *= rm_ptr->recordsize;
}
-
}
} else
{
current_offset = (rm_ptr->file_pos / iod->width) * iod->width;
/* Need to adjust current_offset so we land on a record boundary.
- If the current_offset is in the middle of the record then adjust
- it so that a relative +0 lands at the beginning of the record */
+ * If the current_offset is in the middle of the record then adjust
+ * it so that a relative +0 lands at the beginning of the record
+ */
seek_value *= iod->width;
}
} else
current_offset = rm_ptr->file_pos;
-
if (seek_type == SEEK_ABS)
new_position = seek_value;
else
- {
new_position = current_offset + seek_value;
- }
-
/* limit the range of the new calculated position from zero to the file size */
if (0 > new_position)
new_position = 0;
@@ -836,8 +818,8 @@ void iorm_use(io_desc *iod, mval *pp)
{
save_errno = errno;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7,
- RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("SEEK"), CALLFROM, save_errno);
+ RTS_ERROR_LITERAL("lseek"),
+ RTS_ERROR_LITERAL("SEEK"), CALLFROM, save_errno);
}
if (statbuf.st_size == new_position) /* at end of file */
iod->dollar.zeof = TRUE;
@@ -908,8 +890,8 @@ void iorm_use(io_desc *iod, mval *pp)
default:
break;
}
- p_offset += ((IOP_VAR_SIZE == io_params_size[c]) ?
- (unsigned char)*(pp->str.addr + p_offset) + 1 : io_params_size[c]);
+ p_offset += ((IOP_VAR_SIZE == io_params_size[c])
+ ? (unsigned char)*(pp->str.addr + p_offset) + 1 : io_params_size[c]);
}
if (dev_open != iod->state || ichset_specified || ochset_specified)
{
@@ -943,13 +925,12 @@ void iorm_use(io_desc *iod, mval *pp)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_RECSIZENOTEVEN, 1, rm_ptr->recordsize);
}
}
-
/* Now that recordsize and CHSET parms have been handled (if any), set WIDTH if necessary */
if (rm_ptr->def_width && (recsize_before != rm_ptr->recordsize || def_recsize_before != rm_ptr->def_recsize))
{ /* record size was specified even if the same value */
SET_WIDTH_BYTES;
assert(width_bytes <= rm_ptr->recordsize); /* or else RECSIZENOTEVEN error would have been issued */
- iod->width = rm_ptr->recordsize; /* this width will hold at least one character due to above check */
+ iod->width = rm_ptr->recordsize; /* this width will hold at least one character due to above check */
}
if (dev_closed == iod->state)
{
@@ -1002,11 +983,9 @@ void iorm_use(io_desc *iod, mval *pp)
rm_ptr->outbuf = malloc(rm_ptr->outbufsize);
rm_ptr->out_bytes = 0;
}
-
assert(((!rm_ptr->input_encrypted) && (!rm_ptr->output_encrypted)) || (dev_open == iod->state) || rm_ptr->no_destroy);
assert((!rm_ptr->input_encrypted) || (0 != rm_ptr->input_key.len));
assert((!rm_ptr->output_encrypted) || (0 != rm_ptr->output_key.len));
-
if (rm_ptr->input_encrypted)
{ /* Device's input already encrypted. */
if (input_key_entry_present)
@@ -1055,7 +1034,6 @@ void iorm_use(io_desc *iod, mval *pp)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_CRYPTNOKEYSPEC);
}
}
-
if (rm_ptr->output_encrypted)
{ /* Device's output already encrypted. */
if (output_key_entry_present)
@@ -1107,7 +1085,7 @@ void iorm_use(io_desc *iod, mval *pp)
assert((!reset_input_encryption) || rm_ptr->input_encrypted);
assert((!reset_output_encryption) || rm_ptr->output_encrypted);
if ((rm_ptr->input_encrypted || init_input_encryption || reset_input_encryption
- || rm_ptr->output_encrypted || init_output_encryption || reset_output_encryption) && seek_specified)
+ || rm_ptr->output_encrypted || init_output_encryption || reset_output_encryption) && seek_specified)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_CRYPTNOSEEK, 2, dev_name->len, dev_name->dollar_io);
if (init_input_encryption || init_output_encryption)
{ /* First time the device is getting encryption turned on. Initialize encryption and setup the keys. */
@@ -1134,7 +1112,7 @@ void iorm_use(io_desc *iod, mval *pp)
} else if (reset_input_encryption)
{
INIT_CIPHER_CONTEXT(GTMCRYPT_OP_DECRYPT, rm_ptr->input_key, rm_ptr->input_iv,
- rm_ptr->input_cipher_handle, dev_name);
+ rm_ptr->input_cipher_handle, dev_name);
}
if (reset_output_encryption && (GTMCRYPT_INVALID_KEY_HANDLE != rm_ptr->output_cipher_handle))
{
@@ -1155,7 +1133,7 @@ void iorm_use(io_desc *iod, mval *pp)
} else if (reset_output_encryption)
{
INIT_CIPHER_CONTEXT(GTMCRYPT_OP_ENCRYPT, rm_ptr->output_key, rm_ptr->output_iv,
- rm_ptr->output_cipher_handle, dev_name);
+ rm_ptr->output_cipher_handle, dev_name);
}
if (init_input_encryption || reset_input_encryption || init_output_encryption || reset_output_encryption)
{ /* Setup an encryption private buffer of size equal to record size. */
diff --git a/sr_unix/iorm_write.c b/sr_unix/iorm_write.c
index 5e5123f..8f38270 100755
--- a/sr_unix/iorm_write.c
+++ b/sr_unix/iorm_write.c
@@ -112,7 +112,7 @@ void iorm_write_utf(mstr *v)
int4 inchars, char_count; /* in characters */
int4 inlen, outbytes, mblen; /* in bytes */
int4 availwidth, usedwidth, mbwidth; /* in display columns */
- int status, padsize,fstat_res,save_errno;
+ int status, padsize, fstat_res, save_errno;
wint_t utf_code;
io_desc *iod;
d_rm_struct *rm_ptr;
@@ -164,6 +164,7 @@ void iorm_write_utf(mstr *v)
if (-1 == fstat_res)
{
save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, RTS_ERROR_LITERAL("fstat"),
CALLFROM, save_errno);
}
@@ -396,11 +397,15 @@ void iorm_write(mstr *v)
if (-1 == fstat_res)
{
save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, RTS_ERROR_LITERAL("fstat"),
CALLFROM, save_errno);
}
if (0 != statbuf.st_size)
+ {
+ SET_DOLLARDEVICE_ERRSTR(iod, ONE_COMMA_CRYPTBADWRTPOS);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_CRYPTBADWRTPOS);
+ }
}
}
}
@@ -412,12 +417,21 @@ void iorm_write(mstr *v)
flags = 0;
FCNTL2(rm_ptr->fildes, F_GETFL, flags);
if (0 > flags)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, save_errno);
+ }
if (!(flags & O_NONBLOCK))
{
FCNTL3(rm_ptr->fildes, F_SETFL, (flags | O_NONBLOCK), fcntl_res);
if (0 > fcntl_res)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM, errno);
+ {
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT("fcntl"), CALLFROM,
+ save_errno);
+ }
}
}
@@ -426,8 +440,10 @@ void iorm_write(mstr *v)
/* need to do an lseek to set current location in file */
if ((off_t)-1 == (lseek(rm_ptr->fildes, rm_ptr->file_pos, SEEK_SET)))
{
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7, RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("iorm_write()"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("iorm_write()"), CALLFROM, save_errno);
}
}
@@ -440,8 +456,10 @@ void iorm_write(mstr *v)
/* need to do lseek to skip the BOM before writing*/
if ((off_t)-1 == (lseek(rm_ptr->fildes, (off_t)rm_ptr->bom_num_bytes, SEEK_SET)))
{
+ save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_IOERROR, 7, RTS_ERROR_LITERAL("lseek"),
- RTS_ERROR_LITERAL("iorm_write()"), CALLFROM, errno);
+ RTS_ERROR_LITERAL("iorm_write()"), CALLFROM, save_errno);
}
}
diff --git a/sr_unix/iorm_wteol.c b/sr_unix/iorm_wteol.c
index 8862673..29edddd 100755
--- a/sr_unix/iorm_wteol.c
+++ b/sr_unix/iorm_wteol.c
@@ -45,7 +45,7 @@ error_def(ERR_SYSCALL);
void iorm_wteol(int4 x,io_desc *iod)
{
int i, fixed_pad, fixed_pad_bytes, bytes_per_char, avail_bytes, pad_size, res_size;
- int status, outbytes;
+ int status, outbytes, len;
char *outstr, temppad, temppadarray[2], *out_ptr;
d_rm_struct *rm_ptr;
unsigned int *dollarx_ptr;
@@ -94,11 +94,15 @@ void iorm_wteol(int4 x,io_desc *iod)
if (-1 == fstat_res)
{
save_errno = errno;
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, RTS_ERROR_LITERAL("fstat"),
CALLFROM, save_errno);
}
if (0 != statbuf.st_size)
+ {
+ SET_DOLLARDEVICE_ERRSTR(iod, ONE_COMMA_CRYPTBADWRTPOS);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_CRYPTBADWRTPOS);
+ }
}
}
}
diff --git a/sr_unix/iormdef.h b/sr_unix/iormdef.h
index f9c63e6..6e6d224 100755
--- a/sr_unix/iormdef.h
+++ b/sr_unix/iormdef.h
@@ -20,9 +20,10 @@
#define DEF_RM_LENGTH 66
#define CHUNK_SIZE BUFSIZ
-#define ONE_COMMA "1,"
#define ONE_COMMA_UNAVAILABLE "1,Resource temporarily unavailable"
-#define ONE_COMMA_DEV_DET_EOF "1,Device detected EOF"
+#define ONE_COMMA_DEV_DET_EOF "1,Device detected EOF"
+#define ONE_COMMA_DEV_DET_EOF_DOLLARDEVICE "1,Device detected EOF ..... Now just exceed this line to more than DD_BUFLEN (80)."
+#define ONE_COMMA_CRYPTBADWRTPOS "1,Encrypted WRITE disallowed from a position different than where the last WRITE completed"
#define DEF_RM_PADCHAR ' ' /* SPACE */
@@ -165,7 +166,10 @@ error_def(ERR_CRYPTBADWRTPOS);
stop_image_no_core(); \
} \
} \
- DOLLAR_DEVICE_WRITE(IOD, write_status); \
+ if (EAGAIN == write_status) \
+ SET_DOLLARDEVICE_ERRSTR(IOD, ONE_COMMA_UNAVAILABLE); \
+ else \
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(IOD, write_status); \
IOD->dollar.za = 9; \
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) write_status); \
} \
@@ -283,6 +287,7 @@ typedef struct
gtm_chset_t ochset_utf16_variant; /* Used to determine UTF16 variant when CHSET is changed b/w UTF16 & M. */
uint4 fsblock_buffer_size; /* I/O buffer size; 1 == default size; 0 == no buffering */
char *fsblock_buffer; /* I/O buffer for, erm, buffered I/O */
+ boolean_t crlastbuff; /* Whether CR was last char of the buffer */
} d_rm_struct; /* rms */
#ifdef KEEP_zOS_EBCDIC
diff --git a/sr_unix/iosocket_pass_local.c b/sr_unix/iosocket_pass_local.c
index 7d3a965..20af638 100644
--- a/sr_unix/iosocket_pass_local.c
+++ b/sr_unix/iosocket_pass_local.c
@@ -74,8 +74,6 @@
#define ACCEPT_COMPLETE "ACCEPT_COMPLETE"
#define PROTOCOL_ERROR "Protocol Error"
-#define DOLLAR_DEVICE_PREFIX "1,"
-
GBLREF d_socket_struct *socket_pool;
GBLREF io_pair io_std_device;
GBLREF int4 gtm_max_sockets;
@@ -282,11 +280,10 @@ void iosocket_pass_local(io_desc *iod, pid_t pid, int4 msec_timeout, int argcnt,
cancel_timer(timer_id);
iod->dollar.za = 9;
errptr = PROTOCOL_ERROR;
- errlen = STR_LIT_LEN(PROTOCOL_ERROR);
- MEMCPY_LIT(iod->dollar.device, DOLLAR_DEVICE_PREFIX);
- memcpy(&iod->dollar.device[STR_LIT_LEN(DOLLAR_DEVICE_PREFIX)], errptr, errlen + 1); /* we want the null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errptr);
if (socketptr->ioerror)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SOCKPASS, 0, ERR_TEXT, 2, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SOCKPASS, 0, ERR_TEXT, 2, STR_LIT_LEN(PROTOCOL_ERROR),
+ errptr);
REVERT_GTMIO_CH(&iod->pair, ch_set);
return;
}
@@ -314,10 +311,7 @@ ioerr:
if ((NO_M_TIMEOUT != msec_timeout) && !out_of_time)
cancel_timer(timer_id);
iod->dollar.za = 9;
- errptr = (char *)STRERROR(save_errno);
- errlen = strlen(errptr);
- MEMCPY_LIT(iod->dollar.device, DOLLAR_DEVICE_PREFIX);
- memcpy(&iod->dollar.device[STR_LIT_LEN(DOLLAR_DEVICE_PREFIX)], errptr, errlen + 1); /* we want the null */
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SOCKPASS, 0, save_errno, 0);
REVERT_GTMIO_CH(&iod->pair, ch_set);
@@ -449,11 +443,10 @@ void iosocket_accept_local(io_desc *iod, mval *handlesvar, pid_t pid, int4 msec_
{
iod->dollar.za = 9;
errptr = PROTOCOL_ERROR;
- errlen = STR_LIT_LEN(PROTOCOL_ERROR);
- MEMCPY_LIT(iod->dollar.device, DOLLAR_DEVICE_PREFIX);
- memcpy(&iod->dollar.device[STR_LIT_LEN(DOLLAR_DEVICE_PREFIX)], errptr, errlen + 1); /* we want the null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errptr);
if (socketptr->ioerror)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_SOCKACCEPT, 0, ERR_TEXT, 2, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_SOCKACCEPT, 0, ERR_TEXT, 2, STR_LIT_LEN(PROTOCOL_ERROR),
+ errptr);
}
cmsg = CMSG_FIRSTHDR(&msg);
while((cmsg != NULL) && ((SOL_SOCKET != cmsg->cmsg_level) || (SCM_RIGHTS != cmsg->cmsg_type)))
@@ -556,11 +549,10 @@ void iosocket_accept_local(io_desc *iod, mval *handlesvar, pid_t pid, int4 msec_
}
iod->dollar.za = 9;
errptr = PROTOCOL_ERROR;
- errlen = STR_LIT_LEN(PROTOCOL_ERROR);
- MEMCPY_LIT(iod->dollar.device, DOLLAR_DEVICE_PREFIX);
- memcpy(&iod->dollar.device[STR_LIT_LEN(DOLLAR_DEVICE_PREFIX)], errptr, errlen + 1); /* we want the null */
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errptr);
if (socketptr->ioerror)
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_SOCKACCEPT, 0, ERR_TEXT, 2, errlen, errptr);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_SOCKACCEPT, 0, ERR_TEXT, 2, STR_LIT_LEN(PROTOCOL_ERROR),
+ errptr);
REVERT_GTMIO_CH(&iod->pair, ch_set);
return;
}
@@ -612,10 +604,7 @@ ioerr:
if ((EINTR != save_errno) || outofband)
{
iod->dollar.za = 9;
- errptr = (char *)STRERROR(save_errno);
- errlen = strlen(errptr);
- MEMCPY_LIT(iod->dollar.device, DOLLAR_DEVICE_PREFIX);
- memcpy(&iod->dollar.device[STR_LIT_LEN(DOLLAR_DEVICE_PREFIX)], errptr, errlen + 1); /* we want the null */
+ SET_DOLLARDEVICE_ONECOMMA_STRERROR(iod, save_errno);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SOCKACCEPT, 0, save_errno, 0);
}
diff --git a/sr_unix/iosocket_tls.c b/sr_unix/iosocket_tls.c
index ecfa8de..1ce4733 100644
--- a/sr_unix/iosocket_tls.c
+++ b/sr_unix/iosocket_tls.c
@@ -62,6 +62,8 @@ error_def(ERR_ZINTRECURSEIO);
#define COLONBRACKET ": { "
#define BRACKETSSEMIS " }; };"
#define RENEGOTIATE "RENEGOTIATE"
+#define FLUSH_OUTPUT_ERROR "unable to flush pending output"
+#define UNREAD_INPUT "unread input"
typedef enum
{
@@ -188,13 +190,7 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
if (NULL == (tls_ctx = (gtm_tls_init(GTM_TLS_API_VERSION, GTMTLS_OP_INTERACTIVE_MODE))))
{
errp = gtm_tls_get_error();
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSINIT, 0, ERR_TEXT, 2, errlen, errp);
if (NO_M_TIMEOUT != msec_timeout)
@@ -232,13 +228,7 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
socketptr->tlsenabled = FALSE;
free(extrastr);
errp = gtm_tls_get_error();
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSCONVSOCK, 0, ERR_TEXT, 2, errlen, errp);
return;
} else
@@ -256,13 +246,7 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
{ /* error string available */
socketptr->tlsenabled = FALSE;
errp = gtm_tls_get_error();
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSCONVSOCK, 0, ERR_TEXT, 2, errlen, errp);
return;
}
@@ -272,13 +256,7 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
{
socketptr->tlsenabled = FALSE;
errp = gtm_tls_get_error();
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSCONVSOCK, 0, ERR_TEXT, 2, errlen, errp);
if (NO_M_TIMEOUT != msec_timeout)
@@ -346,13 +324,7 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
} else
errp = STRERROR(save_errno);
socketptr->tlsenabled = FALSE;
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSHANDSHAKE, 0,
ERR_TEXT, 2, errlen, errp);
@@ -419,14 +391,8 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
}
if ((0 < socketptr->buffered_length) || (0 < gtm_tls_cachedbytes((gtm_tls_socket_t *)socketptr->tlssocket)))
{ /* if anything in input buffer or ready to be read then error */
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errp = "unread input";
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ errp = UNREAD_INPUT;
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSRENEGOTIATE, 0,
ERR_TEXT, 2, errlen, errp);
@@ -440,22 +406,12 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
iosocket_flush(iod);
if (0 < socketptr->obuffer_length)
{ /* get obuffer_error as additional ERR_TEXT */
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errp = "unable to flush pending output";
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- len += devlen;
+ errp = FLUSH_OUTPUT_ERROR;
if (-1 == socketptr->obuffer_errno)
errp2 = gtm_tls_get_error();
else
errp2 = (char *)STRERROR(socketptr->obuffer_errno);
- errlen2 = STRLEN(errp2);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen2);
- memcpy(&iod->dollar.device[len], errp2, devlen + 1);
- if (devlen < errlen2)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR1_ERRSTR2(iod, errp, errp2);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(10) ERR_TLSRENEGOTIATE, 0,
ERR_TEXT, 2, errlen, errp, ERR_TEXT, 2, errlen2, errp2);
@@ -505,13 +461,7 @@ void iosocket_tls(mval *optionmval, int4 msec_timeout, mval *tlsid, mval *passwo
errp = gtm_tls_get_error();
else
errp = STRERROR(tls_errno);
- len = SIZEOF(ONE_COMMA) - 1;
- memcpy(iod->dollar.device, ONE_COMMA, len);
- errlen = STRLEN(errp);
- devlen = MIN((SIZEOF(iod->dollar.device) - len - 1), errlen);
- memcpy(&iod->dollar.device[len], errp, devlen + 1);
- if (devlen < errlen)
- iod->dollar.device[SIZEOF(iod->dollar.device) - 1] = '\0';
+ SET_DOLLARDEVICE_ONECOMMA_ERRSTR(iod, errp);
if (socketptr->ioerror)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_TLSRENEGOTIATE, 0,
ERR_TEXT, 2, errlen, errp);
diff --git a/sr_unix/iott_close.c b/sr_unix/iott_close.c
index ff0ca15..4c255d0 100755
--- a/sr_unix/iott_close.c
+++ b/sr_unix/iott_close.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -79,6 +79,11 @@ void iott_close(io_desc *v, mval *pp)
free(ttptr->recall_buff.addr);
ttptr->recall_buff.addr = NULL;
}
+ if (v->dollar.devicebuffer)
+ {
+ free(v->dollar.devicebuffer);
+ v->dollar.devicebuffer = NULL;
+ }
REVERT_GTMIO_CH(&v->pair, ch_set);
return;
}
diff --git a/sr_unix/iott_iocontrol.c b/sr_unix/iott_iocontrol.c
index 2f5bd4a..808e529 100644
--- a/sr_unix/iott_iocontrol.c
+++ b/sr_unix/iott_iocontrol.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -27,14 +28,9 @@ void iott_iocontrol(mstr *mn, int4 argcnt, va_list args)
void iott_dlr_device(mstr *d)
{
io_desc *iod;
- int len;
iod = io_curr_device.in;
- len = STRLEN(iod->dollar.device);
- /* verify internal buffer has enough space for $DEVICE string value */
- assert((int)d->len > len);
- memcpy(d->addr, iod->dollar.device, len);
- d->len = len;
+ PUT_DOLLAR_DEVICE_INTO_MSTR(iod, d);
return;
}
diff --git a/sr_unix/iott_use.c b/sr_unix/iott_use.c
index 0be6a6c..fb981f4 100755
--- a/sr_unix/iott_use.c
+++ b/sr_unix/iott_use.c
@@ -40,6 +40,8 @@
#include "gtm_tparm.h"
#include "outofband.h"
#include "restrict.h"
+#include "op.h"
+#include "indir_enum.h"
LITDEF nametabent filter_names[] =
{
@@ -88,7 +90,10 @@ void iott_use(io_desc *iod, mval *pp)
uint4 mask_in;
unsigned char ch, len;
boolean_t ch_set;
+ mval mv;
+ DCL_THREADGBL_ACCESS;
+ SETUP_THREADGBL_ACCESS;
p_offset = 0;
assert(iod->state == dev_open);
ESTABLISH_GTMIO_CH(&iod->pair, ch_set);
@@ -234,9 +239,7 @@ void iott_use(io_desc *iod, mval *pp)
gtm_tputs(CLR_EOL, 1, outc);
break;
case iop_exception:
- iod->error_handler.len = *(pp->str.addr + p_offset);
- iod->error_handler.addr = (char *)(pp->str.addr + p_offset + 1);
- s2pool(&iod->error_handler);
+ DEF_EXCEPTION(pp, p_offset, iod);
break;
case iop_filter:
len = *(pp->str.addr + p_offset);
@@ -394,7 +397,7 @@ void iott_use(io_desc *iod, mval *pp)
case iop_ipchset:
{
# ifdef KEEP_zOS_EBCDIC
- if ( (iconv_t)0 != iod->input_conv_cd )
+ if ((iconv_t)0 != iod->input_conv_cd)
{
ICONV_CLOSE_CD(iod->input_conv_cd);
}
@@ -416,7 +419,7 @@ void iott_use(io_desc *iod, mval *pp)
case iop_opchset:
{
# ifdef KEEP_zOS_EBCDIC
- if ( (iconv_t)0 != iod->output_conv_cd)
+ if ((iconv_t)0 != iod->output_conv_cd)
{
ICONV_CLOSE_CD(iod->output_conv_cd);
}
diff --git a/sr_unix/iottdefsp.h b/sr_unix/iottdefsp.h
index 64f8070..9b1c935 100755
--- a/sr_unix/iottdefsp.h
+++ b/sr_unix/iottdefsp.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2006 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -13,17 +14,6 @@
#include "gtm_utf8.h"
#endif
-#define ASCII_ESC 27 /* this ASCII value is needed on any platform */
-#define EBCDIC_ESC 39
-#define ASCII_CR 13
-#define EBCDIC_CR 13
-#define ASCII_LF 10
-#define EBCDIC_LF 37
-#define ASCII_FF 12
-#define EBCDIC_FF 12
-#define ASCII_BS 8
-#define EBCDIC_BS 22
-#define VT 11
#define ASCII_TTEOL "\012"
#define EBCDIC_TTEOL "\025"
diff --git a/sr_unix/jnl_file_close_timer.c b/sr_unix/jnl_file_close_timer.c
old mode 100755
new mode 100644
diff --git a/sr_unix/jnl_file_extend.c b/sr_unix/jnl_file_extend.c
index 9cebf68..a2c6e1a 100644
--- a/sr_unix/jnl_file_extend.c
+++ b/sr_unix/jnl_file_extend.c
@@ -39,7 +39,7 @@
GBLREF gd_region *gv_cur_region;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF boolean_t in_jnl_file_autoswitch;
@@ -75,6 +75,7 @@ uint4 jnl_file_extend(jnl_private_control *jpc, uint4 total_jnl_rec_size)
uint4 aligned_tot_jrec_size, count;
uint4 jnl_fs_block_size, read_write_size;
unix_db_info *udi;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INST_FREEZE_ON_NOSPC_ENABLED */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -135,7 +136,7 @@ uint4 jnl_file_extend(jnl_private_control *jpc, uint4 total_jnl_rec_size)
* we will freeze the instance and wait for space to become available and keep
* retrying the writes. Therefore, we make the NOSPACEEXT a warning in this case.
*/
- if (!INST_FREEZE_ON_NOSPC_ENABLED(csa))
+ if (!INST_FREEZE_ON_NOSPC_ENABLED(csa, local_jnlpool))
{
send_msg_csa(CSA_ARG(csa) VARLSTCNT(6) ERR_NOSPACEEXT, 4,
JNL_LEN_STR(csd), new_blocks, avail_blocks);
diff --git a/sr_unix/jnlpool_init.c b/sr_unix/jnlpool_init.c
index c314e24..fa19089 100644
--- a/sr_unix/jnlpool_init.c
+++ b/sr_unix/jnlpool_init.c
@@ -57,16 +57,16 @@
#include "util.h" /* For OUT_BUFF_SIZE */
#include "repl_inst_ftok_counter_halted.h"
#include "eintr_wrapper_semop.h"
+#include "is_file_identical.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF recvpool_addrs recvpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
-GBLREF sm_uc_ptr_t jnldata_base;
GBLREF uint4 process_id;
GBLREF gd_region *gv_cur_region;
GBLREF gtmsource_options_t gtmsource_options;
GBLREF gtmrecv_options_t gtmrecv_options;
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
GBLREF seq_num seq_num_zero;
GBLREF enum gtmImageTypes image_type;
GBLREF node_local_ptr_t locknl;
@@ -80,6 +80,9 @@ GBLREF set_anticipatory_freeze_t set_anticipatory_freeze_fnptr;
GBLREF err_ctl merrors_ctl;
GBLREF jnl_gbls_t jgbl;
GBLREF gd_addr *gd_header;
+GBLREF char repl_instfilename[];
+GBLREF char repl_inst_name[];
+GBLREF gd_addr *repl_inst_from_gld;
#ifdef DEBUG
GBLREF uint4 is_updhelper;
@@ -94,6 +97,7 @@ error_def(ERR_JNLPOOLSETUP);
error_def(ERR_NOJNLPOOL);
error_def(ERR_PRIMARYISROOT);
error_def(ERR_PRIMARYNOTROOT);
+error_def(ERR_REPLINSTACC);
error_def(ERR_REPLINSTNMSAME);
error_def(ERR_REPLINSTNOHIST);
error_def(ERR_REPLINSTSECNONE);
@@ -117,11 +121,11 @@ error_def(ERR_TEXT);
} \
}
-#define DETACH_FROM_JNLPOOL_IF_NEEDED(RTS_ERROR_OR_GTM_PUTMSG) \
+#define DETACH_FROM_JNLPOOL_IF_NEEDED(JNLPOOL, RTS_ERROR_OR_GTM_PUTMSG) \
{ \
int status, save_errno; \
\
- if (NULL != jnlpool.jnlpool_ctl) \
+ if ((NULL != JNLPOOL) && (NULL != JNLPOOL->jnlpool_ctl)) \
{ \
JNLPOOL_SHMDT(jnlpool, status, save_errno); \
if (0 > status) \
@@ -130,13 +134,13 @@ error_def(ERR_TEXT);
} \
}
-#define DETACH_AND_REMOVE_SHM_AND_SEM \
+#define DETACH_AND_REMOVE_SHM_AND_SEM(JNLPOOL) \
{ \
if (new_ipc) \
{ \
assert(!IS_GTM_IMAGE); /* Since "gtm_putmsg" is done below ensure it is never GT.M */ \
- assert(NULL != jnlpool.jnlpool_ctl); \
- DETACH_FROM_JNLPOOL_IF_NEEDED(gtm_putmsg_csa); \
+ assert((NULL != JNLPOOL) && (NULL != JNLPOOL->jnlpool_ctl)); \
+ DETACH_FROM_JNLPOOL_IF_NEEDED(JNLPOOL, gtm_putmsg_csa); \
assert(INVALID_SHMID != udi->shmid); \
if (0 != shm_rmid(udi->shmid)) \
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2, \
@@ -156,10 +160,28 @@ error_def(ERR_TEXT);
} \
}
-void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t *jnlpool_creator)
+#define RELEASE_NEW_TMP_JNLPOOL(HAVETMPJPL, TMPJPL, DUMMYREG, JPL, SAVEJPL, GVCURREGION) \
+{ \
+ gd_region *save_cur_reg; \
+ \
+ if (HAVETMPJPL) \
+ { \
+ if (DUMMYREG) \
+ { \
+ save_cur_reg = GVCURREGION; \
+ GVCURREGION = TMPJPL->jnlpool_dummy_reg; \
+ mu_gv_cur_reg_free(); \
+ GVCURREGION = save_cur_reg; \
+ } \
+ JPL = SAVEJPL; \
+ free(TMPJPL); \
+ } \
+}
+
+void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t *jnlpool_creator, gd_addr *gd_ptr)
{
boolean_t hold_onto_ftok_sem, is_src_srvr, new_ipc, reset_gtmsrclcl_info, slot_needs_init, srv_alive;
- boolean_t cannot_activate, ftok_counter_halted, skip_locks;
+ boolean_t cannot_activate, ftok_counter_halted, skip_locks, new_tmp_jnlpool, new_dummy_reg, gdid_matched;
char instfilename[MAX_FN_LEN + 1], machine_name[MAX_MCNAMELEN], scndry_msg[OUT_BUFF_SIZE];
gd_region *r_save, *reg;
int status, save_errno;
@@ -172,8 +194,10 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
unsigned int full_len;
mutex_spin_parms_ptr_t jnlpool_mutex_spin_parms;
unix_db_info *udi;
+ gd_id instfilename_gdid;
sgmnt_addrs *csa, *csa_save;
gd_segment *seg;
+ gd_addr *repl_gld, *local_gdptr;
gtmsrc_lcl_ptr_t gtmsrclcl_ptr;
gtmsource_local_ptr_t gtmsourcelocal_ptr, reuse_slot_ptr;
uint4 gtmsource_pid, gtmrecv_pid;
@@ -181,6 +205,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
seq_num reuse_slot_seqnum, instfilehdr_seqno;
repl_histinfo last_histinfo;
jnlpool_ctl_ptr_t tmp_jnlpool_ctl;
+ jnlpool_addrs_ptr_t tmp_jnlpool, last_jnlpool, save_jnlpool;
struct sembuf sop[3];
uint4 sopcnt;
DEBUG_ONLY(int4 semval);
@@ -195,47 +220,112 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
memset(machine_name, 0, SIZEOF(machine_name));
if (GETHOSTNAME(machine_name, MAX_MCNAMELEN, status))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_TEXT, 2, RTS_ERROR_TEXT("Unable to get the hostname"), errno);
- if (NULL == recvpool.recvpool_dummy_reg)
+ save_jnlpool = jnlpool; /* so can be restored if error */
+ local_gdptr = gd_ptr ? gd_ptr : gd_header; /* note gd_header may be NULL */
+ /* note embedded assignment below */
+ assertpro(repl_gld = (gd_addr *)repl_inst_get_name(instfilename, &full_len, MAX_FN_LEN + 1, issue_rts_error, gd_ptr));
+ status = filename_to_id(&instfilename_gdid, instfilename);
+ if (SS_NORMAL != status)
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLINSTACC, 2, full_len, instfilename,
+ ERR_TEXT, 2, RTS_ERROR_LITERAL("could not get file id"), status);
+ /* look through jnlpool_head list for matching instfilename */
+ for (tmp_jnlpool = jnlpool_head, gdid_matched = FALSE; tmp_jnlpool; tmp_jnlpool = tmp_jnlpool->next)
{
+ if (NULL != tmp_jnlpool->jnlpool_dummy_reg)
+ {
+ reg = tmp_jnlpool->jnlpool_dummy_reg;
+ udi = FILE_INFO(reg);
+ if (is_gdid_identical(&instfilename_gdid, &udi->fileid))
+ {
+ gdid_matched = TRUE;
+ break;
+ }
+ }
+ }
+ if ((NULL == tmp_jnlpool) || (tmp_jnlpool->pool_init && !gdid_matched))
+ { /* no jnlpool for instfilename or in use jnlpool not matching so get a new one */
+ tmp_jnlpool = malloc(SIZEOF(jnlpool_addrs));
+ memset((uchar_ptr_t)tmp_jnlpool, 0, SIZEOF(jnlpool_addrs));
+ tmp_jnlpool->relaxed = (GTMRELAXED == pool_user);
+ new_tmp_jnlpool = TRUE;
+ } else
+ new_tmp_jnlpool = FALSE;
+ /* tmp_jnlpool may be new, in use, not in use but different instance */
+ /* mupip_backup assumes jnlpool not NULL after jnlpool_init */
+ new_dummy_reg = FALSE;
+ if (!tmp_jnlpool->pool_init && (NULL != recvpool.recvpool_dummy_reg)
+ && !STRCMP(recvpool.recvpool_dummy_reg->dyn.addr->fname, instfilename))
+ { /* Have already attached to the receive pool and this jnlpool is for the same instance.
+ * Use the receive pool region for the journal pool as well as they
+ * both correspond to one and the same file (replication instance file). We need to do this to ensure that an
+ * "ftok_sem_get" done with either "jnlpool->jnlpool_dummy_reg" region or "recvpool.recvpool_dummy_reg" region
+ * locks the same entity.
+ */
+ assert(is_updproc || ((GTMRELAXED == pool_user) && is_updhelper));
+ reg = recvpool.recvpool_dummy_reg;
+ } else if (!tmp_jnlpool->pool_init)
+ { /* reuse uninitialized jnlpool */
r_save = gv_cur_region;
+ if ((NULL != tmp_jnlpool->jnlpool_dummy_reg) && (tmp_jnlpool->jnlpool_dummy_reg != recvpool.recvpool_dummy_reg))
+ { /* free jnlpool_dummy_reg if not in recvpool dummy reg */
+ gv_cur_region = tmp_jnlpool->jnlpool_dummy_reg;
+ mu_gv_cur_reg_free();
+ }
mu_gv_cur_reg_init();
- jnlpool.jnlpool_dummy_reg = reg = gv_cur_region;
+ reg = gv_cur_region;
gv_cur_region = r_save;
+ new_dummy_reg = TRUE;
ASSERT_IN_RANGE(MIN_RN_LEN, SIZEOF(JNLPOOL_DUMMY_REG_NAME) - 1, MAX_RN_LEN);
MEMCPY_LIT(reg->rname, JNLPOOL_DUMMY_REG_NAME);
reg->rname_len = STR_LIT_LEN(JNLPOOL_DUMMY_REG_NAME);
reg->rname[reg->rname_len] = 0;
} else
- { /* Have already attached to the receive pool. Use the receive pool region for the journal pool as well as they
- * both correspond to one and the same file (replication instance file). We need to do this to ensure that an
- * "ftok_sem_get" done with either "jnlpool.jnlpool_dummy_reg" region or "recvpool.recvpool_dummy_reg" region
- * locks the same entity.
- */
- assert(is_updproc || ((GTMRELAXED == pool_user) && is_updhelper));
- reg = jnlpool.jnlpool_dummy_reg = recvpool.recvpool_dummy_reg;
- }
+ reg = tmp_jnlpool->jnlpool_dummy_reg;
+ assert(NULL != reg);
+ tmp_jnlpool->jnlpool_dummy_reg = reg;
+ tmp_jnlpool->recv_pool = (tmp_jnlpool->jnlpool_dummy_reg == recvpool.recvpool_dummy_reg);
udi = FILE_INFO(reg);
csa = &udi->s_addrs;
seg = reg->dyn.addr;
assert(!udi->s_addrs.hold_onto_crit); /* so that we can do unconditional grab_locks and rel_locks */
- assertpro(repl_inst_get_name(instfilename, &full_len, MAX_FN_LEN + 1, issue_rts_error)); /* rts_error should have been
- * issued by repl_inst_get_name */
- assert((recvpool.recvpool_dummy_reg != jnlpool.jnlpool_dummy_reg)
- || (seg->fname_len == full_len) && !STRCMP(seg->fname, instfilename));
- if (recvpool.recvpool_dummy_reg != jnlpool.jnlpool_dummy_reg)
- { /* Fill in fields only if this is the first time this process is opening the replication instance file */
+ assert(NULL != repl_gld); /* rts_error should have been issued by repl_inst_get_name if error */
+ if (!tmp_jnlpool->pool_init)
+ {
+ if (IS_INST_FROM_GLD(repl_gld))
+ { /* instance file from global directory used */
+ if (NULL == tmp_jnlpool->gd_ptr)
+ {
+ tmp_jnlpool->gd_ptr = repl_gld;
+ tmp_jnlpool->gd_instinfo = repl_gld->instinfo;
+ } else
+ assert(repl_gld == tmp_jnlpool->gd_ptr);
+ } else if (NULL == tmp_jnlpool->gd_ptr)
+ { /* instance file from gtm_repl_instance environment variable */
+ tmp_jnlpool->gd_ptr = local_gdptr;
+ tmp_jnlpool->gd_instinfo = NULL;
+ }
+ }
+ if (0 == seg->fname_len)
+ { /* Fill in fields only if this is the first time this jnlpool is opening the replication instance file */
memcpy((char *)seg->fname, instfilename, full_len);
udi->fn = (char *)seg->fname;
seg->fname_len = full_len;
seg->fname[full_len] = '\0';
+ udi->fileid = instfilename_gdid;
}
/* First grab ftok semaphore for replication instance file. Once we have it locked, no one else can start up
* or shut down replication for this instance. We will release ftok semaphore when initialization is done.
*/
- if (!ftok_sem_get(jnlpool.jnlpool_dummy_reg, TRUE, REPLPOOL_ID, FALSE, &ftok_counter_halted))
+ jnlpool = tmp_jnlpool;
+ assert(NULL != jnlpool);
+ /* ftok_sem_get uses jnlpool for asserts */
+ if (!ftok_sem_get(tmp_jnlpool->jnlpool_dummy_reg, TRUE, REPLPOOL_ID, FALSE, &ftok_counter_halted))
+ {
+ save_errno = errno;
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
- RTS_ERROR_LITERAL("Error grabbing the ftok semaphore"), errno);
- save_errno = errno;
+ RTS_ERROR_LITERAL("Error grabbing the ftok semaphore"), save_errno);
+ }
repl_inst_read(udi->fn, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
/* At this point, we have not yet attached to the jnlpool so we do not know if the ftok counter got halted
* previously or not. So be safe and assume it has halted in case the jnlpool_shmid indicates it is up and running.
@@ -251,7 +341,8 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
{
if (0 == STRCMP(repl_instance.inst_info.this_instname, gtmsource_options.secondary_instname))
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_REPLINSTNMSAME, 2,
LEN_AND_STR((char *)repl_instance.inst_info.this_instname));
}
@@ -263,16 +354,26 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
/* Source server startup is the only command that can create the journal pool. Check that. */
if (!is_src_srvr || !gtmsource_options.start)
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
if (GTMRELAXED == pool_user)
- return;
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_NOJNLPOOL, 2, full_len, udi->fn);
+ {
+ if (NULL == jnlpool_head)
+ jnlpool_head = jnlpool;
+ return; /* jnlpool must be allocated by here */
+ }
+ assert(!STRCMP(udi->fn, instfilename));
+ assert(is_gdid_identical(&udi->fileid, &instfilename_gdid));
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_NOJNLPOOL, 2, full_len, instfilename);
}
if (repl_instance.crash)
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Instance file header has crash field set to TRUE");
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, udi->fn, ERR_TEXT, 2,
+ assert(!STRCMP(udi->fn, instfilename));
+ assert(is_gdid_identical(&udi->fileid, &instfilename_gdid));
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, instfilename, ERR_TEXT, 2,
LEN_AND_STR(scndry_msg));
}
DEBUG_ONLY(sem_created = TRUE);
@@ -280,9 +381,11 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
assert((int)NUM_SRC_SEMS == (int)NUM_RECV_SEMS);
if (INVALID_SEMID == (udi->semid = init_sem_set_source(IPC_PRIVATE, NUM_SRC_SEMS, RWDALL | IPC_CREAT)))
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ save_errno = errno;
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
- RTS_ERROR_LITERAL("Error creating journal pool semaphore"), errno);
+ RTS_ERROR_LITERAL("Error creating journal pool semaphore"), save_errno);
}
/* Following will set semaphore SOURCE_ID_SEM value as GTM_ID. In case we have orphaned semaphore
* for some reason, mupip rundown will be able to identify GTM semaphores checking the value and can remove.
@@ -292,7 +395,8 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
{
save_errno = errno;
remove_sem_set(SOURCE); /* Remove what we created */
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with jnlpool semctl SETVAL"), save_errno);
}
@@ -304,7 +408,8 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
{
save_errno = errno;
remove_sem_set(SOURCE); /* Remove what we created */
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with jnlpool semctl IPC_STAT"), save_errno);
}
@@ -315,17 +420,21 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
if (-1 == semctl(repl_instance.jnlpool_semid, DB_CONTROL_SEM, IPC_STAT, semarg))
{
save_errno = errno;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Error with semctl on Journal Pool SEMID (%d)",
repl_instance.jnlpool_semid);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLREQROLLBACK, 2, full_len, udi->fn,
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLREQROLLBACK, 2, full_len, instfilename,
ERR_TEXT, 2, LEN_AND_STR(scndry_msg), save_errno);
} else if (semarg.buf->sem_ctime != repl_instance.jnlpool_semid_ctime)
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Creation time for Journal Pool SEMID (%d) is %d; Expected %d",
repl_instance.jnlpool_semid, semarg.buf->sem_ctime, repl_instance.jnlpool_semid_ctime);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, udi->fn, ERR_TEXT, 2,
+ assert(!STRCMP(udi->fn, instfilename));
+ assert(is_gdid_identical(&udi->fileid, &instfilename_gdid));
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, instfilename, ERR_TEXT, 2,
LEN_AND_STR(scndry_msg));
}
udi->semid = repl_instance.jnlpool_semid;
@@ -339,9 +448,11 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
status = grab_sem(SOURCE, JNL_POOL_ACCESS_SEM);
if (SS_NORMAL != status)
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ save_errno = errno;
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
- RTS_ERROR_LITERAL("Error with journal pool access semaphore"), errno);
+ RTS_ERROR_LITERAL("Error with journal pool access semaphore"), save_errno);
}
udi->grabbed_access_sem = TRUE;
udi->counter_acc_incremented = TRUE;
@@ -370,9 +481,12 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
{ /* shared memory ID was removed form the system by an IPCRM command or we have a permission issue (or such) */
save_errno = errno;
REMOVE_OR_RELEASE_SEM(new_ipc);
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ assert(!STRCMP(udi->fn, instfilename));
+ assert(is_gdid_identical(&udi->fileid, &instfilename_gdid));
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Error with semctl on Journal Pool SHMID (%d)", repl_instance.jnlpool_shmid);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLREQROLLBACK, 2, full_len, udi->fn, ERR_TEXT, 2,
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLREQROLLBACK, 2, full_len, instfilename, ERR_TEXT, 2,
LEN_AND_STR(scndry_msg), save_errno);
} else if (shmstat.shm_ctime != repl_instance.jnlpool_shmid_ctime)
{ /* shared memory was possibly reused (causing shm_ctime and jnlpool_shmid_ctime to be different. We can't rely
@@ -388,10 +502,17 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
if (new_ipc && (!is_src_srvr || !gtmsource_options.start))
{
REMOVE_OR_RELEASE_SEM(new_ipc);
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
if (GTMRELAXED == pool_user)
+ {
+ if (NULL == jnlpool_head)
+ jnlpool_head = jnlpool;
return;
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_NOJNLPOOL, 2, full_len, udi->fn);
+ }
+ assert(!STRCMP(udi->fn, instfilename));
+ assert(is_gdid_identical(&udi->fileid, &instfilename_gdid));
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_NOJNLPOOL, 2, full_len, instfilename);
}
if (repl_instance.file_corrupt)
{ /* Indicates that a prior rollback was killed and so requires a re-run. It is also possible this process started
@@ -405,9 +526,12 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
if (repl_instance.file_corrupt)
{
REMOVE_OR_RELEASE_SEM(new_ipc);
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Instance file header has file_corrupt field set to TRUE");
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, udi->fn, ERR_TEXT, 2,
+ assert(!STRCMP(udi->fn, instfilename));
+ assert(is_gdid_identical(&udi->fileid, &instfilename_gdid));
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, instfilename, ERR_TEXT, 2,
LEN_AND_STR(scndry_msg));
}
}
@@ -418,15 +542,17 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
udi->shmid = INVALID_SHMID;
save_errno = errno;
remove_sem_set(SOURCE);
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with journal pool creation"), save_errno);
}
if (-1 == shmctl(udi->shmid, IPC_STAT, &shmstat))
{
save_errno = errno;
- DETACH_AND_REMOVE_SHM_AND_SEM; /* remove any sem/shm we had created */
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ DETACH_AND_REMOVE_SHM_AND_SEM(tmp_jnlpool); /* remove any sem/shm we had created */
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with jnlpool shmctl IPC_STAT"), save_errno);
}
@@ -437,17 +563,31 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
if (-1 == status_l)
{
save_errno = errno;
- DETACH_AND_REMOVE_SHM_AND_SEM; /* remove any sem/shm we had created */
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
- /* Assert below ensures we don't try to clean up journal pool even though we errored out while attaching to it */
- assert(NULL == jnlpool.jnlpool_ctl);
+ DETACH_AND_REMOVE_SHM_AND_SEM(tmp_jnlpool); /* remove any sem/shm we had created */
+ assert(NULL != tmp_jnlpool);
+ ftok_sem_release(tmp_jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ /* Assert below ensures we dont try to clean up the journal pool even though we errored out while attaching to it */
+ assert(NULL == tmp_jnlpool->jnlpool_ctl);
+ tmp_jnlpool_ctl = NULL;
+ RELEASE_NEW_TMP_JNLPOOL(new_tmp_jnlpool, tmp_jnlpool, new_dummy_reg, jnlpool, save_jnlpool, gv_cur_region);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with journal pool shmat"), save_errno);
}
- jnlpool.jnlpool_ctl = tmp_jnlpool_ctl;
+ /* if new jnlpool, add to jnlpool_head list */
+ if (new_tmp_jnlpool)
+ if (NULL != jnlpool_head)
+ {
+ for (last_jnlpool = jnlpool_head; last_jnlpool->next; last_jnlpool = last_jnlpool->next)
+ ;
+ if (tmp_jnlpool != last_jnlpool)
+ last_jnlpool->next = tmp_jnlpool;
+ } else
+ jnlpool_head = tmp_jnlpool;
+ jnlpool = tmp_jnlpool;
+ jnlpool->jnlpool_ctl = tmp_jnlpool_ctl;
/* Now that we have attached to the journal pool, fix udi->counter_ftok_incremented back to an accurate value */
udi->counter_ftok_incremented = !ftok_counter_halted;
- if (udi->counter_ftok_incremented && jnlpool.jnlpool_ctl->ftok_counter_halted)
+ if (udi->counter_ftok_incremented && jnlpool->jnlpool_ctl->ftok_counter_halted)
{ /* If shared counter has overflown previously, undo the counter bump we did.
* There is no specific reason but just in case a future caller invokes "jnlpool_init", followed by
* "jnlpool_detach" followed by "mu_rndwn_repl_instance". (See comment in "db_init" where similar
@@ -462,7 +602,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
* This flag will be reset by "gtmsource_seqno_init" when it is done with setting the jnl_seqno fields.
*/
if (new_ipc)
- jnlpool.jnlpool_ctl->pool_initialized = FALSE;
+ jnlpool->jnlpool_ctl->pool_initialized = FALSE;
assert(SIZEOF(jnlpool_ctl_struct) % 16 == 0); /* enforce 16-byte alignment for this structure */
/* Since seqno is an 8-byte quantity and is used in most of the sections below, we require all sections to
* be at least 8-byte aligned. In addition we expect that the beginning of the journal data (JNLDATA_BASE_OFF) is
@@ -490,8 +630,8 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
* journal pool.
*/
assert(MERRORS_ARRAY_SZ > merrors_ctl.msg_cnt);
- csa->critical = (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl + JNLPOOL_CTL_SIZE);
- assert(jnlpool.jnlpool_ctl == REPLCSA2JPL(csa)); /* secshr_db_clnup uses this relationship */
+ csa->critical = (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl + JNLPOOL_CTL_SIZE);
+ assert(jnlpool->jnlpool_ctl == REPLCSA2JPL(csa)); /* secshr_db_clnup uses this relationship */
jnlpool_mutex_spin_parms = (mutex_spin_parms_ptr_t)((sm_uc_ptr_t)csa->critical + JNLPOOL_CRIT_SPACE);
csa->nl = (node_local_ptr_t)((sm_uc_ptr_t)jnlpool_mutex_spin_parms + SIZEOF(mutex_spin_parms_struct));
# ifdef DEBUG
@@ -503,38 +643,39 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
}
# endif
csa->now_crit = FALSE;
- csa->onln_rlbk_cycle = jnlpool.jnlpool_ctl->onln_rlbk_cycle; /* Take a copy of the latest onln_rlbk_cycle */
- jnlpool.repl_inst_filehdr = (repl_inst_hdr_ptr_t)((sm_uc_ptr_t)csa->critical + JNLPOOL_CRIT_SIZE);
- jnlpool.gtmsrc_lcl_array = (gtmsrc_lcl_ptr_t)((sm_uc_ptr_t)jnlpool.repl_inst_filehdr + REPL_INST_HDR_SIZE);
- jnlpool.gtmsource_local_array = (gtmsource_local_ptr_t)((sm_uc_ptr_t)jnlpool.gtmsrc_lcl_array + GTMSRC_LCL_SIZE);
- jnldata_base = jnlpool.jnldata_base = (sm_uc_ptr_t)jnlpool.jnlpool_ctl + JNLDATA_BASE_OFF;
- jnlpool_ctl = jnlpool.jnlpool_ctl;
+ csa->onln_rlbk_cycle = jnlpool->jnlpool_ctl->onln_rlbk_cycle; /* Take a copy of the latest onln_rlbk_cycle */
+ jnlpool->repl_inst_filehdr = (repl_inst_hdr_ptr_t)((sm_uc_ptr_t)csa->critical + JNLPOOL_CRIT_SIZE);
+ jnlpool->gtmsrc_lcl_array = (gtmsrc_lcl_ptr_t)((sm_uc_ptr_t)jnlpool->repl_inst_filehdr + REPL_INST_HDR_SIZE);
+ jnlpool->gtmsource_local_array = (gtmsource_local_ptr_t)((sm_uc_ptr_t)jnlpool->gtmsrc_lcl_array + GTMSRC_LCL_SIZE);
+ jnlpool->jnldata_base = (sm_uc_ptr_t)jnlpool->jnlpool_ctl + JNLDATA_BASE_OFF;
assert(!mutex_per_process_init_pid || mutex_per_process_init_pid == process_id);
if (!mutex_per_process_init_pid)
mutex_per_process_init();
if (new_ipc)
{
- jnlpool_ctl->instfreeze_environ_inited = FALSE;
+ jnlpool->jnlpool_ctl->instfreeze_environ_inited = FALSE;
if (CUSTOM_ERRORS_AVAILABLE && !init_anticipatory_freeze_errors())
{
- DETACH_AND_REMOVE_SHM_AND_SEM; /* remove any sem/shm we had created */
+ DETACH_AND_REMOVE_SHM_AND_SEM(jnlpool); /* remove any sem/shm we had created */
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
LEN_AND_LIT("Error initializing custom errors"));
}
- jnlpool_ctl->critical_off = (sm_uc_ptr_t)csa->critical - (sm_uc_ptr_t)jnlpool_ctl;
- jnlpool_ctl->filehdr_off = (sm_uc_ptr_t)jnlpool.repl_inst_filehdr - (sm_uc_ptr_t)jnlpool_ctl;
- jnlpool_ctl->srclcl_array_off = (sm_uc_ptr_t)jnlpool.gtmsrc_lcl_array - (sm_uc_ptr_t)jnlpool_ctl;
- jnlpool_ctl->sourcelocal_array_off = (sm_uc_ptr_t)jnlpool.gtmsource_local_array - (sm_uc_ptr_t)jnlpool_ctl;
+ jnlpool->jnlpool_ctl->critical_off = (sm_uc_ptr_t)csa->critical - (sm_uc_ptr_t)jnlpool->jnlpool_ctl;
+ jnlpool->jnlpool_ctl->filehdr_off = (sm_uc_ptr_t)jnlpool->repl_inst_filehdr - (sm_uc_ptr_t)jnlpool->jnlpool_ctl;
+ jnlpool->jnlpool_ctl->srclcl_array_off = (sm_uc_ptr_t)jnlpool->gtmsrc_lcl_array
+ - (sm_uc_ptr_t)jnlpool->jnlpool_ctl;
+ jnlpool->jnlpool_ctl->sourcelocal_array_off = (sm_uc_ptr_t)jnlpool->gtmsource_local_array
+ - (sm_uc_ptr_t)jnlpool->jnlpool_ctl;
/* Need to initialize the different sections of journal pool. Start with the FILE HEADER section */
repl_instance.jnlpool_semid = udi->semid;
repl_instance.jnlpool_shmid = udi->shmid;
repl_instance.jnlpool_semid_ctime = udi->gt_sem_ctime;
repl_instance.jnlpool_shmid_ctime = udi->gt_shm_ctime;
- memcpy(jnlpool.repl_inst_filehdr, &repl_instance, REPL_INST_HDR_SIZE); /* Initialize FILE HEADER */
- jnlpool.repl_inst_filehdr->crash = TRUE;
+ memcpy(jnlpool->repl_inst_filehdr, &repl_instance, REPL_INST_HDR_SIZE); /* Initialize FILE HEADER */
+ jnlpool->repl_inst_filehdr->crash = TRUE;
/* Since we are creating the journal pool, initialize the mutex structures in the shared memory for later
* grab_locks to work correctly
*/
@@ -546,16 +687,16 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
jnlpool_mutex_spin_parms->mutex_spin_sleep_mask = MUTEX_SPIN_SLEEP_MASK;
jnlpool_mutex_spin_parms->mutex_que_entry_space_size = DEFAULT_NUM_CRIT_ENTRY;
assert(!skip_locks);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
/* Flush the file header to disk so future callers of "jnlpool_init" see the jnlpool_semid and jnlpool_shmid */
repl_inst_flush_filehdr();
/* Initialize GTMSRC_LCL section in journal pool */
- repl_inst_read(udi->fn, (off_t)REPL_INST_HDR_SIZE, (sm_uc_ptr_t)jnlpool.gtmsrc_lcl_array, GTMSRC_LCL_SIZE);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ repl_inst_read(udi->fn, (off_t)REPL_INST_HDR_SIZE, (sm_uc_ptr_t)jnlpool->gtmsrc_lcl_array, GTMSRC_LCL_SIZE);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
/* Initialize GTMSOURCE_LOCAL section in journal pool */
- memset(jnlpool.gtmsource_local_array, 0, GTMSOURCE_LOCAL_SIZE);
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
- gtmsrclcl_ptr = &jnlpool.gtmsrc_lcl_array[0];
+ memset(jnlpool->gtmsource_local_array, 0, GTMSOURCE_LOCAL_SIZE);
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
+ gtmsrclcl_ptr = &jnlpool->gtmsrc_lcl_array[0];
for (index = 0; index < NUM_GTMSRC_LCL; index++, gtmsrclcl_ptr++, gtmsourcelocal_ptr++)
{
COPY_GTMSRCLCL_TO_GTMSOURCELOCAL(gtmsrclcl_ptr, gtmsourcelocal_ptr);
@@ -566,17 +707,17 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
*/
SET_LATCH_GLOBAL(>msourcelocal_ptr->gtmsource_srv_latch, LOCK_AVAILABLE);
}
- } else if (!jnlpool.jnlpool_ctl->pool_initialized)
+ } else if (!jnlpool->jnlpool_ctl->pool_initialized)
{ /* Source server that created the journal pool died before completing initialization. */
if (udi->grabbed_access_sem)
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(10) ERR_REPLREQRUNDOWN, 4, DB_LEN_STR(reg), LEN_AND_STR(machine_name),
ERR_TEXT, 2, RTS_ERROR_TEXT("Journal pool is incompletely initialized. Run MUPIP RUNDOWN first."));
}
- if (ftok_counter_halted && !jnlpool.jnlpool_ctl->ftok_counter_halted)
+ if (ftok_counter_halted && !jnlpool->jnlpool_ctl->ftok_counter_halted)
repl_inst_ftok_counter_halted(udi);
slot_needs_init = FALSE;
/* Do not release ftok semaphore in the following cases as each of them involve the callers writing to the instance file
@@ -589,12 +730,12 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
* Invoke the function "gtmsource_rootprimary_init"
*/
hold_onto_ftok_sem = is_src_srvr && (gtmsource_options.start || gtmsource_options.shut_down);
- /* Determine "gtmsourcelocal_ptr" to later initialize jnlpool.gtmsource_local */
+ /* Determine "gtmsourcelocal_ptr" to later initialize jnlpool->gtmsource_local */
if (!is_src_srvr || !gtmsource_options.instsecondary)
{ /* GT.M or Update process or receiver server or a source server command that did not specify INSTSECONDARY */
gtmsourcelocal_ptr = NULL;
} else
- { /* In jnlpool.gtmsource_local_array, find the structure which corresponds to the input secondary instance name.
+ { /* In jnlpool->gtmsource_local_array, find the structure which corresponds to the input secondary instance name.
* Each gtmsource_local structure in the array is termed a slot. A slot is used if the "secondary_instname"
* (the secondary instance name) member has a non-zero value. A slot is unused otherwise. Below is a tabulation
* of the possible cases and actions for each of the source server commands.
@@ -630,7 +771,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
* Slot Initialization : Set "read_jnl_seqno" to 1.
*/
reuse_slot_ptr = NULL;
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for ( index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++)
{
if ((NULL == reuse_slot_ptr) && ('\0' == gtmsourcelocal_ptr->secondary_instname[0]))
@@ -648,7 +789,8 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg,
+ udi->counter_ftok_incremented, TRUE);
/* Assert we did not create shm or sem so no need to remove any */
assert(!new_ipc);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_SRCSRVEXISTS, 3,
@@ -676,7 +818,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
/* Assert we did not create shm or sem so no need to remove any */
assert(!new_ipc);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SRCSRVNOTEXIST, 2,
@@ -701,7 +843,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
/* Assert we did not create shm or sem so no need to remove any */
assert(!new_ipc);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPLINSTSECNONE, 4,
@@ -709,7 +851,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
} else
{ /* Find a used slot that can be reused. Find one with least value of "connect_jnl_seqno". */
reuse_slot_seqnum = MAX_SEQNO;
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
for (index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++)
{
gtmsource_state = gtmsourcelocal_ptr->gtmsource_state;
@@ -729,7 +871,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
/* Assert we did not create shm or sem so no need to remove any */
assert(!new_ipc);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_SRCSRVTOOMANY, 3, NUM_GTMSRC_LCL,
@@ -765,7 +907,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
/* Assert we did not create shm or sem so no need to remove any */
assert(!new_ipc);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_REPLINSTSECNONE, 4,
@@ -779,20 +921,20 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
|| (ROOTPRIMARY_SPECIFIED == gtmsource_options.rootprimary));
if (!new_ipc)
{ /* We did not create shm or sem so no need to remove any of them for any "rts_error" within this IF */
- assert(!STRCMP(repl_instance.inst_info.this_instname, jnlpool.repl_inst_filehdr->inst_info.this_instname));
+ assert(!STRCMP(repl_instance.inst_info.this_instname, jnlpool->repl_inst_filehdr->inst_info.this_instname));
/* Source Server restart - attempt to install custom errors if not installed before */
- if (gtmsource_startup && (!jnlpool_ctl->instfreeze_environ_inited) && CUSTOM_ERRORS_AVAILABLE
+ if (gtmsource_startup && (!jnlpool->jnlpool_ctl->instfreeze_environ_inited) && CUSTOM_ERRORS_AVAILABLE
&& !init_anticipatory_freeze_errors())
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
LEN_AND_LIT("Error initializing custom errors"));
}
/* Check compatibility of caller source server or receiver server command with the current state of journal pool */
- if (!jnlpool.jnlpool_ctl->upd_disabled)
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{
if (((is_src_srvr && (PROPAGATEPRIMARY_SPECIFIED == gtmsource_options.rootprimary))
- || ((GTMRECEIVE == pool_user) && !jnlpool.repl_inst_filehdr->is_supplementary)))
+ || ((GTMRECEIVE == pool_user) && !jnlpool->repl_inst_filehdr->is_supplementary)))
{ /* Journal pool was created as -ROOTPRIMARY (or -UPDOK) and a source server command has
* specified -PROPAGATEPRIMARY (or -UPDNOTOK) or a receiver server command is being attempted
* on a non-supplementary instance. Issue error.
@@ -801,7 +943,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_PRIMARYISROOT, 2,
LEN_AND_STR((char *)repl_instance.inst_info.this_instname));
}
@@ -817,7 +959,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_PRIMARYNOTROOT, 2,
LEN_AND_STR((char *)repl_instance.inst_info.this_instname));
} else
@@ -851,7 +993,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_ACTIVATEFAIL, 2,
LEN_AND_STR(gtmsource_options.secondary_instname));
} else
@@ -871,7 +1013,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Receiver startup counter semaphore increment failure"), save_errno);
}
@@ -890,83 +1032,83 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_JNLPOOLSETUP, 0,
ERR_TEXT, 2, RTS_ERROR_LITERAL("Journal pool has not been initialized"));
}
/* Initialize the shared memory fields. */
/* Start_jnl_seqno (and jnl_seqno, read_jnl_seqno) need region shared mem to be properly setup. For now set to 0. */
- jnlpool_ctl->start_jnl_seqno = 0;
- jnlpool_ctl->jnl_seqno = 0;
- jnlpool_ctl->max_zqgblmod_seqno = 0;
- jnlpool_ctl->jnldata_base_off = JNLDATA_BASE_OFF;
- jnlpool_ctl->jnlpool_size = gtmsource_options.buffsize - jnlpool_ctl->jnldata_base_off;
- assert((jnlpool_ctl->jnlpool_size & ~JNL_WRT_END_MASK) == 0);
- jnlpool_ctl->lastwrite_len = 0;
- jnlpool_ctl->write_addr = 0;
- jnlpool_ctl->rsrv_write_addr = 0;
- if (0 < jnlpool.repl_inst_filehdr->num_histinfo)
+ jnlpool->jnlpool_ctl->start_jnl_seqno = 0;
+ jnlpool->jnlpool_ctl->jnl_seqno = 0;
+ jnlpool->jnlpool_ctl->max_zqgblmod_seqno = 0;
+ jnlpool->jnlpool_ctl->jnldata_base_off = JNLDATA_BASE_OFF;
+ jnlpool->jnlpool_ctl->jnlpool_size = gtmsource_options.buffsize - jnlpool->jnlpool_ctl->jnldata_base_off;
+ assert((jnlpool->jnlpool_ctl->jnlpool_size & ~JNL_WRT_END_MASK) == 0);
+ jnlpool->jnlpool_ctl->lastwrite_len = 0;
+ jnlpool->jnlpool_ctl->write_addr = 0;
+ jnlpool->jnlpool_ctl->rsrv_write_addr = 0;
+ if (0 < jnlpool->repl_inst_filehdr->num_histinfo)
{
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- status = repl_inst_histinfo_get(jnlpool.repl_inst_filehdr->num_histinfo - 1, &last_histinfo);
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ status = repl_inst_histinfo_get(jnlpool->repl_inst_filehdr->num_histinfo - 1, &last_histinfo);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
assert(0 == status);
if (0 != status)
{
assert(ERR_REPLINSTNOHIST == status); /* the only error returned by repl_inst_histinfo_get() */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
repl_inst_flush_jnlpool(TRUE, TRUE); /* to reset "crash" field in instance file header to FALSE */
- rel_lock(jnlpool.jnlpool_dummy_reg);
- DETACH_AND_REMOVE_SHM_AND_SEM; /* remove any sem/shm we had created */
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ DETACH_AND_REMOVE_SHM_AND_SEM(jnlpool); /* remove any sem/shm we had created */
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
LEN_AND_LIT("Error reading last history record in replication instance file"));
}
- instfilehdr_seqno = jnlpool.repl_inst_filehdr->jnl_seqno;
+ instfilehdr_seqno = jnlpool->repl_inst_filehdr->jnl_seqno;
assert(last_histinfo.start_seqno);
assert(instfilehdr_seqno);
if (instfilehdr_seqno < last_histinfo.start_seqno)
{ /* The jnl seqno in the instance file header is not greater than the last histinfo's start seqno */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
repl_inst_flush_jnlpool(TRUE, TRUE); /* to reset "crash" field in instance file header to FALSE */
- rel_lock(jnlpool.jnlpool_dummy_reg);
- DETACH_AND_REMOVE_SHM_AND_SEM; /* remove any sem/shm we had created */
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ DETACH_AND_REMOVE_SHM_AND_SEM(jnlpool); /* remove any sem/shm we had created */
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLINSTSEQORD, 6, LEN_AND_LIT("Instance file header"),
&instfilehdr_seqno, &last_histinfo.start_seqno, LEN_AND_STR(udi->fn));
}
- jnlpool_ctl->last_histinfo_seqno = last_histinfo.start_seqno;
+ jnlpool->jnlpool_ctl->last_histinfo_seqno = last_histinfo.start_seqno;
} else
- jnlpool_ctl->last_histinfo_seqno = 0;
+ jnlpool->jnlpool_ctl->last_histinfo_seqno = 0;
assert(ROOTPRIMARY_UNSPECIFIED != gtmsource_options.rootprimary);
- jnlpool_ctl->upd_disabled = TRUE; /* truly initialized later by a call to "gtmsource_rootprimary_init" */
- jnlpool_ctl->primary_instname[0] = '\0';
- jnlpool_ctl->send_losttn_complete = FALSE;
- memcpy(jnlpool_ctl->jnlpool_id.instfilename, seg->fname, seg->fname_len);
- jnlpool_ctl->jnlpool_id.instfilename[seg->fname_len] = '\0';
- memcpy(jnlpool_ctl->jnlpool_id.label, GDS_RPL_LABEL, GDS_LABEL_SZ);
- memcpy(jnlpool_ctl->jnlpool_id.now_running, gtm_release_name, gtm_release_name_len + 1);
+ jnlpool->jnlpool_ctl->upd_disabled = TRUE; /* truly initialized later by a call to "gtmsource_rootprimary_init" */
+ jnlpool->jnlpool_ctl->primary_instname[0] = '\0';
+ jnlpool->jnlpool_ctl->send_losttn_complete = FALSE;
+ memcpy(jnlpool->jnlpool_ctl->jnlpool_id.instfilename, seg->fname, seg->fname_len);
+ jnlpool->jnlpool_ctl->jnlpool_id.instfilename[seg->fname_len] = '\0';
+ memcpy(jnlpool->jnlpool_ctl->jnlpool_id.label, GDS_RPL_LABEL, GDS_LABEL_SZ);
+ memcpy(jnlpool->jnlpool_ctl->jnlpool_id.now_running, gtm_release_name, gtm_release_name_len + 1);
assert(0 == (offsetof(jnlpool_ctl_struct, start_jnl_seqno) % 8));
/* ensure that start_jnl_seqno starts at an 8 byte boundary */
assert(0 == offsetof(jnlpool_ctl_struct, jnlpool_id));
/* ensure that the pool identifier is at the top of the pool */
- jnlpool_ctl->jnlpool_id.pool_type = JNLPOOL_SEGMENT;
- SET_LATCH_GLOBAL(&jnlpool_ctl->phase2_commit_latch, LOCK_AVAILABLE);
- jnlpool_ctl->phase2_commit_index1 = jnlpool_ctl->phase2_commit_index2 = 0;
+ jnlpool->jnlpool_ctl->jnlpool_id.pool_type = JNLPOOL_SEGMENT;
+ SET_LATCH_GLOBAL(&jnlpool->jnlpool_ctl->phase2_commit_latch, LOCK_AVAILABLE);
+ jnlpool->jnlpool_ctl->phase2_commit_index1 = jnlpool->jnlpool_ctl->phase2_commit_index2 = 0;
/* The below value of "tot_jrec_len == 0" is relied upon by "mutex_salvage" of jnlpool in case the
* jnlpool is created, a process goes to t_end and gets killed and salvage happens right afterwards.
* The salvage logic needs to set jnlpool_ctl->lastwrite_len correctly and for that it needs to
* go one previous entry in the phase2_commit_array. "shmget()" guarantees this by initializing
* all of shm to 0 at startup.
*/
- assert(0 == jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].process_id);
- assert(0 == jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].start_write_addr);
- assert(0 == jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].tot_jrec_len);
- assert(0 == jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].jnl_seqno);
+ assert(0 == jnlpool->jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].process_id);
+ assert(0 == jnlpool->jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].start_write_addr);
+ assert(0 == jnlpool->jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].tot_jrec_len);
+ assert(0 == jnlpool->jnlpool_ctl->phase2_commit_array[JPL_PHASE2_COMMIT_ARRAY_SIZE - 1].jnl_seqno);
csa->nl->glob_sec_init = TRUE;
assert(NULL != jnlpool_creator);
*jnlpool_creator = TRUE;
@@ -976,7 +1118,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
* In case of an update process and a root primary supplementary instance, "strm_index"
* will be initialized to a non-zero value later in updproc.c.
*/
- if (jnlpool.repl_inst_filehdr->is_supplementary)
+ if (jnlpool->repl_inst_filehdr->is_supplementary)
{ /* The value of 0 is possible in rare cases, if a process does jnlpool_init more than once
* (possible if the first jnlpool_init failed say due to a REPLINSTUNDEF error). In that
* case, we are anyways going to set it to the exact same value so allow that in the assert.
@@ -985,9 +1127,9 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
strm_index = 0;
}
assert(!(is_src_srvr && gtmsource_options.start) || slot_needs_init);
- jnlpool.gtmsource_local = gtmsourcelocal_ptr;
+ jnlpool->gtmsource_local = gtmsourcelocal_ptr;
assert((NULL == gtmsourcelocal_ptr)
- || (gtmsourcelocal_ptr->gtmsrc_lcl_array_index == (gtmsourcelocal_ptr - jnlpool.gtmsource_local_array)));
+ || (gtmsourcelocal_ptr->gtmsrc_lcl_array_index == (gtmsourcelocal_ptr - jnlpool->gtmsource_local_array)));
reg->open = TRUE; /* this is used by t_commit_cleanup/tp_restart/mutex_deadlock_check */
reg->read_only = FALSE; /* maintain csa->read_write simultaneously */
csa->read_write = TRUE; /* maintain reg->read_only simultaneously */
@@ -1053,19 +1195,19 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
gtmsourcelocal_ptr->connect_jnl_seqno = 0; /* fully initialized when source server connects to receiver */
gtmsourcelocal_ptr->send_losttn_complete = FALSE;
/* Now make the corresponding changes from gtmsource_local to the gtmsrc_lcl structure and flush to disk.
- * This assumes "jnlpool.gtmsource_local" is set appropriately.
+ * This assumes "jnlpool->gtmsource_local" is set appropriately.
*/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
repl_inst_flush_gtmsrc_lcl();
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
}
/* Assert that gtmsource_local is set to non-NULL value for all those qualifiers that care about it */
assert(!(gtmsource_options.start || gtmsource_options.activate || gtmsource_options.deactivate
|| gtmsource_options.stopsourcefilter || gtmsource_options.changelog || gtmsource_options.statslog)
- || (NULL != jnlpool.gtmsource_local));
- assert((NULL == jnlpool.gtmsource_local)
- || !STRCMP(jnlpool.gtmsource_local->secondary_instname, gtmsource_options.secondary_instname));
+ || (NULL != jnlpool->gtmsource_local));
+ assert((NULL == jnlpool->gtmsource_local)
+ || !STRCMP(jnlpool->gtmsource_local->secondary_instname, gtmsource_options.secondary_instname));
/* Release control lockout now that this process has attached to the journal pool except if caller is source server.
* Source Server will release the control lockout only after it is done with
* a) initializing other fields in the pool (in case of source server startup) or
@@ -1077,7 +1219,7 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
{
if (0 != (save_errno = rel_sem(SOURCE, JNL_POOL_ACCESS_SEM)))
{
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
/* Assert we did not create shm or sem so no need to remove any */
assert(!new_ipc);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0, ERR_TEXT, 2,
@@ -1088,16 +1230,22 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
}
} else
{
- this_side = &jnlpool_ctl->this_side;
+ this_side = &jnlpool->jnlpool_ctl->this_side;
remote_side = >msourcelocal_ptr->remote_side; /* Set global variable now. Structure will be initialized
* later when source server connects to receiver */
}
- if (!hold_onto_ftok_sem && !ftok_sem_release(jnlpool.jnlpool_dummy_reg, FALSE, FALSE))
+ if (!hold_onto_ftok_sem && !ftok_sem_release(jnlpool->jnlpool_dummy_reg, FALSE, FALSE))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_JNLPOOLSETUP);
/* Set up pool_init if jnlpool is still attached (e.g. we could have detached if GTMRELAXED and upd_disabled) */
- if (NULL != jnlpool.jnlpool_ctl)
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{
- pool_init = TRUE;
+ if (('\0' == repl_inst_name[0]) && ('\0' != repl_instfilename[0]))
+ { /* fill in instance name if right instance file name and first */
+ if (0 == STRCMP(repl_instfilename, instfilename))
+ memcpy(repl_inst_name, repl_instance.inst_info.this_instname, MAX_INSTNAME_LEN);
+ }
+ jnlpool->pool_init = TRUE;
+ pool_init++;
ENABLE_FREEZE_ON_ERROR;
}
return;
@@ -1105,14 +1253,14 @@ void jnlpool_init(jnlpool_user pool_user, boolean_t gtmsource_startup, boolean_t
void jnlpool_detach(void)
{
- if (TRUE == pool_init)
+ if (pool_init && jnlpool && jnlpool->pool_init)
{
- rel_lock(jnlpool.jnlpool_dummy_reg);
- mutex_cleanup(jnlpool.jnlpool_dummy_reg);
- if (jnlpool.gtmsource_local && (process_id == jnlpool.gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid))
- rel_gtmsource_srv_latch(&jnlpool.gtmsource_local->gtmsource_srv_latch);
- DETACH_FROM_JNLPOOL_IF_NEEDED(rts_error_csa);
- assert(!pool_init); /* would have been reset by the above macro invocation */
+ assert(NULL != jnlpool);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ mutex_cleanup(jnlpool->jnlpool_dummy_reg);
+ if (jnlpool->gtmsource_local && (process_id == jnlpool->gtmsource_local->gtmsource_srv_latch.u.parts.latch_pid))
+ rel_gtmsource_srv_latch(&jnlpool->gtmsource_local->gtmsource_srv_latch);
+ DETACH_FROM_JNLPOOL_IF_NEEDED(jnlpool, rts_error_csa);
}
}
diff --git a/sr_unix/kitstart.csh b/sr_unix/kitstart.csh
index 7391019..1391e9b 100755
--- a/sr_unix/kitstart.csh
+++ b/sr_unix/kitstart.csh
@@ -1,7 +1,7 @@
#!/usr/local/bin/tcsh
#################################################################
# #
-# Copyright (c) 2011-2017 Fidelity National Information #
+# Copyright (c) 2011-2018 Fidelity National Information #
# Services, Inc. and/or its subsidiaries. All rights reserved. #
# #
# This source code contains the intellectual property #
@@ -380,6 +380,7 @@ if (-f $gtm_tools/gtmpcat.m) then
$package $dist_file gtmpcat.m $fldbld install_gtmpcat.sh gtmpcat.sh || exit 10
chown ${prev_user}:${prev_group} gtmpcat.m $fldbld
chmod ${prev_perm} gtmpcat.m $fldbld
+ rm -f gtmpcat.sh install_gtmpcat.sh
echo ""
echo "Gzipping $dist_file"
gzip $dist_file || exit 11
diff --git a/sr_unix/mu_cre_file.c b/sr_unix/mu_cre_file.c
index 7e32bc5..705c602 100644
--- a/sr_unix/mu_cre_file.c
+++ b/sr_unix/mu_cre_file.c
@@ -114,7 +114,7 @@ MBSTART { \
} MBEND
GBLREF gd_region *gv_cur_region;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF uint4 gtmDebugLevel;
@@ -264,6 +264,7 @@ unsigned char mu_cre_file(void)
return EXIT_ERR;
}
seg = gv_cur_region->dyn.addr;
+ seg->read_only = FALSE;
if (seg->asyncio)
{ /* AIO = ON, implies we need to use O_DIRECT. Check for db vs fs blksize alignment issues. */
fsb_size = get_fs_block_size(mu_cre_file_fd);
@@ -294,7 +295,7 @@ unsigned char mu_cre_file(void)
* to do the warning transformation in this case. The only exception to this is a statsdb
* which is anyways not journaled so need not worry about INST_FREEZE_ON_ERROR_ENABLED.
*/
- assert((NULL == jnlpool.jnlpool_ctl) || IS_AUTODB_REG(gv_cur_region));
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl)) || IS_AUTODB_REG(gv_cur_region));
if (avail_blocks < blocks_for_create)
{
PUTMSG_ERROR_CSA(cs_addrs, 6, ERR_NOSPACECRE, 4, LEN_AND_STR(path), &blocks_for_create, &avail_blocks);
diff --git a/sr_unix/mu_extract.c b/sr_unix/mu_extract.c
index fe7200a..d491925 100755
--- a/sr_unix/mu_extract.c
+++ b/sr_unix/mu_extract.c
@@ -64,6 +64,7 @@
#include "gtmcrypt.h"
#include "is_proc_alive.h"
#include "gtm_reservedDB.h"
+#include "min_max.h"
GBLREF int (*op_open_ptr)(mval *v, mval *p, mval *t, mval *mspace);
GBLREF bool mu_ctrlc_occurred;
@@ -290,9 +291,9 @@ void mu_extract(void)
}
int_nlen = n_len;
lower_to_upper((uchar_ptr_t)format_buffer, (uchar_ptr_t)format_buffer, int_nlen);
- if (0 == memcmp(format_buffer, ZWR_FORMAT_STRING, n_len))
+ if (0 == STRNCMP_LIT_LEN(format_buffer, ZWR_FORMAT_STRING, n_len))
format = MU_FMT_ZWR;
- else if (0 == memcmp(format_buffer, GO_FORMAT_STRING, n_len))
+ else if (0 == STRNCMP_LIT_LEN(format_buffer, GO_FORMAT_STRING, n_len))
{
if (gtm_utf8_mode)
{
@@ -300,7 +301,7 @@ void mu_extract(void)
mupip_exit(ERR_MUPCLIERR);
}
format = MU_FMT_GO;
- } else if (0 == memcmp(format_buffer, BINARY_FORMAT_STRING, n_len))
+ } else if (0 == STRNCMP_LIT_LEN(format_buffer, BINARY_FORMAT_STRING, n_len))
{
format = MU_FMT_BINARY;
is_binary_format = TRUE;
diff --git a/sr_unix/mu_op_open.c b/sr_unix/mu_op_open.c
index 112524d..8d78e3a 100755
--- a/sr_unix/mu_op_open.c
+++ b/sr_unix/mu_op_open.c
@@ -72,8 +72,6 @@ int mu_op_open(mval *v, mval *p, mval *t, mval *mspace)
MV_FORCE_STR(p);
if (mspace)
MV_FORCE_STR(mspace);
- if (0 > t)
- t = 0;
assert((unsigned char)*p->str.addr < n_iops);
naml = get_log_name(&v->str, INSERT);
if (0 != naml->iod)
diff --git a/sr_unix/mu_replpool_grab_sem.c b/sr_unix/mu_replpool_grab_sem.c
old mode 100755
new mode 100644
index 751a35d..18ead8a
--- a/sr_unix/mu_replpool_grab_sem.c
+++ b/sr_unix/mu_replpool_grab_sem.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -89,7 +89,7 @@
} \
}
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF recvpool_addrs recvpool;
GBLREF gd_region *gv_cur_region;
GBLREF jnl_gbls_t jgbl;
@@ -129,9 +129,14 @@ int mu_replpool_grab_sem(repl_inst_hdr_ptr_t repl_inst_filehdr, char pool_type,
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
force_increment = (jgbl.onlnrlbk || (!jgbl.mur_rollback && !argumentless_rundown && INST_FREEZE_ON_ERROR_POLICY));
/* First ensure that the caller has grabbed the ftok semaphore on the replication instance file */
- assert((NULL != jnlpool.jnlpool_dummy_reg) && (jnlpool.jnlpool_dummy_reg == recvpool.recvpool_dummy_reg));
- replreg = jnlpool.jnlpool_dummy_reg;
- DEBUG_ONLY(udi = FILE_INFO(jnlpool.jnlpool_dummy_reg));
+ assert(!jnlpool || ((NULL != jnlpool->jnlpool_dummy_reg)
+ && (jnlpool->jnlpool_dummy_reg == recvpool.recvpool_dummy_reg)));
+ if (jnlpool && (NULL != jnlpool->jnlpool_dummy_reg))
+ replreg = jnlpool->jnlpool_dummy_reg;
+ else
+ replreg = recvpool.recvpool_dummy_reg;
+ assert(NULL != replreg);
+ DEBUG_ONLY(udi = FILE_INFO(replreg));
assert(udi->grabbed_ftok_sem); /* the caller should have grabbed ftok semaphore */
instfilename = (char *)replreg->dyn.addr->fname;
instfilelen = replreg->dyn.addr->fname_len;
diff --git a/sr_unix/mu_replpool_release_sem.c b/sr_unix/mu_replpool_release_sem.c
index 1ccdda6..785caf6 100644
--- a/sr_unix/mu_replpool_release_sem.c
+++ b/sr_unix/mu_replpool_release_sem.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2012-2015 Fidelity National Information *
+ * Copyright (c) 2012-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -53,7 +53,7 @@
return -1; \
}
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF recvpool_addrs recvpool;
GBLREF gd_region *gv_cur_region;
GBLREF jnl_gbls_t jgbl;
@@ -75,9 +75,13 @@ int mu_replpool_release_sem(repl_inst_hdr_ptr_t repl_inst_filehdr, char pool_typ
SETUP_THREADGBL_ACCESS;
# endif
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
- assert((NULL != jnlpool.jnlpool_dummy_reg) && (jnlpool.jnlpool_dummy_reg == recvpool.recvpool_dummy_reg));
- replreg = jnlpool.jnlpool_dummy_reg;
- DEBUG_ONLY(udi = FILE_INFO(jnlpool.jnlpool_dummy_reg));
+ assert(!jnlpool || (NULL != jnlpool->jnlpool_dummy_reg) && (jnlpool->jnlpool_dummy_reg == recvpool.recvpool_dummy_reg));
+ if (jnlpool && (NULL != jnlpool->jnlpool_dummy_reg))
+ replreg = jnlpool->jnlpool_dummy_reg;
+ else
+ replreg = recvpool.recvpool_dummy_reg;
+ assert(NULL != replreg);
+ DEBUG_ONLY(udi = FILE_INFO(replreg));
assert(udi->grabbed_ftok_sem || jgbl.mur_rollback); /* Rollback already holds standalone access so no need for ftok lock */
instfilename = (char *)replreg->dyn.addr->fname;
instfilelen = replreg->dyn.addr->fname_len;
diff --git a/sr_unix/mu_rndwn_file.c b/sr_unix/mu_rndwn_file.c
index 5bcfa0b..e98c28a 100755
--- a/sr_unix/mu_rndwn_file.c
+++ b/sr_unix/mu_rndwn_file.c
@@ -459,6 +459,7 @@ boolean_t mu_rndwn_file(gd_region *reg, boolean_t standalone)
MU_RNDWN_FILE_CLNUP(reg, udi, tsd, sem_created, udi->counter_acc_incremented);
return FALSE;
}
+ seg->read_only = tsd->read_only;
SYNC_RESERVEDDBFLAGS_REG_CSA_CSD(reg, csa, tsd, ((node_local_ptr_t)NULL));
if (!IS_AIO_DBGLDMISMATCH(seg, tsd))
break;
@@ -562,12 +563,6 @@ boolean_t mu_rndwn_file(gd_region *reg, boolean_t standalone)
return FALSE;
}
override_present = (cli_present("OVERRIDE") == CLI_PRESENT);
- if (FROZEN_CHILLED(tsd) && !standalone && !override_present)
- {
- gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_OFRZACTIVE, 2, DB_LEN_STR(reg));
- MU_RNDWN_FILE_CLNUP(reg, udi, tsd, sem_created, udi->counter_acc_incremented);
- return FALSE;
- }
csa->hdr = tsd;
csa->region = gv_cur_region;
/* At this point, we have not yet attached to the database shared memory so we do not know if the ftok counter got halted
@@ -822,7 +817,7 @@ boolean_t mu_rndwn_file(gd_region *reg, boolean_t standalone)
db_ipcs.shmid = tsd->shmid;
db_ipcs.gt_shm_ctime = tsd->gt_shm_ctime.ctime;
if (!get_full_path((char *)DB_STR_LEN(reg), db_ipcs.fn, &db_ipcs.fn_len,
- MAX_TRANS_NAME_LEN, &status_msg))
+ GTM_PATH_MAX, &status_msg))
{
gtm_putmsg_csa(CSA_ARG(csa) VARLSTCNT(1) status_msg);
RNDWN_ERR("!AD -> get_full_path failed.", reg);
@@ -884,7 +879,10 @@ boolean_t mu_rndwn_file(gd_region *reg, boolean_t standalone)
}
assert(!standalone);
ALIGN_BUFF_IF_NEEDED_FOR_DIO(udi, buff, tsd, tsd_size); /* sets "buff" */
- DB_LSEEKWRITE(csa, udi, udi->fn, udi->fd, (off_t)0, buff, tsd_size, status);
+ if (!tsd->read_only)
+ DB_LSEEKWRITE(csa, udi, udi->fn, udi->fd, (off_t)0, buff, tsd_size, status);
+ else
+ status = 0;
if (0 != status)
{
RNDWN_ERR("!AD -> Unable to write header to disk.", reg);
@@ -1220,6 +1218,21 @@ boolean_t mu_rndwn_file(gd_region *reg, boolean_t standalone)
MU_RNDWN_FILE_CLNUP(reg, udi, tsd, sem_created, udi->counter_acc_incremented);
return FALSE;
}
+ if (FROZEN_CHILLED(csa) && !override_present)
+ { /* If there is an online freeze, we can't do the file writes, so autorelease or give up. */
+ DO_CHILLED_AUTORELEASE(csa, csd);
+ if (FROZEN_CHILLED(csa))
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_OFRZACTIVE, 2, DB_LEN_STR(reg));
+ MU_RNDWN_FILE_CLNUP(reg, udi, tsd, sem_created, udi->counter_acc_incremented);
+ return FALSE;
+ }
+ }
+ /* If there was an online freeze and it was autoreleased, we don't want to take down the shared memory
+ * and lose the freeze_online state.
+ */
+ if (CHILLED_AUTORELEASE(csa) && !override_present)
+ remove_shmid = FALSE;
db_common_init(reg, csa, csd); /* do initialization common to "db_init" and "mu_rndwn_file" */
do_crypt_init = USES_ENCRYPTION(csd->is_encrypted);
crypt_warning = FALSE;
diff --git a/sr_unix/mu_rndwn_repl_instance.c b/sr_unix/mu_rndwn_repl_instance.c
old mode 100755
new mode 100644
index 82cad81..cd59916
--- a/sr_unix/mu_rndwn_repl_instance.c
+++ b/sr_unix/mu_rndwn_repl_instance.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -59,8 +59,7 @@
#include "mutex.h"
#include "do_semop.h"
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF recvpool_addrs recvpool;
GBLREF gd_region *gv_cur_region;
GBLREF gd_region *ftok_sem_reg;
@@ -137,7 +136,8 @@ boolean_t mu_rndwn_repl_instance(replpool_identifier *replpool_id, boolean_t imm
assert(56 == OFFSETOF(replpool_identifier, instfilename[0]));
assert(256 == SIZEOF(((replpool_identifier *)NULL)->instfilename));
/* End asserts */
- jnlpool.jnlpool_dummy_reg = reg;
+ if (NULL != jnlpool)
+ jnlpool->jnlpool_dummy_reg = reg;
recvpool.recvpool_dummy_reg = reg;
instfilename = replpool_id->instfilename;
reg->dyn.addr->fname_len = strlen(instfilename);
@@ -179,7 +179,7 @@ boolean_t mu_rndwn_repl_instance(replpool_identifier *replpool_id, boolean_t imm
repl_instance.jnlpool_shmid = shm_id = INVALID_SHMID;
repl_instance.jnlpool_shmid_ctime = 0;
}
- assert((INVALID_SHMID != shm_id) || ((NULL == jnlpool.jnlpool_ctl) && (NULL == jnlpool_ctl)));
+ assert((INVALID_SHMID != shm_id) || ((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl)));
ipc_rmvd = TRUE;
if (INVALID_SHMID != shm_id)
{
@@ -192,8 +192,8 @@ boolean_t mu_rndwn_repl_instance(replpool_identifier *replpool_id, boolean_t imm
(jnlpool_stat ? ERR_MUJPOOLRNDWNFL : ERR_MUJPOOLRNDWNSUC),
4, LEN_AND_STR(ipcs_buff), LEN_AND_STR(instfilename));
}
- assert(ipc_rmvd || (NULL != jnlpool_ctl) || !mur_options.rollback);
- assert((NULL == jnlpool.jnlpool_ctl) || (SS_NORMAL == jnlpool_stat) || jgbl.onlnrlbk);
+ assert(ipc_rmvd || (jnlpool && (NULL != jnlpool->jnlpool_ctl)) || !mur_options.rollback);
+ assert((!jnlpool || (NULL == jnlpool->jnlpool_ctl)) || (SS_NORMAL == jnlpool_stat) || jgbl.onlnrlbk);
assert((INVALID_SHMID != repl_instance.jnlpool_shmid) || (0 == repl_instance.jnlpool_shmid_ctime));
assert((INVALID_SHMID == repl_instance.jnlpool_shmid) || (0 != repl_instance.jnlpool_shmid_ctime));
assert(INVALID_SEMID != sem_id);
@@ -201,7 +201,7 @@ boolean_t mu_rndwn_repl_instance(replpool_identifier *replpool_id, boolean_t imm
{ /* Invoked by MUPIP RUNDOWN in which case the semaphores needs to be removed. But, remove the
* semaphore ONLY if we created it here OR the journal pool was successfully removed.
*/
- if (NULL == jnlpool_ctl)
+ if ((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl))
{
remove_sem = (sem_created || ((SS_NORMAL == jnlpool_stat) && ipc_rmvd));
if (!remove_sem)
@@ -309,24 +309,24 @@ boolean_t mu_rndwn_repl_instance(replpool_identifier *replpool_id, boolean_t imm
LEN_AND_STR(ipcs_buff), LEN_AND_STR(instfilename),
ERR_SEMREMOVED, 1, sem_id);
}
- if (NULL != jnlpool_ctl)
+ if (jnlpool && (NULL != jnlpool->jnlpool_ctl))
{ /* Journal pool is not yet removed. So, grab lock before resetting semid/shmid
* fields in the file header as the function expects the caller to hold crit
* if the journal pool is available
*/
assert(INVALID_SHMID != repl_instance.jnlpool_shmid);
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
assert(!repl_csa->now_crit);
assert(!repl_csa->hold_onto_crit);
was_crit = repl_csa->now_crit;
/* Since we do grab_lock, below, we need to do a per-process initialization. */
mutex_per_process_init();
if (!was_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
}
repl_inst_recvpool_reset();
- if ((NULL != jnlpool_ctl) && !was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ if (((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl)) && !was_crit)
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
assert(!holds_sem[RECV][RECV_POOL_ACCESS_SEM]);
}
@@ -339,38 +339,40 @@ boolean_t mu_rndwn_repl_instance(replpool_identifier *replpool_id, boolean_t imm
LEN_AND_STR(instfilename));
}
}
- assert(jgbl.onlnrlbk || INST_FREEZE_ON_ERROR_POLICY || (NULL == jnlpool.repl_inst_filehdr));
+ assert(jgbl.onlnrlbk || INST_FREEZE_ON_ERROR_POLICY || ((NULL == jnlpool) || (NULL == jnlpool->repl_inst_filehdr)));
if (mur_options.rollback && (SS_NORMAL == jnlpool_stat) && (SS_NORMAL == recvpool_stat))
{
assert(jgbl.onlnrlbk || INST_FREEZE_ON_ERROR_POLICY || ((INVALID_SHMID == repl_instance.jnlpool_shmid)
&& (INVALID_SHMID == repl_instance.recvpool_shmid)));
- /* Initialize jnlpool.repl_inst_filehdr as it is used later by gtmrecv_fetchresync() */
+ /* Initialize jnlpool->repl_inst_filehdr as it is used later by gtmrecv_fetchresync() */
decr_cnt = FALSE;
- if (NULL == jnlpool.repl_inst_filehdr)
+ if ((NULL == jnlpool) || (NULL == jnlpool->repl_inst_filehdr))
{ /* Possible if there is NO journal pool in the first place. In this case, malloc the structure here and
* copy the file header from repl_instance structure.
*/
- jnlpool.repl_inst_filehdr = (repl_inst_hdr_ptr_t)malloc(SIZEOF(repl_inst_hdr));
- memcpy(jnlpool.repl_inst_filehdr, &repl_instance, SIZEOF(repl_inst_hdr));
+ SET_JNLPOOL_FROM_RECVPOOL_P(jnlpool);
+ jnlpool->repl_inst_filehdr = (repl_inst_hdr_ptr_t)malloc(SIZEOF(repl_inst_hdr));
+ memcpy(jnlpool->repl_inst_filehdr, &repl_instance, SIZEOF(repl_inst_hdr));
} else
{
- assert(repl_instance.jnlpool_semid == jnlpool.repl_inst_filehdr->jnlpool_semid);
- assert(repl_instance.jnlpool_semid_ctime == jnlpool.repl_inst_filehdr->jnlpool_semid_ctime);
- assert(repl_instance.jnlpool_shmid == jnlpool.repl_inst_filehdr->jnlpool_shmid);
- assert(repl_instance.jnlpool_shmid_ctime == jnlpool.repl_inst_filehdr->jnlpool_shmid_ctime);
+ assert(repl_instance.jnlpool_semid == jnlpool->repl_inst_filehdr->jnlpool_semid);
+ assert(repl_instance.jnlpool_semid_ctime == jnlpool->repl_inst_filehdr->jnlpool_semid_ctime);
+ assert(repl_instance.jnlpool_shmid == jnlpool->repl_inst_filehdr->jnlpool_shmid);
+ assert(repl_instance.jnlpool_shmid_ctime == jnlpool->repl_inst_filehdr->jnlpool_shmid_ctime);
/* If the ONLINE ROLLBACK command is run on the primary when the source server is up and running,
- * jnlpool.repl_inst_filehdr->recvpool_semid will be INVALID because there is NO receiver server
+ * jnlpool->repl_inst_filehdr->recvpool_semid will be INVALID because there is NO receiver server
* running. However, ROLLBACK creates semaphores for both journal pool and receive pool and writes
* it to the instance file header. Copy this information to the file header copy in the jnlpool
* as well
*/
- jnlpool.repl_inst_filehdr->recvpool_semid = repl_instance.recvpool_semid;
- jnlpool.repl_inst_filehdr->recvpool_semid_ctime = repl_instance.recvpool_semid_ctime;
+ jnlpool->repl_inst_filehdr->recvpool_semid = repl_instance.recvpool_semid;
+ jnlpool->repl_inst_filehdr->recvpool_semid_ctime = repl_instance.recvpool_semid_ctime;
}
/* Flush changes to the replication instance file header to disk */
repl_inst_write(instfilename, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
} else /* for MUPIP RUNDOWN, semid fields in the file header are reset and is written in mu_replpool_release_sem() above */
- decr_cnt = (NULL == jnlpool_ctl); /* for anticipatory freeze, "mupip_rundown" releases the ftok semaphore */
+ /* for anticipatory freeze, "mupip_rundown" releases the ftok semaphore */
+ decr_cnt = (NULL == (jnlpool ? jnlpool->jnlpool_ctl : NULL));
REVERT;
udi->counter_ftok_incremented = !ftok_counter_halted; /* Restore counter_ftok_incremented before release */
/* Release replication instance ftok semaphore lock. Do not decrement the counter if ROLLBACK */
@@ -386,7 +388,9 @@ CONDITION_HANDLER(mu_rndwn_repl_instance_ch)
gd_region *reg;
START_CH(TRUE);
- reg = jnlpool.jnlpool_dummy_reg;
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
+ if (NULL == reg)
+ reg = recvpool.recvpool_dummy_reg;
assert(NULL != reg);
if (NULL != reg)
{
diff --git a/sr_unix/mu_rndwn_replpool.c b/sr_unix/mu_rndwn_replpool.c
index e1d7992..635e933 100644
--- a/sr_unix/mu_rndwn_replpool.c
+++ b/sr_unix/mu_rndwn_replpool.c
@@ -61,8 +61,8 @@
GBLREF boolean_t argumentless_rundown;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF recvpool_addrs recvpool;
GBLREF mur_gbls_t murgbl;
GBLREF mur_opt_struct mur_options;
GBLREF uint4 mutex_per_process_init_pid;
@@ -95,6 +95,7 @@ int mu_rndwn_replpool2(replpool_identifier *replpool_id, repl_inst_hdr_ptr_t
char pool_type;
unix_db_info *udi;
sgmnt_addrs *csa;
+ gd_region *reg;
boolean_t anticipatory_freeze_available, reset_crash;
DCL_THREADGBL_ACCESS;
@@ -127,26 +128,27 @@ int mu_rndwn_replpool2(replpool_identifier *replpool_id, repl_inst_hdr_ptr_t
}
reset_crash = (!anticipatory_freeze_available || argumentless_rundown);
/* Assert that if we haven't yet attached to the journal pool yet, jnlpool_ctl better be NULL */
- assert((JNLPOOL_SEGMENT != pool_type) || (NULL == jnlpool.jnlpool_ctl));
+ assert((JNLPOOL_SEGMENT != pool_type) || ((NULL == jnlpool) || (NULL == jnlpool->jnlpool_ctl)));
if (JNLPOOL_SEGMENT == pool_type)
{ /* Initialize variables to simulate a "jnlpool_init". This is required by "repl_inst_flush_jnlpool" called below */
- jnlpool_ctl = jnlpool.jnlpool_ctl = (jnlpool_ctl_ptr_t)start_addr;
- assert(NULL != jnlpool.jnlpool_dummy_reg);
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ SET_JNLPOOL_FROM_RECVPOOL_P(jnlpool);
+ jnlpool->jnlpool_ctl = (jnlpool_ctl_ptr_t)start_addr;
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
csa = &udi->s_addrs;
- csa->critical = (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl + JNLPOOL_CTL_SIZE);
+ csa->critical = (mutex_struct_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl + JNLPOOL_CTL_SIZE);
csa->nl = (node_local_ptr_t)((sm_uc_ptr_t)csa->critical + JNLPOOL_CRIT_SPACE + SIZEOF(mutex_spin_parms_struct));
/* secshr_db_clnup uses this relationship */
- assert(jnlpool.jnlpool_ctl->filehdr_off);
- assert(jnlpool.jnlpool_ctl->srclcl_array_off > jnlpool.jnlpool_ctl->filehdr_off);
- assert(jnlpool.jnlpool_ctl->sourcelocal_array_off > jnlpool.jnlpool_ctl->srclcl_array_off);
- /* Initialize "jnlpool.repl_inst_filehdr" and related fields as "repl_inst_flush_jnlpool" relies on that */
- jnlpool.repl_inst_filehdr = (repl_inst_hdr_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl
- + jnlpool.jnlpool_ctl->filehdr_off);
- jnlpool.gtmsrc_lcl_array = (gtmsrc_lcl_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl
- + jnlpool.jnlpool_ctl->srclcl_array_off);
- jnlpool.gtmsource_local_array = (gtmsource_local_ptr_t)((sm_uc_ptr_t)jnlpool.jnlpool_ctl
- + jnlpool.jnlpool_ctl->sourcelocal_array_off);
+ assert(jnlpool->jnlpool_ctl->filehdr_off);
+ assert(jnlpool->jnlpool_ctl->srclcl_array_off > jnlpool->jnlpool_ctl->filehdr_off);
+ assert(jnlpool->jnlpool_ctl->sourcelocal_array_off > jnlpool->jnlpool_ctl->srclcl_array_off);
+ /* Initialize "jnlpool->repl_inst_filehdr" and related fields as "repl_inst_flush_jnlpool" relies on that */
+ jnlpool->repl_inst_filehdr = (repl_inst_hdr_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl
+ + jnlpool->jnlpool_ctl->filehdr_off);
+ jnlpool->gtmsrc_lcl_array = (gtmsrc_lcl_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl
+ + jnlpool->jnlpool_ctl->srclcl_array_off);
+ jnlpool->gtmsource_local_array = (gtmsource_local_ptr_t)((sm_uc_ptr_t)jnlpool->jnlpool_ctl
+ + jnlpool->jnlpool_ctl->sourcelocal_array_off);
if (0 == nattch)
{ /* No one attached. So, we can safely flush the journal pool so that the gtmsrc_lcl structures in the
* jnlpool and disk are in sync with each other. More importantly we are about to remove the jnlpool
@@ -160,15 +162,16 @@ int mu_rndwn_replpool2(replpool_identifier *replpool_id, repl_inst_hdr_ptr_t
*/
assert((INVALID_SEMID != repl_inst_filehdr->jnlpool_semid)
&& (0 != repl_inst_filehdr->jnlpool_semid_ctime));
- jnlpool.repl_inst_filehdr->jnlpool_semid = repl_inst_filehdr->jnlpool_semid;
- jnlpool.repl_inst_filehdr->jnlpool_semid_ctime = repl_inst_filehdr->jnlpool_semid_ctime;
+ jnlpool->repl_inst_filehdr->jnlpool_semid = repl_inst_filehdr->jnlpool_semid;
+ jnlpool->repl_inst_filehdr->jnlpool_semid_ctime = repl_inst_filehdr->jnlpool_semid_ctime;
repl_inst_flush_jnlpool(FALSE, reset_crash);
- assert(!jnlpool.repl_inst_filehdr->crash || !reset_crash);
- /* Refresh local copy (repl_inst_filehdr) with the copy that was just flushed (jnlpool.repl_inst_filehdr) */
- memcpy(repl_inst_filehdr, jnlpool.repl_inst_filehdr, SIZEOF(repl_inst_hdr));
+ assert(!jnlpool->repl_inst_filehdr->crash || !reset_crash);
+ /* Refresh local copy (repl_inst_filehdr) with the copy that was just
+ flushed (jnlpool->repl_inst_filehdr) */
+ memcpy(repl_inst_filehdr, jnlpool->repl_inst_filehdr, SIZEOF(repl_inst_hdr));
if (reset_crash)
{ /* Now that jnlpool has been flushed and there is going to be no journal pool, reset
- * "jnlpool.repl_inst_filehdr" as otherwise other routines (e.g. "repl_inst_recvpool_reset") are
+ * "jnlpool->repl_inst_filehdr" as otherwise other routines (e.g. "repl_inst_recvpool_reset") are
* affected by whether this is NULL or not.
*/
JNLPOOL_CLEAR_FIELDS(jnlpool);
@@ -193,22 +196,22 @@ int mu_rndwn_replpool2(replpool_identifier *replpool_id, repl_inst_hdr_ptr_t
{
repl_inst_filehdr->jnlpool_shmid = INVALID_SHMID;
repl_inst_filehdr->jnlpool_shmid_ctime = 0;
- assert((NULL == jnlpool.jnlpool_ctl) && (NULL == jnlpool_ctl));
+ assert((NULL == jnlpool) || ((NULL == jnlpool->jnlpool_ctl)));
*ipc_rmvd = TRUE;
} else
{
repl_inst_filehdr->recvpool_shmid = INVALID_SHMID;
repl_inst_filehdr->recvpool_shmid_ctime = 0;
- if (NULL != jnlpool.repl_inst_filehdr)
+ if ((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr))
{
- jnlpool.repl_inst_filehdr->recvpool_shmid = INVALID_SHMID;
- jnlpool.repl_inst_filehdr->recvpool_shmid_ctime = 0;
+ jnlpool->repl_inst_filehdr->recvpool_shmid = INVALID_SHMID;
+ jnlpool->repl_inst_filehdr->recvpool_shmid_ctime = 0;
}
*ipc_rmvd = TRUE;
}
} else
{
- assert((JNLPOOL_SEGMENT != pool_type) || ((NULL != jnlpool.jnlpool_ctl) && (NULL != jnlpool_ctl)));
+ assert((JNLPOOL_SEGMENT != pool_type) || ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl)));
if (JNLPOOL_SEGMENT == pool_type)
{
*ipc_rmvd = FALSE;
@@ -294,14 +297,14 @@ CONDITION_HANDLER(mu_rndwn_replpool_ch)
* On the other hand, we don't respect IFOE in argumentless rundown, so go ahead and detach in that case, since otherwise
* we could potentially leak the shared memory of multiple journal pools.
*/
- if ((NULL != jnlpool.jnlpool_ctl) && (!INST_FREEZE_ON_ERROR_POLICY || argumentless_rundown))
+ if (((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl)) && (!INST_FREEZE_ON_ERROR_POLICY || argumentless_rundown))
{
- jnlpool_shmid = jnlpool.repl_inst_filehdr->jnlpool_shmid;
+ jnlpool_shmid = jnlpool->repl_inst_filehdr->jnlpool_shmid;
JNLPOOL_SHMDT(jnlpool, status, save_errno);
if (0 > status)
{
- assert(NULL != jnlpool.jnlpool_dummy_reg);
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(ERR_REPLINSTOPEN == SIGNAL); /* only reason we know why mu_rndwn_replpool can fail */
ISSUE_REPLPOOLINST(save_errno, jnlpool_shmid, udi->fn, "shmdt()");
}
diff --git a/sr_unix/mu_rndwn_replpool.h b/sr_unix/mu_rndwn_replpool.h
index e084483..c76da94 100755
--- a/sr_unix/mu_rndwn_replpool.h
+++ b/sr_unix/mu_rndwn_replpool.h
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -26,4 +27,15 @@ int mu_replpool_release_sem(repl_inst_hdr_ptr_t repl_inst_filehdr, char pool_typ
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5, LEN_AND_LIT(FAILED_OP), CALLFROM, SAVE_ERRNO); \
}
+#define SET_JNLPOOL_FROM_RECVPOOL_P(JNLPOOL) \
+{ \
+ if (NULL == JNLPOOL) \
+ { \
+ JNLPOOL = malloc(SIZEOF(jnlpool_addrs)); \
+ memset(JNLPOOL, 0, SIZEOF(jnlpool_addrs)); \
+ JNLPOOL->jnlpool_dummy_reg = recvpool.recvpool_dummy_reg; \
+ JNLPOOL->recv_pool = TRUE; \
+ } \
+}
+
#endif /* MU_RNDWN_REPLPOOL_INCLUDED */
diff --git a/sr_unix/mu_truncate.c b/sr_unix/mu_truncate.c
index 35dca1e..7687174 100644
--- a/sr_unix/mu_truncate.c
+++ b/sr_unix/mu_truncate.c
@@ -110,7 +110,7 @@ GBLREF unsigned char t_fail_hist[CDB_MAX_TRIES];
GBLREF volatile int4 db_fsync_in_prog; /* for DB_FSYNC macro usage */
GBLREF jnl_gbls_t jgbl;
GBLREF int num_additional_processors;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
boolean_t mu_truncate(int4 truncate_percent)
{
@@ -309,7 +309,7 @@ boolean_t mu_truncate(int4 truncate_percent)
for (;;)
{ /* wait for FREEZE, we don't want to truncate a frozen database */
grab_crit(gv_cur_region);
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
DO_CHILLED_AUTORELEASE(csa, cs_data);
if (!FROZEN(cs_data) && !IS_REPL_INST_FROZEN)
break;
@@ -317,7 +317,7 @@ boolean_t mu_truncate(int4 truncate_percent)
while (FROZEN(cs_data) || IS_REPL_INST_FROZEN)
{
hiber_start(1000);
- if (FROZEN_CHILLED(cs_data) && CHILLED_AUTORELEASE(cs_data))
+ if (FROZEN_CHILLED(cs_addrs) && CHILLED_AUTORELEASE(cs_addrs))
break;
}
}
diff --git a/sr_unix/mubexpfilnam.c b/sr_unix/mubexpfilnam.c
index 087089f..3a8d37d 100755
--- a/sr_unix/mubexpfilnam.c
+++ b/sr_unix/mubexpfilnam.c
@@ -46,7 +46,7 @@ void mubexpfilnam(char *dirname, unsigned int dirlen, backup_reg_list *list)
}
} else
{ /* Replication instance region */
- if (!repl_inst_get_name(file.addr, (unsigned int *)&file.len, MAX_FN_LEN, issue_rts_error))
+ if (!repl_inst_get_name(file.addr, (unsigned int *)&file.len, MAX_FN_LEN, issue_rts_error, NULL))
assertpro(FALSE); /* rts_error should have been issued by repl_inst_get_name */
}
for (c1 = file.addr + file.len; (*c1 != '/') && (c1 != file.addr); c1--)
diff --git a/sr_unix/mucblkini.c b/sr_unix/mucblkini.c
index d58f633..2693e90 100755
--- a/sr_unix/mucblkini.c
+++ b/sr_unix/mucblkini.c
@@ -75,6 +75,7 @@ void mucblkini(void)
bml_busy(DIR_DATA, bmp + SIZEOF(blk_hdr));
ASSERT_NO_DIO_ALIGN_NEEDED(udi); /* because we are creating the database and so effectively have standalone access */
DB_LSEEKWRITE(cs_addrs, udi, udi->fn, udi->fd, (off_t)BLK_ZERO_OFF(cs_addrs->hdr->start_vbn), bmp, bmpsize, status);
+ free(bmp);
if (0 != status)
{
PUTMSG_ERROR_CSA((CSA_ARG(cs_addrs) VARLSTCNT(7) ERR_FILECREERR, 4, LEN_AND_LIT("writing out first bitmap"),
@@ -95,6 +96,7 @@ void mucblkini(void)
bp2->bsiz = SIZEOF(blk_hdr);
bp2->tn = 0;
DSK_WRITE_NOCACHE(gv_cur_region, DIR_ROOT, (uchar_ptr_t)bp1, cs_addrs->hdr->desired_db_format, status);
+ free(bp1);
if (0 != status)
{
if (IS_MUMPS_IMAGE)
@@ -107,6 +109,7 @@ void mucblkini(void)
}
}
DSK_WRITE_NOCACHE(gv_cur_region, DIR_DATA, (uchar_ptr_t)bp2, cs_addrs->hdr->desired_db_format, status);
+ free(bp2);
if (0 != status)
{
if (IS_MUMPS_IMAGE)
diff --git a/sr_unix/mumps_clitab.c b/sr_unix/mumps_clitab.c
index b71ce85..0af1084 100755
--- a/sr_unix/mumps_clitab.c
+++ b/sr_unix/mumps_clitab.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2014 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -22,7 +23,8 @@
************************************************************/
static readonly CLI_PARM mumps_parm[] = {
- {"INFILE", "What file: ", PARM_REQ}
+ {"INFILE", "What file: ", PARM_REQ},
+ {""}
};
static readonly CLI_ENTRY mumps_qual[] = {
diff --git a/sr_unix/mupip_cmd.c b/sr_unix/mupip_cmd.c
index ed6d06f..d252607 100644
--- a/sr_unix/mupip_cmd.c
+++ b/sr_unix/mupip_cmd.c
@@ -175,6 +175,15 @@ static CLI_ENTRY mup_jnl_fences_qual[] = {
{ "" }
};
+static CLI_ENTRY mup_null_subs_qual[] = {
+ { "ALWAYS", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
+ { "EXISTING", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
+ { "FALSE", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
+ { "NEVER", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
+ { "TRUE", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
+ { "" }
+};
+
static CLI_ENTRY mup_repl_qual[] = {
{ "OFF", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
{ "ON", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
@@ -686,40 +695,44 @@ static readonly CLI_PARM mup_set_ftime_parm[] = {
};
static CLI_ENTRY mup_set_qual[] = {
-{ "ACCESS_METHOD", mupip_set, 0, 0, mup_set_acc_qual, 0, 0, VAL_REQ, 1, NON_NEG, VAL_STR, 0 },
-{ "ASYNCIO", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "BYPASS", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "DBFILENAME", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
-{ "DEFER_ALLOCATE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "DEFER_TIME", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
-{ "ENCRYPTABLE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "ENCRYPTIONCOMPLETE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "EPOCHTAPER", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "EXTENSION_COUNT", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "FILE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "FLUSH_TIME", mupip_set, 0, mup_set_ftime_parm, 0, 0, 0, VAL_NOT_REQ, 1, NON_NEG, VAL_TIME, 0 },
-{ "GLOBAL_BUFFERS", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "INST_FREEZE_ON_ERROR", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "JNLFILE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "JOURNAL", mupip_set, 0, 0, mup_set_journal_qual, 0, 0, VAL_NOT_REQ, 1, NEG, VAL_STR, 0 },
-{ "KEY_SIZE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "LCK_SHARES_DB_CRIT", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "LOCK_SPACE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "MUTEX_SLOTS", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "PARTIAL_RECOV_BYPASS", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "PREVJNLFILE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
-{ "QDBRUNDOWN", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "RECORD_SIZE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "REGION", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "REPLICATION", mupip_set, 0, 0, mup_repl_qual, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
-{ "REPL_STATE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
-{ "RESERVED_BYTES", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "SLEEP_SPIN_COUNT", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "SPIN_SLEEP_LIMIT", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
-{ "STANDALONENOT", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
-{ "STATS", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
-{ "VERSION", mupip_set, 0, 0, mup_set_dbver_qual, 0, 0, VAL_REQ, 1, NON_NEG, VAL_STR, 0 },
-{ "WAIT_DISK", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "ACCESS_METHOD", mupip_set, 0, 0, mup_set_acc_qual, 0, 0, VAL_REQ, 1, NON_NEG, VAL_STR, 0 },
+{ "ASYNCIO", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "BYPASS", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "DBFILENAME", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
+{ "DEFER_ALLOCATE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "DEFER_TIME", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
+{ "ENCRYPTABLE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "ENCRYPTIONCOMPLETE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "EPOCHTAPER", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "EXTENSION_COUNT", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "FILE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "FLUSH_TIME", mupip_set, 0, mup_set_ftime_parm, 0, 0, 0, VAL_NOT_REQ, 1, NON_NEG, VAL_TIME, 0 },
+{ "GLOBAL_BUFFERS", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "HARD_SPIN_COUNT", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, VAL_DCM },
+{ "INST_FREEZE_ON_ERROR", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "JNLFILE", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "JOURNAL", mupip_set, 0, 0, mup_set_journal_qual, 0, 0, VAL_NOT_REQ, 1, NEG, VAL_STR, 0 },
+{ "KEY_SIZE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "LCK_SHARES_DB_CRIT", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "LOCK_SPACE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "MUTEX_SLOTS", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "NULL_SUBSCRIPTS", mupip_set, 0, 0, mup_null_subs_qual, 0, 0, VAL_REQ, 1, NON_NEG, VAL_STR, 0 },
+{ "PARTIAL_RECOV_BYPASS", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "PREVJNLFILE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
+{ "QDBRUNDOWN", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "READ_ONLY", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "RECORD_SIZE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "REGION", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "REPLICATION", mupip_set, 0, 0, mup_repl_qual, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
+{ "REPL_STATE", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NEG, VAL_STR, 0 },
+{ "RESERVED_BYTES", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "SLEEP_SPIN_COUNT", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
+{ "SPIN_SLEEP_MASK", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, VAL_HEX },
+{ "STANDALONENOT", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NON_NEG, VAL_N_A, 0 },
+{ "STATS", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "STDNULLCOLL", mupip_set, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, NEG, VAL_N_A, 0 },
+{ "VERSION", mupip_set, 0, 0, mup_set_dbver_qual, 0, 0, VAL_REQ, 1, NON_NEG, VAL_STR, 0 },
+{ "WAIT_DISK", mupip_set, 0, 0, 0, 0, 0, VAL_REQ, 1, NON_NEG, VAL_NUM, 0 },
{ "" }
};
diff --git a/sr_unix/mupip_cvtgbl.c b/sr_unix/mupip_cvtgbl.c
index 04d4608..8dc52ef 100755
--- a/sr_unix/mupip_cvtgbl.c
+++ b/sr_unix/mupip_cvtgbl.c
@@ -35,6 +35,7 @@
#include "muextr.h"
#include <regex.h>
#include "op.h"
+#include "min_max.h"
GBLREF int gv_fillfactor;
GBLREF bool mupip_error_occurred;
@@ -148,11 +149,11 @@ void mupip_cvtgbl(void)
} else
{
lower_to_upper(buff, buff, len);
- if (!memcmp(buff, "STOP", len))
+ if (!STRNCMP_LIT_LEN(buff, "STOP", len))
onerror = ONERROR_STOP;
- else if (!memcmp(buff, "PROCEED", len))
+ else if (!STRNCMP_LIT_LEN(buff, "PROCEED", len))
onerror = ONERROR_PROCEED;
- else if (!memcmp(buff, "INTERACTIVE", len))
+ else if (!STRNCMP_LIT_LEN(buff, "INTERACTIVE", len))
{
if (isatty(0)) /*if stdin is a terminal*/
onerror = ONERROR_INTERACTIVE;
@@ -179,27 +180,27 @@ void mupip_cvtgbl(void)
else
{
lower_to_upper(buff, buff, len);
- if (!memcmp(buff, "ZWR", len))
+ if (!STRNCMP_LIT_LEN(buff, "ZWR", len))
{ /* If the label did not determine a format let them specify ZWR and they can sort out the result */
if ((MU_FMT_ZWR == file_format) || (MU_FMT_UNRECOG == file_format))
go_load(begin, end, (unsigned char *)line1_ptr, line3_ptr, line3_len, max_rec_size,
MU_FMT_ZWR, utf8, dos);
else
mupip_exit(ERR_LDBINFMT);
- } else if (!memcmp(buff, "BINARY", len))
+ } else if (!STRNCMP_LIT_LEN(buff, "BINARY", len))
{
if (MU_FMT_BINARY == file_format)
bin_load(begin, end, line1_ptr, line1_len);
else
mupip_exit(ERR_LDBINFMT);
- } else if (!memcmp(buff, "GO", len))
+ } else if (!STRNCMP_LIT_LEN(buff, "GO", len))
{ /* If the label did not determine a format let them specify GO and they can sort out the result */
if ((MU_FMT_GO == file_format) || (MU_FMT_UNRECOG == file_format))
go_load(begin, end, (unsigned char *)line1_ptr, line3_ptr, line3_len, max_rec_size,
MU_FMT_GO, utf8, dos);
else
mupip_exit(ERR_LDBINFMT);
- } else if (!memcmp(buff, "GOQ", len))
+ } else if (!STRNCMP_LIT_LEN(buff, "GOQ", len))
{ /* get_load_format doesn't recognize GOQ labels' */
if (MU_FMT_UNRECOG == file_format)
goq_load();
@@ -245,7 +246,7 @@ int get_load_format(char **line1_ptr, char **line3_ptr, int *line1_len, int *lin
ret = MU_FMT_UNRECOG; /* actually means as yet undetermined; used to decide if still trying to find a format */
if (0 < *line1_len)
{
- if (0 == memcmp(line1 + 6, "BINARY", STR_LIT_LEN("BINARY"))) /* If file is binary do not look further */
+ if (0 == STRNCMP_LIT(line1 + 6, "BINARY")) /* If file is binary do not look further */
return MU_FMT_BINARY;
for (line2_len = 0, c = line1, ctop = c + *line1_len; c < ctop; c++)
{ /* that 1st read is fixed length, so look for a terminator */
diff --git a/sr_unix/mupip_endiancvt.c b/sr_unix/mupip_endiancvt.c
index c2d05b4..5e9aa55 100644
--- a/sr_unix/mupip_endiancvt.c
+++ b/sr_unix/mupip_endiancvt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2006-2016 Fidelity National Information *
+ * Copyright (c) 2006-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -691,6 +691,7 @@ void endian_header(sgmnt_data *new, sgmnt_data *old, boolean_t new_is_native)
SWAP_SD4(mutex_spin_parms.mutex_hard_spin_count); /* gdsbt.h */
SWAP_SD4(mutex_spin_parms.mutex_sleep_spin_count);
SWAP_SD4(mutex_spin_parms.mutex_spin_sleep_mask);
+ SWAP_SD4(mutex_spin_parms.mutex_que_entry_space_size);
SWAP_SD4(max_update_array_size);
SWAP_SD4(max_non_bm_update_array_size);
/* SWAP_SD4(file_corrupt); is set in main routine */
@@ -724,7 +725,6 @@ void endian_header(sgmnt_data *new, sgmnt_data *old, boolean_t new_is_native)
/************* FIELDS SET WHEN DB IS OPEN ********************************/
new->image_count = 0; /* should be zero when db is not open so reset it unconditionally */
new->freeze = 0; /* should be zero when db is not open so reset it unconditionally */
- new->freeze_online = 0; /* should be zero when db is not open so reset it unconditionally */
SWAP_SD4(kill_in_prog);
SWAP_SD4(abandoned_kills);
/************* FIELDS USED IN V4 <==> V5 COMPATIBILITY MODE ****************/
diff --git a/sr_unix/mupip_exit_handler.c b/sr_unix/mupip_exit_handler.c
old mode 100755
new mode 100644
index 1c9f702..a879b75
--- a/sr_unix/mupip_exit_handler.c
+++ b/sr_unix/mupip_exit_handler.c
@@ -73,7 +73,7 @@ GBLREF unsigned int core_in_progress;
GBLREF boolean_t exit_handler_active;
GBLREF boolean_t skip_exit_handler;
GBLREF recvpool_addrs recvpool;
-GBLREF boolean_t pool_init;
+GBLREF int pool_init;
GBLREF boolean_t is_src_server;
GBLREF boolean_t is_rcvr_server;
GBLREF boolean_t is_updproc;
diff --git a/sr_unix/mupip_ftok.c b/sr_unix/mupip_ftok.c
index 463e4a4..8e07c57 100755
--- a/sr_unix/mupip_ftok.c
+++ b/sr_unix/mupip_ftok.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -37,6 +38,10 @@
GBLREF boolean_t in_mupip_ftok; /* Used by an assert in repl_inst_read */
+error_def(ERR_MUPCLIERR);
+error_def(ERR_MUNOACTION);
+error_def(ERR_TEXT);
+
/*
* This reads file header and prints the semaphore/shared memory id
* This is different than ftok utility.
@@ -57,14 +62,10 @@ void mupip_ftok (void)
gd_id fid;
sm_uc_ptr_t fid_ptr, fid_top;
- error_def(ERR_MUPCLIERR);
- error_def(ERR_MUNOACTION);
- error_def(ERR_TEXT);
-
fn_len = MAX_FN_LEN;
if (FALSE == cli_get_str("FILE", fn, &fn_len))
{
- rts_error(VARLSTCNT(1) ERR_MUPCLIERR);
+ rts_error_csa(NULL, VARLSTCNT(1) ERR_MUPCLIERR);
mupip_exit(ERR_MUPCLIERR);
}
fn[fn_len] = 0;
@@ -72,8 +73,8 @@ void mupip_ftok (void)
recvpool = (CLI_PRESENT == cli_present("RECVPOOL"));
if (jnlpool || recvpool)
{
- if (!repl_inst_get_name(instfilename, &full_len, SIZEOF(instfilename), issue_rts_error))
- GTMASSERT; /* rts_error should have been issued by repl_inst_get_name */
+ if (!repl_inst_get_name(instfilename, &full_len, SIZEOF(instfilename), issue_rts_error, NULL))
+ assertpro(NULL == instfilename); /* rts_error should have been issued by repl_inst_get_name */
in_mupip_ftok = TRUE;
repl_inst_read(instfilename, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
in_mupip_ftok = FALSE;
diff --git a/sr_unix/mupip_reorg_encrypt.c b/sr_unix/mupip_reorg_encrypt.c
index f28c552..5cdfcf8 100644
--- a/sr_unix/mupip_reorg_encrypt.c
+++ b/sr_unix/mupip_reorg_encrypt.c
@@ -52,6 +52,8 @@
#include "mupip_reorg_encrypt.h"
#include "t_abort.h"
#include "interlock.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF bool error_mupip;
GBLREF bool mu_ctrlc_occurred;
@@ -263,7 +265,7 @@ void mupip_reorg_encrypt(void)
continue;
}
mu_reorg_process = TRUE; /* gvcst_init will use this value to use gtm_poollimit settings. */
- gvcst_init(reg);
+ gvcst_init(reg, NULL);
mu_reorg_process = FALSE;
/* Note that db_init() does not release the access-control semaphore in case of MUPIP REORG -ENCRYPT (as determined
* based on the mu_reorg_encrypt_in_prog variable), so no need to obtain it here.
diff --git a/sr_unix/mupip_rundown.c b/sr_unix/mupip_rundown.c
index 368e0bd..8dbc3bd 100644
--- a/sr_unix/mupip_rundown.c
+++ b/sr_unix/mupip_rundown.c
@@ -64,8 +64,7 @@ GBLREF tp_region *grlist;
GBLREF gd_region *gv_cur_region;
GBLREF boolean_t mu_star_specified;
GBLREF boolean_t donot_fflush_NULL;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
GBLREF boolean_t argumentless_rundown;
GBLREF semid_queue_elem *keep_semids;
@@ -87,7 +86,8 @@ void mupip_rundown(void)
{
int exit_status, semid, shmid, save_errno, status;
boolean_t region, file, arg_present, do_jnlpool_detach, jnlpool_sem_created, jnlpool_rndwn_required;
- boolean_t repl_inst_available, shm_removed = FALSE, anticipatory_freeze_available;
+ boolean_t shm_removed = FALSE, anticipatory_freeze_available;
+ void *repl_inst_available;
tp_region *rptr, single;
replpool_identifier replpool_id;
repl_inst_hdr repl_instance;
@@ -144,7 +144,8 @@ void mupip_rundown(void)
anticipatory_freeze_available = INST_FREEZE_ON_ERROR_POLICY;
if ((jnlpool_rndwn_required = (region && mu_star_specified)) || anticipatory_freeze_available) /* note:assigmnent */
{
- if (DEBUG_ONLY(repl_inst_available = )REPL_INST_AVAILABLE) /* sets replpool_id/full_len; note: assignment */
+ /* sets replpool_id/full_len; note: assignment */
+ if (DEBUG_ONLY(repl_inst_available = )REPL_INST_AVAILABLE(NULL))
{
instfilename = &replpool_id.instfilename[0];
if (!mu_rndwn_repl_instance(&replpool_id, !anticipatory_freeze_available, TRUE,
@@ -160,10 +161,10 @@ void mupip_rundown(void)
* No need to do any instance file cleanup since there is nothing to rundown there
* from either the journal pool or receive pool.
*/
- assert((NULL == jnlpool_ctl) || anticipatory_freeze_available);
- if ((NULL != jnlpool_ctl) && !anticipatory_freeze_available)
+ assert((!jnlpool || (NULL == jnlpool->jnlpool_ctl)) || anticipatory_freeze_available);
+ if ((jnlpool && (NULL != jnlpool->jnlpool_ctl)) && !anticipatory_freeze_available)
{
- shmid = jnlpool.repl_inst_filehdr->jnlpool_shmid;
+ shmid = jnlpool->repl_inst_filehdr->jnlpool_shmid;
JNLPOOL_SHMDT(jnlpool, status, save_errno);
if (0 > status)
{
@@ -173,7 +174,7 @@ void mupip_rundown(void)
}
exit_status = ERR_MUNOTALLSEC;
} else
- do_jnlpool_detach = (NULL != jnlpool_ctl);
+ do_jnlpool_detach = (NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl);
ENABLE_FREEZE_ON_ERROR;
}
}
@@ -200,17 +201,17 @@ void mupip_rundown(void)
}
if (do_jnlpool_detach)
{
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(anticipatory_freeze_available && repl_inst_available);
- assert(NULL != jnlpool_ctl);
+ assert(NULL != jnlpool->jnlpool_ctl);
/* Read the instance file to invalidate the journal pool semaphore ID and shared memory ID */
- assert(NULL != jnlpool.jnlpool_dummy_reg);
- assert(INVALID_SEMID != jnlpool.repl_inst_filehdr->jnlpool_semid);
- assert(INVALID_SHMID != jnlpool.repl_inst_filehdr->jnlpool_shmid);
- assert(0 != jnlpool.repl_inst_filehdr->jnlpool_semid_ctime);
- assert(0 != jnlpool.repl_inst_filehdr->jnlpool_shmid_ctime);
- semid = jnlpool.repl_inst_filehdr->jnlpool_semid;
- shmid = jnlpool.repl_inst_filehdr->jnlpool_shmid;
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
+ assert(INVALID_SEMID != jnlpool->repl_inst_filehdr->jnlpool_semid);
+ assert(INVALID_SHMID != jnlpool->repl_inst_filehdr->jnlpool_shmid);
+ assert(0 != jnlpool->repl_inst_filehdr->jnlpool_semid_ctime);
+ assert(0 != jnlpool->repl_inst_filehdr->jnlpool_shmid_ctime);
+ semid = jnlpool->repl_inst_filehdr->jnlpool_semid;
+ shmid = jnlpool->repl_inst_filehdr->jnlpool_shmid;
/* Detach from the journal pool */
JNLPOOL_SHMDT(jnlpool, status, save_errno);
if (0 > status)
@@ -219,7 +220,7 @@ void mupip_rundown(void)
mupip_exit(ERR_MUNOTALLSEC);
}
/* Grab the ftok again */
- if (!ftok_sem_lock(jnlpool.jnlpool_dummy_reg, FALSE))
+ if (!ftok_sem_lock(jnlpool->jnlpool_dummy_reg, FALSE))
{ /* CRITSEMFAIL is issued in case of an error */
assert(FALSE);
mupip_exit(ERR_MUNOTALLSEC);
@@ -308,7 +309,7 @@ void mupip_rundown(void)
mupip_exit(ERR_MUNOTALLSEC);
}
}
- if (!ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, FALSE))
+ if (!ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, FALSE))
{ /* CRITSEMFAIL is issued in case of an error */
assert(FALSE);
mupip_exit(ERR_MUNOTALLSEC);
diff --git a/sr_unix/mupip_set_file.c b/sr_unix/mupip_set_file.c
index 084ed4f..2c91452 100644
--- a/sr_unix/mupip_set_file.c
+++ b/sr_unix/mupip_set_file.c
@@ -88,6 +88,7 @@ error_def(ERR_MUREENCRYPTV4NOALLOW);
error_def(ERR_NODFRALLOCSUPP);
error_def(ERR_NOUSERDB);
error_def(ERR_OFRZACTIVE);
+error_def(ERR_READONLYNOBG);
error_def(ERR_SETQUALPROB);
error_def(ERR_TEXT);
error_def(ERR_WCERRNOTCHG);
@@ -107,18 +108,20 @@ MBSTART { \
int4 mupip_set_file(int db_fn_len, char *db_fn)
{
boolean_t bypass_partial_recov, got_standalone, need_standalone = FALSE, acc_meth_changing;
- char acc_spec[MAX_ACC_METH_LEN], *command = "MUPIP SET VERSION", *errptr, exit_stat, *fn,
- ver_spec[MAX_DB_VER_LEN];
+ char acc_spec[MAX_ACC_METH_LEN + 1], *command = "MUPIP SET VERSION", *errptr, exit_stat, *fn,
+ ver_spec[MAX_DB_VER_LEN + 1];
enum db_acc_method access, access_new;
enum db_ver desired_dbver;
gd_region *temp_cur_region;
int asyncio_status, defer_allocate_status, defer_status, disk_wait_status, encryptable_status,
- encryption_complete_status, epoch_taper_status, extn_count_status,
- fd, fn_len, glbl_buff_status, inst_freeze_on_error_status, key_size_status, locksharesdbcrit,
- lock_space_status, mutex_space_status, qdbrundown_status, rec_size_status, reg_exit_stat, rc,
- rsrvd_bytes_status, sleep_cnt_status, save_errno, stats_status, status, status1;
- int4 defer_time, new_cache_size, new_disk_wait, new_extn_count, new_key_size, new_lock_space,
- new_mutex_space, new_rec_size, new_sleep_cnt, new_spin_sleep, reserved_bytes, spin_sleep_status;
+ encryption_complete_status, epoch_taper_status, extn_count_status, fd, fn_len, glbl_buff_status,
+ hard_spin_status, inst_freeze_on_error_status, key_size_status, locksharesdbcrit,
+ lock_space_status, mutex_space_status, null_subs_status, qdbrundown_status, rec_size_status,
+ reg_exit_stat, rc, rsrvd_bytes_status, sleep_cnt_status, save_errno, stats_status, status,
+ status1, stdnullcoll_status;
+ int4 defer_time, new_cache_size, new_disk_wait, new_extn_count, new_hard_spin, new_key_size,
+ new_lock_space, new_mutex_space, new_null_subs, new_rec_size, new_sleep_cnt, new_spin_sleep,
+ new_stdnullcoll, reserved_bytes, spin_sleep_status, read_only_status;
sgmnt_data_ptr_t csd, pvt_csd;
tp_region *rptr, single;
unsigned short acc_spec_len = MAX_ACC_METH_LEN, ver_spec_len = MAX_DB_VER_LEN;
@@ -141,6 +144,7 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
if (cli_present("ACCESS_METHOD"))
{
cli_get_str("ACCESS_METHOD", acc_spec, &acc_spec_len);
+ acc_spec[acc_spec_len] = '\0';
cli_strupper(acc_spec);
if (0 == memcmp(acc_spec, "MM", acc_spec_len))
access = dba_mm;
@@ -160,6 +164,8 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
defer_allocate_status = cli_present("DEFER_ALLOCATE");
if (encryptable_status = cli_present("ENCRYPTABLE"))
need_standalone = TRUE;
+ if (read_only_status = cli_present("READ_ONLY")) /* Note assignment */
+ need_standalone = TRUE;
encryption_complete_status = cli_present("ENCRYPTIONCOMPLETE");
epoch_taper_status = cli_present("EPOCHTAPER");
/* EXTENSION_COUNT does not require standalone access and hence need_standalone will not be set to TRUE for this. */
@@ -202,6 +208,14 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
}
need_standalone = TRUE;
}
+ if (hard_spin_status = cli_present("HARD_SPIN_COUNT"))
+ { /* No min or max tests needed because mupip_cmd enforces min of 0 and no max requirement is documented*/
+ if (!cli_get_int("HARD_SPIN_COUNT", &new_hard_spin))
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SETQUALPROB, 2, LEN_AND_LIT("HARD_SPIN_COUNT"));
+ exit_stat |= EXIT_ERR;
+ }
+ }
inst_freeze_on_error_status = cli_present("INST_FREEZE_ON_ERROR");
if (key_size_status = cli_present("KEY_SIZE"))
{
@@ -273,6 +287,12 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
}
need_standalone = TRUE;
}
+ if (null_subs_status = cli_present("NULL_SUBSCRIPTS"))
+ {
+ if (-1 == (new_null_subs = cli_n_a_e("NULL_SUBSCRIPTS")))
+ exit_stat |= EXIT_ERR;
+ need_standalone = TRUE;
+ }
if (qdbrundown_status = cli_present("QDBRUNDOWN"))
need_standalone = TRUE;
if (rec_size_status = cli_present("RECORD_SIZE"))
@@ -318,36 +338,35 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
exit_stat |= EXIT_ERR;
}
}
- if (spin_sleep_status = cli_present("SPIN_SLEEP_LIMIT"))
+ if (spin_sleep_status = cli_present("SPIN_SLEEP_MASK"))
{
- if (cli_get_int("SPIN_SLEEP_LIMIT", &new_spin_sleep))
- { /* minimum is 0 & mupip_cmd defines this qualifier to not accept negative values, so no min check */
- if (new_spin_sleep > MAX_SPIN_SLEEP)
+ if (cli_get_hex("SPIN_SLEEP_MASK", (uint4 *) &new_spin_sleep))
+ {
+ /* minimum is 0 and mupip_cmd defines this qualifier to only accept hex values no min check*/
+ if ((uint4) new_spin_sleep > MAX_SPIN_SLEEP_MASK)
{
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_MUPIPSET2BIG, 4, new_spin_sleep,
- LEN_AND_LIT("SPIN_SLEEP_LIMIT"), MAX_SPIN_SLEEP);
+ LEN_AND_LIT("SPIN_SLEEP_MASK"), MAX_SPIN_SLEEP_MASK);
exit_stat |= EXIT_ERR;
- } else if (new_spin_sleep)
- { /* find the power of 2 equal to or greater than the value */
- for (spin_sleep_status = 2; spin_sleep_status < new_spin_sleep; spin_sleep_status <<= 1)
- ;
- new_spin_sleep = spin_sleep_status - 1; /* make new_spin_sleep a mask; status remains "true" */
}
} else
{
- gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SETQUALPROB, 2, LEN_AND_LIT("SPIN_SLEEP_LIMIT"));
- exit_stat |= EXIT_ERR;
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_SETQUALPROB, 2, LEN_AND_LIT("SPIN_SLEEP_MASK"));
+ exit_stat |= EXIT_ERR;
}
}
if (stats_status = cli_present("STATS"))
need_standalone = TRUE;
+ if (stdnullcoll_status = cli_present("STDNULLCOLL"))
+ need_standalone = TRUE;
if (cli_present("VERSION"))
{
cli_get_str("VERSION", ver_spec, &ver_spec_len);
+ ver_spec[ver_spec_len] = '\0';
cli_strupper(ver_spec);
- if (0 == memcmp(ver_spec, "V4", ver_spec_len))
+ if (0 == memcmp(ver_spec, "V4", ver_spec_len + 1))
desired_dbver = GDSV4;
- else if (0 == memcmp(ver_spec, "V6", ver_spec_len))
+ else if (0 == memcmp(ver_spec, "V6", ver_spec_len + 1))
desired_dbver = GDSV6;
else
assertpro(FALSE); /* CLI should prevent us ever getting here */
@@ -380,6 +399,7 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
memset(&single, 0, SIZEOF(single));
}
pvt_csd = (sgmnt_data *)malloc(ROUND_UP(SIZEOF(sgmnt_data), DISK_BLOCK_SIZE));
+ pvt_csd->read_only = FALSE;
in_backup = FALSE; /* Only want yes/no from mupfndfil, not an address */
for (; rptr != NULL; rptr = rptr->fPtr)
{
@@ -463,9 +483,16 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
LEN_AND_LIT("enable MM and ASYNCIO at the same time"));
reg_exit_stat |= EXIT_WRN;
}
- }
- if (dba_mm == access)
pvt_csd->defer_time = 1; /* defer defaults to 1 */
+ }
+ if(dba_mm != access)
+ {
+ if (pvt_csd->read_only && (CLI_NEGATED != read_only_status))
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_READONLYNOBG);
+ reg_exit_stat |= EXIT_WRN;
+ }
+ }
pvt_csd->acc_meth = access;
if (0 == pvt_csd->n_bts)
{
@@ -480,7 +507,7 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
pvt_csd->defer_time = 0;
else if (CLI_PRESENT == defer_status)
{
- if (cli_get_num("DEFER_TIME", &defer_time))
+ if (cli_get_defertime("DEFER_TIME", &defer_time))
{
if (-1 > defer_time)
{
@@ -584,6 +611,8 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
pvt_csd->lock_space_size = (uint4)new_lock_space * OS_PAGELET_SIZE;
if (mutex_space_status)
NUM_CRIT_ENTRY(pvt_csd) = new_mutex_space;
+ if (null_subs_status)
+ gv_cur_region->null_subs = pvt_csd->null_subs = (unsigned char)new_null_subs;
if (qdbrundown_status)
pvt_csd->mumps_can_bypass = (CLI_PRESENT == qdbrundown_status);
if (rec_size_status)
@@ -613,6 +642,21 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
reservedDBFlags |= RDBF_NOSTATS;
pvt_csd->reservedDBFlags = reservedDBFlags;
}
+ if (read_only_status)
+ {
+ if (dba_mm != pvt_csd->acc_meth)
+ {
+ gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_READONLYNOBG);
+ reg_exit_stat |= EXIT_WRN;
+ } else
+ {
+ pvt_csd->read_only = !(CLI_NEGATED == read_only_status);
+ }
+ }
+ if (CLI_NEGATED == stdnullcoll_status)
+ gv_cur_region->std_null_coll = pvt_csd->std_null_coll = FALSE;
+ else if (CLI_PRESENT == stdnullcoll_status)
+ gv_cur_region->std_null_coll = pvt_csd->std_null_coll = TRUE;
if (EXIT_NRM != reg_exit_stat)
{
DO_CLNUP_AND_SET_EXIT_STAT(exit_stat, reg_exit_stat);
@@ -635,7 +679,7 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
* as appropriate.
*/
}
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
change_reg(); /* sets cs_addrs and cs_data */
if (gv_cur_region->read_only)
{
@@ -648,10 +692,10 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
csd = cs_data;
assert(!cs_addrs->hold_onto_crit); /* this ensures we can safely do unconditional grab_crit and rel_crit */
grab_crit(gv_cur_region);
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
{
DO_CHILLED_AUTORELEASE(cs_addrs, cs_data);
- if (FROZEN_CHILLED(cs_data))
+ if (FROZEN_CHILLED(cs_addrs))
{
gtm_putmsg_csa(CSA_ARG(cs_addrs) VARLSTCNT(4) ERR_OFRZACTIVE, 2,
DB_LEN_STR(gv_cur_region));
@@ -749,6 +793,8 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
csd->freeze_on_fail = FALSE;
else if (CLI_PRESENT == inst_freeze_on_error_status)
csd->freeze_on_fail = TRUE;
+ if (hard_spin_status)
+ HARD_SPIN_COUNT(csd) = new_hard_spin;
if (sleep_cnt_status)
SLEEP_SPIN_CNT(csd) = new_sleep_cnt;
if (spin_sleep_status)
@@ -763,6 +809,12 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
util_out_print("Database file !AD now has asyncio !AD", TRUE,
fn_len, fn, LEN_AND_LIT("disabled"));
}
+ if (CLI_NEGATED == read_only_status)
+ util_out_print("Database file !AD is no longer read-only",
+ TRUE, fn_len, fn);
+ else if (CLI_PRESENT == read_only_status)
+ util_out_print("Database file !AD is now read-only",
+ TRUE, fn_len, fn);
if (disk_wait_status)
util_out_print("Database file !AD now has wait disk set to !UL seconds",
TRUE, fn_len, fn, csd->wait_disk_space);
@@ -780,11 +832,14 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
else if (CLI_PRESENT == inst_freeze_on_error_status)
util_out_print("Database file !AD now has inst freeze on fail flag set to TRUE",
TRUE, fn_len, fn);
+ if (hard_spin_status)
+ util_out_print("Database file !AD now has hard spin count !UL",
+ TRUE, fn_len, fn, HARD_SPIN_COUNT(csd));
if (sleep_cnt_status)
util_out_print("Database file !AD now has sleep spin count !UL",
TRUE, fn_len, fn, SLEEP_SPIN_CNT(csd));
if (spin_sleep_status)
- util_out_print("Database file !AD now has sleep spin mask !UL",
+ util_out_print("Database file !AD now has spin sleep mask !UL",
TRUE, fn_len, fn, SPIN_SLEEP_MASK(csd));
if (got_standalone)
{
@@ -820,6 +875,11 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
if (mutex_space_status)
util_out_print("Database file !AD now has !UL mutex queue slots",
TRUE, fn_len, fn, NUM_CRIT_ENTRY(pvt_csd));
+ if (null_subs_status)
+ util_out_print("Database file !AD now has null subscripts set to !AD",
+ TRUE, fn_len, fn, strlen("EXISTING"), (pvt_csd->null_subs == ALWAYS) ?
+ "ALWAYS " : (pvt_csd->null_subs == ALLOWEXISTING) ?
+ "EXISTING" : "NEVER ");
if (qdbrundown_status)
util_out_print("Database file !AD now has quick database rundown flag set to !AD", TRUE,
fn_len, fn, 5, (pvt_csd->mumps_can_bypass ? " TRUE" : "FALSE"));
@@ -832,6 +892,11 @@ int4 mupip_set_file(int db_fn_len, char *db_fn)
if (stats_status)
util_out_print("Database file !AD now has sharing of gvstats set to !AD", TRUE,
fn_len, fn, 5, (CLI_PRESENT == stats_status) ? " TRUE" : "FALSE");
+ if (stdnullcoll_status)
+ util_out_print("Database file !AD is now using !AD", TRUE, fn_len, fn,
+ strlen("M standard null collation"),
+ (CLI_PRESENT == stdnullcoll_status) ?
+ "M standard null collation" : "GT.M null collation ");
} else
wcs_flu(WCSFLU_FLUSH_HDR);
} else
diff --git a/sr_unix/mupip_size.c b/sr_unix/mupip_size.c
index 684dd84..c368e52 100644
--- a/sr_unix/mupip_size.c
+++ b/sr_unix/mupip_size.c
@@ -92,8 +92,8 @@ void mupip_size(void)
SETUP_THREADGBL_ACCESS;
mu_outofband_setup();
error_mupip = FALSE;
- memset(mu_int_adj, 0, ARRAYSIZE(mu_int_adj));
- memset(mu_int_adj_prev, 0, ARRAYSIZE(mu_int_adj_prev));
+ memset(mu_int_adj, 0, SIZEOF(mu_int_adj));
+ memset(mu_int_adj_prev, 0, SIZEOF(mu_int_adj_prev));
/* Region qualifier */
grlist = NULL;
if (CLI_PRESENT == cli_present("REGION"))
diff --git a/sr_unix/mutex.c b/sr_unix/mutex.c
index 1bbc3ae..f59d158 100644
--- a/sr_unix/mutex.c
+++ b/sr_unix/mutex.c
@@ -73,7 +73,7 @@
\
lcl_csd = CSA->hdr; \
assert((NULL != lcl_csd) \
- || (CSA == &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs)); \
+ || (CSA == &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs)); \
if (NULL != lcl_csd) \
BG_TRACE_PRO_ANY(CSA, EVENT); \
}
@@ -135,6 +135,8 @@ MBSTART { \
(CSA)->probecrit_rec.p_crit_yields = (gtm_uint64_t)(YIELDS); \
(CSA)->probecrit_rec.p_crit_que_slps = (gtm_uint64_t)(Q_SLPS); \
} \
+ if (save_jnlpool != jnlpool) \
+ jnlpool = save_jnlpool; \
return STATUS; \
} \
} MBEND
@@ -142,7 +144,7 @@ MBSTART { \
GBLREF int num_additional_processors;
GBLREF jnl_gbls_t jgbl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 process_id;
GBLREF uint4 mutex_per_process_init_pid;
#ifdef MUTEX_MSEM_WAKE
@@ -646,6 +648,7 @@ enum cdb_sc gtm_mutex_lock(gd_region *reg,
node_local *cnl;
uint4 in_crit_pid;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t save_jnlpool;
time_t curr_time;
uint4 curr_time_uint4, next_alert_uint4;
ABS_TIME atstart;
@@ -657,6 +660,7 @@ enum cdb_sc gtm_mutex_lock(gd_region *reg,
SETUP_THREADGBL_ACCESS;
csa = &FILE_INFO(reg)->s_addrs;
assert(!csa->now_crit);
+ save_jnlpool = jnlpool;
cnl = csa->nl;
/* Check that "mutex_per_process_init" has happened before we try to grab crit and that it was done with our current
* pid (i.e. ensure that even in the case where parent did the mutex init with its pid and did a fork, the child process
@@ -671,6 +675,7 @@ enum cdb_sc gtm_mutex_lock(gd_region *reg,
spins = yields = 0;
local_crit_cycle = 0; /* this keeps us from doing a MUTEXLCKALERT on the first cycle in case the time latch is stale */
try_recovery = jgbl.onlnrlbk; /* salvage lock the first time if we are online rollback thereby reducing unnecessary waits */
+ assert(cnl);
epoch_count = cnl->doing_epoch;
addr = csa->critical;
if (csa->crit_probe)
@@ -729,6 +734,9 @@ enum cdb_sc gtm_mutex_lock(gd_region *reg,
assert(MAXUINT4 > curr_time);
curr_time_uint4 = (uint4)curr_time;
next_alert_uint4 = csa->critical->stuckexec.cas_time;
+ assert(save_jnlpool == jnlpool);
+ assert(!csa->jnlpool || (csa->jnlpool == jnlpool));
+ assert((curr_time_uint4 <= next_alert_uint4) || (!csa->jnlpool || (csa->jnlpool == jnlpool)));
if ((curr_time_uint4 > next_alert_uint4) && !IS_REPL_INST_FROZEN)
{ /* We've waited long enough and the Instance is not frozen - might be time to send MUTEXLCKALERT */
if (COMPSWAP_LOCK(&csa->critical->stuckexec.time_latch, next_alert_uint4, 0,
@@ -867,7 +875,11 @@ enum cdb_sc gtm_mutex_lock(gd_region *reg,
mutex_wake_proc((sm_int_ptr_t)&wake_this_pid, wake_instance);
# endif
if (0 != (--sleep_spin_cnt))
+ {
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return (cdb_sc_dbccerr); /* Too many failures */
+ }
assert(!csa->now_crit);
GTM_REL_QUANT(mutex_spin_parms->mutex_spin_sleep_mask);
} while (sleep_spin_cnt); /* actually terminated by the return three lines above */
@@ -984,7 +996,7 @@ void mutex_salvage(gd_region *reg)
{ /* Release the COMPSWAP lock AFTER setting cnl->in_crit to 0 as an assert in
* grab_crit (checking that cnl->in_crit is 0) relies on this order.
*/
- send_msg_csa(CSA_ARG(csa) VARLSTCNT(5) ERR_MUTEXFRCDTERM, 3, holder_pid, REG_LEN_STR(reg));
+ send_msg_csa(CSA_ARG(csa) VARLSTCNT(5) ERR_MUTEXFRCDTERM, 3, holder_pid, DB_LEN_STR(reg));
cnl->in_crit = 0;
/* Mutex crash repaired, want to do write cache recovery, in case previous holder of crit had set
* some cr->in_cw_set to a non-zero value. Not doing cache recovery could cause incorrect
@@ -992,12 +1004,13 @@ void mutex_salvage(gd_region *reg)
* Take care not to do it for jnlpool (csa->hdr is NULL in that case) which has no concept of a db cache.
*/
csd = csa->hdr;
- assert((NULL != csd) || (csa == &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs));
+ assert((NULL != csd) || (NULL != jnlpool));
+ assert((NULL != csd) || (csa == &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs));
if (NULL == csd)
{ /* This is a jnlpool. Check if a process in t_end/tp_tend was killed BEFORE
* it incremented jpl->jnl_seqno. If so, undo any changes done in UPDATE_JPL_RSRV_WRITE_ADDR.
*/
- jpl = jnlpool.jnlpool_ctl;
+ jpl = jnlpool->jnlpool_ctl;
assert(NULL != jpl);
index1 = jpl->phase2_commit_index1;
index2 = jpl->phase2_commit_index2;
@@ -1070,7 +1083,8 @@ void mutex_salvage(gd_region *reg)
* ----------------------------------------------------------------
*/
start_freeaddr = lastJbufCmt->start_freeaddr;
- if ((index1 == orig_index2) || (lastJbufCmt->process_id != holder_pid))
+ if ((index1 == orig_index2) || (lastJbufCmt->process_id != holder_pid)
+ || (lastJbufCmt->curr_tn != csd->trans_hist.curr_tn))
{ /* CMT04 < KILLED <= CMT06.
* Kill could have happened before CMT06 finished so reset things.
* This reset is a no-op if the kill happened even before CMT06 started.
@@ -1191,7 +1205,7 @@ void mutex_salvage(gd_region *reg)
* Take care not to do it for jnlpool which has no concept of a db cache.
* In that case csa->hdr is NULL so check accordingly.
*/
- assert((NULL != csa->hdr) || (csa == &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs));
+ assert((NULL != csa->hdr) || (jnlpool && (csa == &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs)));
if (mutex_salvaged && (NULL != csa->hdr))
{
SET_TRACEABLE_VAR(cnl->wc_blocked, TRUE);
diff --git a/sr_unix/ojstartchild.c b/sr_unix/ojstartchild.c
index 86c2dca..6821d88 100644
--- a/sr_unix/ojstartchild.c
+++ b/sr_unix/ojstartchild.c
@@ -57,6 +57,7 @@
#include "zshow.h"
#include "zwrite.h"
#include "gtm_maxstr.h"
+#include "getzdir.h"
GBLREF bool jobpid; /* job's output files should have the pid appended to them. */
GBLREF volatile boolean_t ojtimeout;
@@ -464,7 +465,8 @@ int ojstartchild (job_params_type *jparms, int argcnt, boolean_t *non_exit_retur
job_errno = errno;
DOWRITERC(pipe_fds[1], &job_errno, SIZEOF(errno), pipe_status);
UNDERSCORE_EXIT(joberr);
- }
+ } else /* update dollar_zdir with the new current working directory */
+ getzdir();
}
/* attempt to open output files. This also redirects stdin/out/err, so any error messages by this process during the
@@ -473,7 +475,6 @@ int ojstartchild (job_params_type *jparms, int argcnt, boolean_t *non_exit_retur
if ((status = ojchildioset(jparms)))
{
DOWRITERC(pipe_fds[1], &job_errno, SIZEOF(job_errno), pipe_status);
- assert(FALSE);
UNDERSCORE_EXIT(status);
}
/* Record the fact that this process is interested in the relinkctl files inherited from the parent by
diff --git a/sr_unix/op_fngetjpi.c b/sr_unix/op_fngetjpi.c
index 67250bc..e827b39 100755
--- a/sr_unix/op_fngetjpi.c
+++ b/sr_unix/op_fngetjpi.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -84,10 +84,10 @@ void op_fngetjpi(mint jpid, mval *kwd, mval *ret)
* (ii) also, the current comparison relies on kwd->str.len which means a C would imply CPUTIM instead of CSTIME
* or CUTIME this ambiguity should probably be removed by asking for an exact match of the full keyword
*/
- while ((0 != memcmp(upcase, key[keywd_indx], kwd->str.len)) && keywd_indx < MAX_KEY)
+ while (key[keywd_indx][0] && (0 != STRNCMP_STR(upcase, key[keywd_indx], kwd->str.len)))
keywd_indx++;
- if( keywd_indx == MAX_KEY )
+ if( !key[keywd_indx][0] )
{
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_BADJPIPARAM, 2, kwd->str.len, kwd->str.addr);
}
diff --git a/sr_unix/op_fnzpeek.c b/sr_unix/op_fnzpeek.c
index d641306..3c5f0d0 100644
--- a/sr_unix/op_fnzpeek.c
+++ b/sr_unix/op_fnzpeek.c
@@ -72,15 +72,15 @@ typedef enum
PO_JBFREG /* 15 Journal buffer information - jnl_buffer_ptr_t */
} zpeek_mnemonic;
-GBLREF boolean_t created_core;
-GBLREF sigset_t blockalrm;
-GBLREF gd_addr *gd_header;
-GBLREF boolean_t pool_init;
-GBLREF boolean_t jnlpool_init_needed;
-GBLREF jnlpool_addrs jnlpool;
-GBLREF recvpool_addrs recvpool;
+GBLREF boolean_t created_core;
+GBLREF sigset_t blockalrm;
+GBLREF gd_addr *gd_header;
+GBLREF int pool_init;
+GBLREF boolean_t jnlpool_init_needed;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF recvpool_addrs recvpool;
#ifdef DEBUG
-GBLREF int process_exiting;
+GBLREF int process_exiting;
#endif
LITREF unsigned char lower_to_upper_table[];
@@ -409,7 +409,7 @@ CONDITION_HANDLER(op_fnzpeek_getpool_ch)
STATICFNDEF boolean_t op_fnzpeek_attach_jnlpool(void)
{
ESTABLISH_RET(op_fnzpeek_getpool_ch, FALSE);
- jnlpool_init(GTMRELAXED, FALSE, NULL); /* Attach to journal pool */
+ jnlpool_init(GTMRELAXED, FALSE, NULL, NULL); /* Attach to journal pool */
REVERT;
return pool_init;
}
@@ -549,7 +549,7 @@ void op_fnzpeek(mval *structid, int offset, int len, mval *format, mval *ret)
*/
if ((PO_GDRREG != mnemonic_opcode) && !r_ptr->open)
{
- gv_init_reg(r_ptr);
+ gv_init_reg(r_ptr, NULL);
if (!r_ptr->open)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_BADZPEEKARG, 2,
RTS_ERROR_LITERAL("mnemonic argument (region name could not be opened)"));
@@ -607,7 +607,7 @@ void op_fnzpeek(mval *structid, int offset, int len, mval *format, mval *ret)
case PO_NLREPL:
case PO_RIHREPL:
/* Make sure jnlpool_addrs are availble */
- if (!REPL_INST_AVAILABLE)
+ if (!REPL_INST_AVAILABLE(NULL))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_ZPEEKNORPLINFO);
if (!pool_init)
{
@@ -618,19 +618,19 @@ void op_fnzpeek(mval *structid, int offset, int len, mval *format, mval *ret)
switch(mnemonic_opcode)
{
case PO_GLFREPL: /* arryidx set by option processing */
- zpeekadr = (jnlpool.gtmsrc_lcl_array + arryidx);
+ zpeekadr = (jnlpool->gtmsrc_lcl_array + arryidx);
break;
case PO_GSLREPL: /* arryidx set by option processing */
- zpeekadr = (jnlpool.gtmsource_local_array + arryidx);
+ zpeekadr = (jnlpool->gtmsource_local_array + arryidx);
break;
case PO_NLREPL:
- zpeekadr = (&FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs)->nl;
+ zpeekadr = (&FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs)->nl;
break;
case PO_JPCREPL:
- zpeekadr = jnlpool.jnlpool_ctl;
+ zpeekadr = jnlpool->jnlpool_ctl;
break;
case PO_RIHREPL:
- zpeekadr = jnlpool.repl_inst_filehdr;
+ zpeekadr = jnlpool->repl_inst_filehdr;
break;
default:
assert(FALSE);
@@ -641,7 +641,7 @@ void op_fnzpeek(mval *structid, int offset, int len, mval *format, mval *ret)
case PO_UPLREPL:
case PO_UHCREPL:
/* Make sure recvpool_addrs are available */
- if (!REPL_INST_AVAILABLE)
+ if (!REPL_INST_AVAILABLE(NULL))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_ZPEEKNORPLINFO);
if (NULL == recvpool.recvpool_ctl)
{
diff --git a/sr_unix/op_job.c b/sr_unix/op_job.c
index 8bf72fb..45afbfd 100755
--- a/sr_unix/op_job.c
+++ b/sr_unix/op_job.c
@@ -50,6 +50,7 @@
#include "setterm.h"
#include "getzposition.h"
#include "iosocketdef.h"
+#include "min_max.h"
#ifdef DEBUG
#include "have_crit.h" /* for the TPNOTACID_CHECK macro */
#endif
diff --git a/sr_unix/op_zlink.c b/sr_unix/op_zlink.c
index 31de034..1124dbb 100755
--- a/sr_unix/op_zlink.c
+++ b/sr_unix/op_zlink.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -95,7 +95,7 @@ typedef enum
# define CHECK_OBJECT_HISTORY(OBJPATH, OBJDIR, RECENT_ZHIST_PARM)
#endif
-GBLREF spdesc stringpool;
+GBLREF spdesc rts_stringpool, stringpool;
GBLREF command_qualifier glb_cmd_qlf, cmd_qlf;
GBLREF mval dollar_zsource;
GBLREF int object_file_des;
@@ -442,6 +442,7 @@ void op_zlink (mval *v, mval *quals)
}
zlcompile(srcnamelen, (uchar_ptr_t)srcnamebuf);
assert(FD_INVALID == object_file_des); /* zlcompile() should have driven obj_code() which closes object */
+ assertpro(FALSE == TREF(compile_time) && (stringpool.base == rts_stringpool.base)); /* sb back in rts */
if ((SRC == type) && !(qlf & CQ_OBJECT))
return;
OPEN_OBJECT_FILE(objnamebuf, O_RDONLY, object_file_des);
@@ -462,6 +463,7 @@ void op_zlink (mval *v, mval *quals)
cmd_qlf.object_file.str.len = objnamelen;
}
zlcompile(srcnamelen, (uchar_ptr_t)srcnamebuf);
+ assertpro(FALSE == TREF(compile_time) && (stringpool.base == rts_stringpool.base)); /* sb back in rts */
if (!(cmd_qlf.qlf & CQ_OBJECT) && (SRC != type))
{
cmd_qlf.qlf = glb_cmd_qlf.qlf;
diff --git a/sr_unix/op_ztrigger.c b/sr_unix/op_ztrigger.c
index cc16c57..d4c9dde 100644
--- a/sr_unix/op_ztrigger.c
+++ b/sr_unix/op_ztrigger.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2010-2016 Fidelity National Information *
+ * Copyright (c) 2010-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -62,6 +62,8 @@
#include "have_crit.h"
#include "gvcst_protos.h"
#include "gtmimagename.h"
+#include "is_file_identical.h"
+#include "anticipatory_freeze.h"
LITREF mval literal_null;
@@ -83,7 +85,7 @@ GBLREF unsigned int t_tries;
GBLREF unsigned char t_fail_hist[CDB_MAX_TRIES];
GBLREF boolean_t need_kip_incr;
GBLREF uint4 update_trans;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF sgmnt_addrs *kip_csa;
GBLREF boolean_t skip_dbtriggers; /* see gbldefs.c for description of this global */
GBLREF int tprestart_state;
@@ -152,7 +154,7 @@ void op_ztrigger(void)
*/
ztwormhole_used = FALSE;
}
- JNLPOOL_INIT_IF_NEEDED(csa, csd, cnl);
+ JNLPOOL_INIT_IF_NEEDED(csa, csd, cnl, SCNDDBNOUPD_CHECK_TRUE);
assert(('\0' != gv_currkey->base[0]) && gv_currkey->end);
DBG_CHECK_GVTARGET_GVCURRKEY_IN_SYNC(CHECK_CSA_TRUE);
T_BEGIN_SETORKILL_NONTP_OR_TP(ERR_GVZTRIGFAIL);
diff --git a/sr_unix/peekbyname.mpt b/sr_unix/peekbyname.mpt
index 442db6a..007ba82 100755
--- a/sr_unix/peekbyname.mpt
+++ b/sr_unix/peekbyname.mpt
@@ -43,6 +43,7 @@
set anindexval="an index value",aregname="a region name"
set first=$piece(field,".",1)
set rest=$piece(field,".",2,$length(field,"."))
+ if ("sgmnt_data"=first)&("freeze_online"=rest) set first="node_local" ; cough, cough, kludge, kludge - temporarily hide move
do:""=rest error("NOFIELD")
set digits=$select("x86"=$p($zver," ",4):8,1:16)
set regindex=$get(regindex)
diff --git a/sr_unix/pinentry.m b/sr_unix/pinentry.m
index 8d84689..ef478b9 100644
--- a/sr_unix/pinentry.m
+++ b/sr_unix/pinentry.m
@@ -36,16 +36,18 @@ pinentry; Custom pinentry that returns an unobfuscated password if $gtm_passwd i
. write "D "
. write clrpwds,!
. write "OK",!
+ . set $etrap="zgoto 0"
. zhalt 0
; Since this routine only responds to GETPIN, issue an error if it did not receive that command,
; letting pinentry-gtm.sh execute the default pinentry
+ set $etrap="zgoto 0"
zhalt 1
; The error handler's primary function is to exit with error status so that the calling pinentry-gtm.sh
; can execute the default pinentry program. If $gtm_pinentry_log is defined, the routine will dump all
; status. Note that the locals are all killed prior to dumping status
error kill
- new $etrap set $etrap="zhalt +$zstatus"
+ new $etrap set $etrap="set $etrap=""zgoto 0"" zhalt +$zstatus"
new i,info
set errmsg="%GTM-E-PINENTRYERR, Custom pinentry program failure. "_$zstatus_"; from "_$zdirectory
if $zsyslog(errmsg)
@@ -61,5 +63,6 @@ error kill
. write !,"Loaded external calls:",! zshow "C"
. write "Device parameters:",! zshow "D"
. close pinlog
+ set $etrap="zgoto 0"
zhalt +$zstatus
quit
diff --git a/sr_unix/recvpool_init.c b/sr_unix/recvpool_init.c
old mode 100755
new mode 100644
index 57a0b4e..5f6f78c
--- a/sr_unix/recvpool_init.c
+++ b/sr_unix/recvpool_init.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -49,7 +49,8 @@
#include "repl_instance.h"
#include "util.h" /* For OUT_BUFF_SIZE */
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF recvpool_addrs recvpool;
GBLREF int recvpool_shmid;
GBLREF uint4 process_id;
@@ -57,6 +58,8 @@ GBLREF gtmrecv_options_t gtmrecv_options;
GBLREF gd_region *gv_cur_region;
GBLREF repl_conn_info_t *this_side, *remote_side;
GBLREF int4 strm_index;
+GBLREF char repl_instfilename[MAX_FN_LEN + 1]; /* save first instance */
+GBLREF char repl_inst_name[MAX_INSTNAME_LEN]; /* for syslog */
LITREF char gtm_release_name[];
LITREF int4 gtm_release_name_len;
@@ -92,6 +95,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
unix_db_info *udi;
unsigned int full_len;
sgmnt_addrs *repl_csa;
+ jnlpool_addrs_ptr_t tmp_jnlpool, save_jnlpool;
pthread_mutexattr_t write_updated_ctl_attr;
pthread_condattr_t write_updated_attr;
DEBUG_ONLY(int4 semval;)
@@ -99,7 +103,23 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
memset(machine_name, 0, SIZEOF(machine_name));
if (GETHOSTNAME(machine_name, MAX_MCNAMELEN, status))
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_TEXT, 2, RTS_ERROR_TEXT("Unable to get the hostname"), errno);
- if (NULL == jnlpool.jnlpool_dummy_reg)
+ /* rts_error should be issued by repl_inst_get_name */
+ assertpro(repl_inst_get_name(instfilename, &full_len, MAX_FN_LEN + 1, issue_rts_error, NULL));
+ /* look through jnlpool_head list for matching instfilename */
+ for (tmp_jnlpool = jnlpool_head; tmp_jnlpool && !tmp_jnlpool->recv_pool; tmp_jnlpool = tmp_jnlpool->next)
+ {
+ if (NULL != tmp_jnlpool->jnlpool_dummy_reg)
+ {
+ reg = tmp_jnlpool->jnlpool_dummy_reg;
+ if ((reg->dyn.addr->fname_len == full_len) && !STRCMP(reg->dyn.addr->fname, instfilename))
+ {
+ tmp_jnlpool->recv_pool = TRUE;
+ break;
+ }
+ }
+ }
+ assert(!tmp_jnlpool || !tmp_jnlpool->recv_pool || (NULL != tmp_jnlpool->jnlpool_dummy_reg));
+ if ((NULL == tmp_jnlpool) || (NULL == tmp_jnlpool->jnlpool_dummy_reg))
{
r_save = gv_cur_region;
mu_gv_cur_reg_init();
@@ -109,32 +129,37 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
} else
{ /* Have already attached to the journal pool. Use the journal pool region for the receive pool as well as they
* both correspond to one and the same file (replication instance file). We need to do this to ensure that an
- * "ftok_sem_get" done with either "jnlpool.jnlpool_dummy_reg" region or "recvpool.recvpool_dummy_reg" region
+ * "ftok_sem_get" done with either "jnlpool->jnlpool_dummy_reg" region or "recvpool.recvpool_dummy_reg" region
* locks the same entity.
* Should have already attached to journal pool only for receiver server startup or shutdown or $ZPEEK
* or update process. Assert that.
*/
assert(gtmrecv_options.start || gtmrecv_options.shut_down || (GTMZPEEK == pool_user) || (UPDPROC == pool_user));
- reg = recvpool.recvpool_dummy_reg = jnlpool.jnlpool_dummy_reg;
+ reg = recvpool.recvpool_dummy_reg = tmp_jnlpool->jnlpool_dummy_reg;
+ tmp_jnlpool->recv_pool = TRUE;
}
udi = FILE_INFO(reg);
- /* rts_error should be issued by repl_inst_get_name */
- assertpro(repl_inst_get_name(instfilename, &full_len, MAX_FN_LEN + 1, issue_rts_error));
- assert((recvpool.recvpool_dummy_reg != jnlpool.jnlpool_dummy_reg)
- || (reg->dyn.addr->fname_len == full_len) && !STRCMP(reg->dyn.addr->fname, instfilename));
- if (recvpool.recvpool_dummy_reg != jnlpool.jnlpool_dummy_reg)
+ assert((tmp_jnlpool && (recvpool.recvpool_dummy_reg != tmp_jnlpool->jnlpool_dummy_reg))
+ || (!tmp_jnlpool && (NULL != recvpool.recvpool_dummy_reg)
+ || ((reg->dyn.addr->fname_len == full_len) && !STRCMP(reg->dyn.addr->fname, instfilename))));
+ if ((NULL == tmp_jnlpool) || (recvpool.recvpool_dummy_reg != tmp_jnlpool->jnlpool_dummy_reg))
{ /* Fill in fields only if this is the first time this process is opening the replication instance file */
memcpy((char *)reg->dyn.addr->fname, instfilename, full_len);
reg->dyn.addr->fname_len = full_len;
udi->fn = (char *)reg->dyn.addr->fname;
}
+ save_jnlpool = jnlpool;
+ jnlpool = tmp_jnlpool; /* repl_inst_read/write and ftok_sem_get/lock use jnlpool */
/* First grab ftok semaphore for replication instance file. Once we have it locked, no one else can start up
* or, shut down replication for this instance. We will release ftok semaphore when initialization is done.
*/
- if (!ftok_sem_get(recvpool.recvpool_dummy_reg, TRUE, REPLPOOL_ID, FALSE, &ftok_counter_halted))
+ if (!ftok_sem_get(recvpool.recvpool_dummy_reg, TRUE, REPLPOOL_ID, FALSE, &ftok_counter_halted)) /* uses jnlpool */
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_RECVPOOLSETUP);
+ }
save_errno = errno;
- repl_inst_read(instfilename, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
+ repl_inst_read(instfilename, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr)); /* uses jnlpool */
/* At this point, we might not have yet attached to the jnlpool so we do not know if the ftok counter got halted
* previously or not. So be safe and assume it has halted in case the jnlpool_shmid indicates it is up and running.
* This means we might not delete the ftok semaphore in some cases of error codepaths but it should be rare
@@ -148,16 +173,19 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
if (GTMRECV != pool_user || !gtmrecv_startup)
{
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_NORECVPOOL, 2, full_len, udi->fn);
}
new_ipc = TRUE;
assert((int)NUM_SRC_SEMS == (int)NUM_RECV_SEMS);
if (INVALID_SEMID == (udi->semid = init_sem_set_recvr(IPC_PRIVATE, NUM_RECV_SEMS, RWDALL | IPC_CREAT)))
{
+ save_errno = errno;
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0,
ERR_TEXT, 2,
- RTS_ERROR_LITERAL("Error creating recv pool"), errno);
+ RTS_ERROR_LITERAL("Error creating recv pool"), save_errno);
}
/* Following will set semaphore RECV_ID_SEM value as GTM_ID. In case we have orphaned semaphore for some reason,
* mupip rundown will be able to identify GTM semaphores checking the value and can remove.
@@ -168,6 +196,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
save_errno = errno;
remove_sem_set(RECV); /* Remove what we created */
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with recvpool semctl"), save_errno);
}
@@ -180,6 +209,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
save_errno = errno;
remove_sem_set(RECV); /* Remove what we created */
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with recvpool semctl"), save_errno);
}
@@ -191,6 +221,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
{
save_errno = errno;
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Error with semctl on Receive Pool SEMID (%d)",
repl_instance.recvpool_semid);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLREQROLLBACK, 2, full_len, udi->fn,
@@ -199,6 +230,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
else if (semarg.buf->sem_ctime != repl_instance.recvpool_semid_ctime)
{
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Creation time for Receive Pool SEMID (%d) is %d; Expected %d",
repl_instance.recvpool_semid, semarg.buf->sem_ctime, repl_instance.recvpool_semid_ctime);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLREQROLLBACK, 2, full_len, udi->fn,
@@ -213,9 +245,11 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
status = grab_sem(RECV, RECV_POOL_ACCESS_SEM);
if (SS_NORMAL != status)
{
+ save_errno = errno;
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
- RTS_ERROR_LITERAL("Error with receive pool semaphores"), errno);
+ RTS_ERROR_LITERAL("Error with receive pool semaphores"), save_errno);
}
udi->grabbed_access_sem = TRUE;
udi->counter_acc_incremented = TRUE;
@@ -250,6 +284,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
save_errno = errno;
REMOVE_OR_RELEASE_SEM(new_ipc);
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
SNPRINTF(scndry_msg, OUT_BUFF_SIZE, "Error with shmctl on Receive Pool SHMID (%d)", repl_instance.recvpool_shmid);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_REPLREQROLLBACK, 2, full_len, udi->fn,
ERR_TEXT, 2, LEN_AND_STR(scndry_msg), save_errno);
@@ -267,6 +302,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
{
REMOVE_OR_RELEASE_SEM(new_ipc);
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_NORECVPOOL, 2, full_len, udi->fn);
}
shm_created = FALSE;
@@ -278,6 +314,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
save_errno = errno;
remove_sem_set(RECV); /* Remove what we created */
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with receive pool creation"), save_errno);
}
@@ -289,6 +326,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
RTS_ERROR_LITERAL("Error removing recvpool "), errno);
remove_sem_set(RECV); /* Remove what we created */
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with recvpool shmctl"), save_errno);
}
@@ -307,6 +345,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with receive pool shmat"), save_errno);
}
@@ -332,6 +371,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(6) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Receive pool has not been initialized"));
}
@@ -348,32 +388,51 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
assert(0 == offsetof(recvpool_ctl_struct, recvpool_id));
/* ensure that the pool identifier is at the top of the pool */
recvpool.recvpool_ctl->recvpool_id.pool_type = RECVPOOL_SEGMENT;
- GTMRECV_CLEAR_CACHED_HISTINFO(recvpool.recvpool_ctl, jnlpool, jnlpool.jnlpool_ctl, INSERT_STRM_HISTINFO_TRUE);
+ assert(NULL != jnlpool);
+ GTMRECV_CLEAR_CACHED_HISTINFO(recvpool.recvpool_ctl, jnlpool, INSERT_STRM_HISTINFO_TRUE);
/* Initialize mutex/cond for notifying update process of new writes */
status = pthread_mutexattr_init(&write_updated_ctl_attr);
if (0 != status)
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_mutexattr_init"), CALLFROM, status, 0);
+ }
status = pthread_mutexattr_setpshared(&write_updated_ctl_attr, PTHREAD_PROCESS_SHARED);
if (0 != status)
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_mutexattr_setpshared"), CALLFROM, status, 0);
+ }
status = pthread_mutex_init(&recvpool.recvpool_ctl->write_updated_ctl, &write_updated_ctl_attr);
if (0 != status)
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_mutex_init"), CALLFROM, status, 0);
+ }
status = pthread_condattr_init(&write_updated_attr);
if (0 != status)
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_condattr_init"), CALLFROM, status, 0);
+ }
status = pthread_condattr_setpshared(&write_updated_attr, PTHREAD_PROCESS_SHARED);
if (0 != status)
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_condattr_setpshared"), CALLFROM, status, 0);
+ }
status = pthread_cond_init(&recvpool.recvpool_ctl->write_updated, &write_updated_attr);
if (0 != status)
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_SYSCALL, 5,
LEN_AND_LIT("pthread_cond_init"), CALLFROM, status, 0);
+ }
this_side = &recvpool.recvpool_ctl->this_side;
this_side->proto_ver = REPL_PROTO_VER_THIS;
this_side->jnl_ver = JNL_VER_THIS;
@@ -395,9 +454,9 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
recvpool.upd_proc_local->read_jnl_seqno = 0;
recvpool.upd_proc_local->read = 0;
recvpool.gtmrecv_local->recv_serv_pid = process_id;
- assert(NULL != jnlpool.jnlpool_ctl);
- if (NULL != jnlpool.jnlpool_ctl)
- jnlpool.jnlpool_ctl->gtmrecv_pid = process_id;
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl));
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
+ jnlpool->jnlpool_ctl->gtmrecv_pid = process_id;
recvpool.gtmrecv_local->lastrecvd_time = -1;
recvpool.gtmrecv_local->restart = GTMRECV_NO_RESTART;
recvpool.gtmrecv_local->statslog = FALSE;
@@ -406,7 +465,7 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
STRCPY(recvpool.gtmrecv_local->filter_cmd, gtmrecv_options.filter_cmd);
recvpool.gtmrecv_local->statslog_file[0] = '\0';
/* recvpool.gtmrecv_local->remote_side will be initialized at connection establishment time */
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert(NULL != jnlpool->repl_inst_filehdr);
recvpool.gtmrecv_local->strm_index = strm_index;
/* The following fields will be initialized in gtmrecv.c
* recvpool.gtmrecv_local->updateresync
@@ -425,17 +484,18 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
* Also update the instance file header section in the journal pool with the recvpool sem/shm ids.
* Before updating jnlpool fields, ensure the journal pool lock is grabbed.
*/
- assert(NULL != jnlpool.repl_inst_filehdr);
- DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;)
+ assert((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr));
+ assert(NULL != jnlpool->jnlpool_dummy_reg);
+ DEBUG_ONLY(repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;)
assert(!repl_csa->hold_onto_crit); /* so it is ok to invoke "grab_lock" and "rel_lock" unconditionally */
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- jnlpool.repl_inst_filehdr->recvpool_shmid = udi->shmid;
- jnlpool.repl_inst_filehdr->recvpool_semid = udi->semid;
- jnlpool.repl_inst_filehdr->recvpool_shmid_ctime = udi->gt_shm_ctime;
- jnlpool.repl_inst_filehdr->recvpool_semid_ctime = udi->gt_sem_ctime;
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ jnlpool->repl_inst_filehdr->recvpool_shmid = udi->shmid;
+ jnlpool->repl_inst_filehdr->recvpool_semid = udi->semid;
+ jnlpool->repl_inst_filehdr->recvpool_shmid_ctime = udi->gt_shm_ctime;
+ jnlpool->repl_inst_filehdr->recvpool_semid_ctime = udi->gt_sem_ctime;
/* Flush the file header to disk so future callers of "jnlpool_init" see the jnlpool_semid and jnlpool_shmid */
- repl_inst_flush_filehdr();
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ repl_inst_flush_filehdr(); /* uses jnlpool */
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
/* Release control lockout and ftok semaphore now that the receive pool has been attached.
* The only exception is receiver server shutdown command. In this case, all these locks will be released
@@ -448,7 +508,10 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
if (!ftok_sem_release(recvpool.recvpool_dummy_reg, FALSE, FALSE))
+ {
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_RECVPOOLSETUP);
+ }
}
/* If receiver server startup, grab the options semaphore to lock out checkhealth, statslog or changelog.
* Ideally one should grab this before releasing the ftok and access semaphore but the issue with this is that
@@ -467,8 +530,15 @@ void recvpool_init(recvpool_user pool_user, boolean_t gtmrecv_startup)
udi->grabbed_access_sem = FALSE;
udi->counter_acc_incremented = FALSE;
ftok_sem_release(recvpool.recvpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ jnlpool = save_jnlpool;
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_RECVPOOLSETUP, 0, ERR_TEXT, 2,
RTS_ERROR_LITERAL("Error with receive pool options semaphore"), save_errno);
}
+ jnlpool = save_jnlpool;
+ if (('\0' == repl_inst_name[0]) && ('\0' != repl_instfilename[0]))
+ { /* fill in instance name for syslog if right instance file name and first */
+ if (0 == STRCMP(repl_instfilename, instfilename))
+ memcpy(repl_inst_name, repl_instance.inst_info.this_instname, MAX_INSTNAME_LEN);
+ }
return;
}
diff --git a/sr_unix/rel_crit.c b/sr_unix/rel_crit.c
index d649e16..2677873 100755
--- a/sr_unix/rel_crit.c
+++ b/sr_unix/rel_crit.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -11,7 +12,8 @@
#include "mdef.h"
-#include <signal.h>
+#include "gtm_signal.h" /* for VSIG_ATOMIC_T type */
+
#include <errno.h>
#include "gdsroot.h"
@@ -57,7 +59,7 @@ void rel_crit(gd_region *reg)
assert(0 == crit_count);
crit_count++; /* prevent interrupts */
assert(csa->nl->in_crit == process_id || csa->nl->in_crit == 0);
- CRIT_TRACE(crit_ops_rw); /* see gdsbt.h for comment on placement */
+ CRIT_TRACE(csa, crit_ops_rw); /* see gdsbt.h for comment on placement */
csa->nl->in_crit = 0;
DEBUG_ONLY(locknl = csa->nl;) /* for DEBUG_ONLY LOCK_HIST macro */
status = mutex_unlockw(reg, crash_count);
@@ -67,19 +69,17 @@ void rel_crit(gd_region *reg)
csa->now_crit = FALSE;
crit_count = 0;
if (status == cdb_sc_critreset)
- rts_error(VARLSTCNT(4) ERR_CRITRESET, 2, REG_LEN_STR(reg));
+ rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_CRITRESET, 2, REG_LEN_STR(reg));
else
{
assert(status == cdb_sc_dbccerr);
- rts_error(VARLSTCNT(4) ERR_DBCCERR, 2, REG_LEN_STR(reg));
+ rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_DBCCERR, 2, REG_LEN_STR(reg));
}
return;
}
crit_count = 0;
} else
- {
- CRIT_TRACE(crit_ops_nocrit);
- }
+ CRIT_TRACE(csa, crit_ops_nocrit);
/* Now that crit for THIS region is released, check if deferred signal/exit handling can be done and if so do it */
DEFERRED_EXIT_HANDLING_CHECK;
if ((DEFER_SUSPEND == suspend_status) && OK_TO_INTERRUPT)
diff --git a/sr_unix/rel_lock.c b/sr_unix/rel_lock.c
index db62d54..15535d1 100755
--- a/sr_unix/rel_lock.c
+++ b/sr_unix/rel_lock.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -11,8 +12,9 @@
#include "mdef.h"
+#include "gtm_signal.h" /* for VSIG_ATOMIC_T type */
+
#include <errno.h>
-#include <signal.h> /* for VSIG_ATOMIC_T type */
#include "gdsroot.h"
#include "gtm_facility.h"
@@ -60,7 +62,7 @@ void rel_lock(gd_region *reg)
assert(0 == crit_count);
crit_count++; /* prevent interrupts */
assert(csa->nl->in_crit == process_id || csa->nl->in_crit == 0);
- CRIT_TRACE(crit_ops_rw); /* see gdsbt.h for comment on placement */
+ CRIT_TRACE(csa, crit_ops_rw); /* see gdsbt.h for comment on placement */
csa->nl->in_crit = 0;
DEBUG_ONLY(locknl = csa->nl;) /* for DEBUG_ONLY LOCK_HIST macro */
/* As of 10/07/98, crashcnt field in mutex_struct is not changed by any function for the dummy region */
@@ -71,19 +73,17 @@ void rel_lock(gd_region *reg)
csa->now_crit = FALSE;
crit_count = 0;
if (status == cdb_sc_critreset)
- rts_error(VARLSTCNT(4) ERR_CRITRESET, 2, REG_LEN_STR(reg));
+ rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_CRITRESET, 2, REG_LEN_STR(reg));
else
{
assert(status == cdb_sc_dbccerr);
- rts_error(VARLSTCNT(4) ERR_DBCCERR, 2, REG_LEN_STR(reg));
+ rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_DBCCERR, 2, REG_LEN_STR(reg));
}
return;
}
crit_count = 0;
} else
- {
- CRIT_TRACE(crit_ops_nocrit);
- }
+ CRIT_TRACE(csa, crit_ops_nocrit);
/* Now that crit for THIS region is released, check if deferred signal/exit handling can be done and if so do it */
DEFERRED_EXIT_HANDLING_CHECK;
if ((DEFER_SUSPEND == suspend_status) && OK_TO_INTERRUPT)
diff --git a/sr_unix/rel_quant.c b/sr_unix/rel_quant.c
index 0bcfb13..6ff2b6e 100755
--- a/sr_unix/rel_quant.c
+++ b/sr_unix/rel_quant.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2012 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -15,16 +16,10 @@
#include "gtm_unistd.h"
#include "rel_quant.h"
+#include "gtm_rel_quant.h"
/* relinquish the processor to the next process in the scheduling queue */
void rel_quant(void)
{
-# if defined(_AIX) || (defined(sparc))
- /* For pSeries and SPARC, the "yield" system call seems a better match with what we want to do (yields to ALL
- * processes instead of just those on the local processor queue.
- */
- yield();
-# else
- sched_yield(); /* we do not need to link with libpthreads, so the usage of pthread_yield() is avoided where possible */
-# endif
+ RELQUANT;
}
diff --git a/sr_unix/repl_inst_create.c b/sr_unix/repl_inst_create.c
index 0e2e887..7d3a990 100755
--- a/sr_unix/repl_inst_create.c
+++ b/sr_unix/repl_inst_create.c
@@ -84,7 +84,7 @@ void repl_inst_create(void)
uint4 status2;
jnl_tm_t now;
- assertpro(repl_inst_get_name(inst_fn, &inst_fn_len, MAX_FN_LEN + 1, issue_rts_error)); /* rts_error should prevent
+ assertpro(repl_inst_get_name(inst_fn, &inst_fn_len, MAX_FN_LEN + 1, issue_rts_error, NULL)); /* rts_error should prevent
* return if there is a problem.
*/
/* Although the maximum length of an instance name is MAX_INSTNAME_LEN-1 characters, the input buffer needs to hold a lot
diff --git a/sr_unix/repl_inst_dump.c b/sr_unix/repl_inst_dump.c
index 2bb99a1..9aa1200 100644
--- a/sr_unix/repl_inst_dump.c
+++ b/sr_unix/repl_inst_dump.c
@@ -841,7 +841,7 @@ void repl_inst_dump_gtmsourcelocal(gtmsource_local_ptr_t gtmsourcelocal_ptr)
PRINT_OFFSET_PREFIX(offsetof(gtmsource_local_struct, read_state), SIZEOF(gtmsourcelocal_ptr->read_state));
string = (READ_POOL == gtmsourcelocal_ptr->read_state) ? "POOL" :
((READ_FILE == gtmsourcelocal_ptr->read_state) ? "FILE" : "UNKNOWN");
- if (MEMCMP_LIT(string, "UNKNOWN"))
+ if (STRNCMP_LIT(string, "UNKNOWN"))
util_out_print( PREFIX_SOURCELOCAL "Currently Reading from !R21AZ", TRUE, idx, string);
else
{
diff --git a/sr_unix/repl_inst_ftok_counter_halted.c b/sr_unix/repl_inst_ftok_counter_halted.c
index 3150fcf..2b8886d 100644
--- a/sr_unix/repl_inst_ftok_counter_halted.c
+++ b/sr_unix/repl_inst_ftok_counter_halted.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2016 Fidelity National Information *
+ * Copyright (c) 2016-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -28,7 +28,7 @@
#include "ftok_sems.h"
#include "repl_inst_ftok_counter_halted.h"
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
error_def(ERR_JNLPOOLSETUP);
error_def(ERR_NOMORESEMCNT);
@@ -40,21 +40,23 @@ error_def(ERR_TEXT);
void repl_inst_ftok_counter_halted(unix_db_info *udi)
{
assert(udi->grabbed_ftok_sem); /* this ensures we have a lock before we modify the instance file header */
- assert(NULL != jnlpool.jnlpool_ctl);
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
- assert(!jnlpool.jnlpool_ctl->ftok_counter_halted);
- if (!jnlpool.repl_inst_filehdr->qdbrundown)
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{
- rel_lock(jnlpool.jnlpool_dummy_reg);
- if (udi->grabbed_access_sem)
- rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
- udi->grabbed_access_sem = FALSE;
- udi->counter_acc_incremented = FALSE;
- ftok_sem_release(jnlpool.jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0,
- ERR_TEXT, 2, RTS_ERROR_LITERAL("Error incrementing the ftok semaphore counter"), ERANGE);
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, ASSERT_NO_ONLINE_ROLLBACK);
+ assert(!jnlpool->jnlpool_ctl->ftok_counter_halted);
+ if (!jnlpool->repl_inst_filehdr->qdbrundown)
+ {
+ rel_lock(jnlpool->jnlpool_dummy_reg);
+ if (udi->grabbed_access_sem)
+ rel_sem_immediate(SOURCE, JNL_POOL_ACCESS_SEM);
+ udi->grabbed_access_sem = FALSE;
+ udi->counter_acc_incremented = FALSE;
+ ftok_sem_release(jnlpool->jnlpool_dummy_reg, udi->counter_ftok_incremented, TRUE);
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_JNLPOOLSETUP, 0,
+ ERR_TEXT, 2, RTS_ERROR_LITERAL("Error incrementing the ftok semaphore counter"), ERANGE);
+ }
+ jnlpool->jnlpool_ctl->ftok_counter_halted = TRUE;
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
- jnlpool.jnlpool_ctl->ftok_counter_halted = TRUE;
- rel_lock(jnlpool.jnlpool_dummy_reg);
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(7) ERR_NOMORESEMCNT, 5, LEN_AND_LIT("ftok"), FILE_TYPE_REPLINST, LEN_AND_STR(udi->fn));
}
diff --git a/sr_unix/repl_instance.c b/sr_unix/repl_instance.c
old mode 100755
new mode 100644
index 47b2ccb..41ed1a2
--- a/sr_unix/repl_instance.c
+++ b/sr_unix/repl_instance.c
@@ -54,11 +54,12 @@
#include "muprec.h"
#include "have_crit.h"
#include "anticipatory_freeze.h"
+#include "gtmimagename.h"
#ifdef __MVS__
#include "gtm_zos_io.h"
#endif
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF recvpool_addrs recvpool;
GBLREF boolean_t in_repl_inst_edit; /* Used by an assert in repl_inst_read/repl_inst_write */
GBLREF boolean_t in_repl_inst_create; /* Used by repl_inst_read/repl_inst_write */
@@ -73,6 +74,8 @@ GBLREF int4 strm_index;
GBLREF boolean_t is_src_server;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
GBLREF boolean_t is_rcvr_server;
+GBLREF char repl_instfilename[];
+GBLREF gd_addr *repl_inst_from_gld;
ZOS_ONLY(error_def(ERR_BADTAG);)
error_def(ERR_LOGTOOLONG);
@@ -97,23 +100,32 @@ error_def(ERR_TEXT);
* fn : repl instance file name it gets
* fn_len: length of fn.
* bufsize: the buffer size caller gives. If exceeded, it trucates file name.
+ * gd_ptr: global directory for extended reference, otherwise NULL.
* Return Value:
- * TRUE, on success
- * FALSE, otherwise.
+ * non NULL, on success - 1 if from gtm_repl_instance, otherwise global directory
+ * NULL, otherwise.
*/
-boolean_t repl_inst_get_name(char *fn, unsigned int *fn_len, unsigned int bufsize, instname_act error_action)
+struct gd_addr_struct *repl_inst_get_name(char *fn, unsigned int *fn_len, unsigned int bufsize, instname_act error_action,
+ struct gd_addr_struct *gd_ptr)
{
char temp_inst_fn[MAX_FN_LEN + 1];
mstr log_nam, trans_name;
+ gd_addr *gd_local;
uint4 ustatus;
int4 status;
- boolean_t ret;
+ boolean_t ret, inst_from_gld;
- log_nam.addr = GTM_REPL_INSTANCE;
- log_nam.len = SIZEOF(GTM_REPL_INSTANCE) - 1;
+ /* check global directory first */
+ gd_local = (NULL == gd_ptr) ? gd_header : (gd_addr *)gd_ptr;
+ SETUP_INST_INFO(gd_local, log_nam, inst_from_gld); /* set log_nam from gld or environment variable */
trans_name.addr = temp_inst_fn;
+ trans_name.len = 0;
ret = FALSE;
GET_INSTFILE_NAME(do_sendmsg_on_log2long, issue_gtm_putmsg);
+ if (inst_from_gld && (SS_NOLOGNAM == status) && (0 != trans_name.len))
+ status = SS_NORMAL;
+ if ((0 == trans_name.len) && (SS_NORMAL == status))
+ status = SS_NOLOGNAM;
if (FALSE == ret)
{
if (issue_rts_error == error_action)
@@ -121,18 +133,34 @@ boolean_t repl_inst_get_name(char *fn, unsigned int *fn_len, unsigned int bufsiz
if (SS_LOG2LONG == status)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_LOGTOOLONG, 3, log_nam.len, log_nam.addr,
SIZEOF(temp_inst_fn) - 1);
- else
+ else if (!inst_from_gld)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_REPLINSTUNDEF);
+ else
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLINSTACC, 2, log_nam.len, log_nam.addr,
+ ERR_TEXT, 2, RTS_ERROR_LITERAL("from global directory"));
} else if (issue_gtm_putmsg == error_action)
{
if (SS_LOG2LONG == status)
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(5) ERR_LOGTOOLONG, 3, log_nam.len, log_nam.addr,
SIZEOF(temp_inst_fn) - 1);
- else
+ else if (!inst_from_gld)
gtm_putmsg_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_REPLINSTUNDEF);
+ else
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLINSTACC, 2, log_nam.len, log_nam.addr,
+ ERR_TEXT, 2, RTS_ERROR_LITERAL("from global directory"));
}
+ } else if ('\0' == repl_instfilename[0])
+ { /* save information from first instance for syslog */
+ memcpy(repl_instfilename, fn, *fn_len + 1); /* include null from get_full_path */
+ if (inst_from_gld)
+ repl_inst_from_gld = gd_local; /* got from global directory */
}
- return ret;
+ if (FALSE == ret)
+ return NULL;
+ else if (inst_from_gld)
+ return gd_local;
+ else
+ return INST_NOT_GLD;
}
/* Description:
@@ -156,7 +184,7 @@ void repl_inst_read(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen)
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
/* Assert that except for MUPIP REPLIC -INSTANCE_CREATE or -EDITINSTANCE or MUPIP FTOK, all callers hold the FTOK semaphore
* on the replication instance file OR the journal pool lock. Note that the instance file might be pointed to by one of the
- * two region pointers "jnlpool.jnlpool_dummy_reg" or "recvpool.recvpool_dummy_reg" depending on whether the journal pool
+ * two region pointers "jnlpool->jnlpool_dummy_reg" or "recvpool.recvpool_dummy_reg" depending on whether the journal pool
* or the receive pool was attached to first by this particular process. If both of them are non-NULL, both the region
* pointers should be identical. This is also asserted below.
* Note: Typically, journal pool lock should have sufficed. However, in certain places like jnlpool_init and recvpool_init,
@@ -165,9 +193,9 @@ void repl_inst_read(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen)
* since it is NOT necessary for ROLLBACK to have a journal pool open, grab_lock will not be done either. Assert
* accordingly.
*/
- assert((NULL == jnlpool.jnlpool_dummy_reg) || (NULL == recvpool.recvpool_dummy_reg)
- || jnlpool.jnlpool_dummy_reg == recvpool.recvpool_dummy_reg);
- reg = jnlpool.jnlpool_dummy_reg;
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_dummy_reg)) || (NULL == recvpool.recvpool_dummy_reg)
+ || ((NULL != jnlpool) && (jnlpool->jnlpool_dummy_reg == recvpool.recvpool_dummy_reg)));
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
if (NULL == reg)
reg = recvpool.recvpool_dummy_reg;
assert((NULL == reg) && (in_repl_inst_create || in_repl_inst_edit || in_mupip_ftok)
@@ -175,7 +203,7 @@ void repl_inst_read(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen)
if (NULL != reg)
{
udi = FILE_INFO(reg);
- assert(udi->grabbed_ftok_sem || ((NULL != jnlpool.jnlpool_ctl) && udi->s_addrs.now_crit) || jgbl.mur_rollback);
+ assert(udi->grabbed_ftok_sem || ((jnlpool && jnlpool->jnlpool_ctl) && udi->s_addrs.now_crit) || jgbl.mur_rollback);
}
OPENFILE_CLOEXEC(fn, O_RDONLY, fd);
if (FD_INVALID == fd)
@@ -270,7 +298,7 @@ void repl_inst_write(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen)
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
/* Assert that except for MUPIP REPLIC -INSTANCE_CREATE or -EDITINSTANCE, all callers hold the FTOK semaphore on the
* replication instance file OR the journal pool lock. Note that the instance file might be pointed to by one of the
- * two region pointers "jnlpool.jnlpool_dummy_reg" or "recvpool.recvpool_dummy_reg" depending on whether the journal pool
+ * two region pointers "jnlpool->jnlpool_dummy_reg" or "recvpool.recvpool_dummy_reg" depending on whether the journal pool
* or the receive pool was attached to first by this particular process. If both of them are non-NULL, both the region
* pointers should be identical. This is also asserted below.
* Note: Typically, journal pool lock should have sufficed. However, in certain places like jnlpool_init and recvpool_init,
@@ -279,10 +307,10 @@ void repl_inst_write(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen)
* since it is NOT necessary for ROLLBACK to have a journal pool open, grab_lock will not be done either. Assert
* accordingly.
*/
- assert((NULL == jnlpool.jnlpool_dummy_reg) || (NULL == recvpool.recvpool_dummy_reg)
- || jnlpool.jnlpool_dummy_reg == recvpool.recvpool_dummy_reg);
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_dummy_reg)) || (NULL == recvpool.recvpool_dummy_reg)
+ || (NULL != jnlpool) && (jnlpool->jnlpool_dummy_reg == recvpool.recvpool_dummy_reg));
DEBUG_ONLY(
- reg = jnlpool.jnlpool_dummy_reg;
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
if (NULL == reg)
reg = recvpool.recvpool_dummy_reg;
)
@@ -292,7 +320,7 @@ void repl_inst_write(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen)
if (NULL != reg)
{
udi = FILE_INFO(reg);
- assert(udi->grabbed_ftok_sem || ((NULL != jnlpool.jnlpool_ctl) && udi->s_addrs.now_crit)
+ assert(udi->grabbed_ftok_sem || (jnlpool && (NULL != jnlpool->jnlpool_ctl) && udi->s_addrs.now_crit)
|| jgbl.mur_rollback);
}
)
@@ -339,21 +367,21 @@ void repl_inst_sync(char *fn)
/* Assert that except for MUPIP REPLIC -INSTANCE_CREATE or -EDITINSTANCE, all callers hold the FTOK semaphore
* on the replication instance file. Note that the instance file might be pointed to by one of the two region
- * pointers "jnlpool.jnlpool_dummy_reg" or "recvpool.recvpool_dummy_reg" depending on whether the journal pool
+ * pointers "jnlpool->jnlpool_dummy_reg" or "recvpool.recvpool_dummy_reg" depending on whether the journal pool
* or the receive pool was attached to first by this particular process. If both of them are non-NULL, both the
* region pointers should be identical. This is also asserted below.
*/
- assert((NULL == jnlpool.jnlpool_dummy_reg) || (NULL == recvpool.recvpool_dummy_reg)
- || jnlpool.jnlpool_dummy_reg == recvpool.recvpool_dummy_reg);
+ assert(((NULL != jnlpool) && (NULL == jnlpool->jnlpool_dummy_reg)) || (NULL == recvpool.recvpool_dummy_reg)
+ || ((NULL != jnlpool) && (jnlpool->jnlpool_dummy_reg == recvpool.recvpool_dummy_reg)));
DEBUG_ONLY(
- reg = jnlpool.jnlpool_dummy_reg;
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
if (NULL == reg)
reg = recvpool.recvpool_dummy_reg;
)
DEBUG_ONLY(
assert(NULL != reg);
udi = FILE_INFO(reg);
- assert((NULL != jnlpool.jnlpool_ctl) && udi->s_addrs.now_crit);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl) && udi->s_addrs.now_crit);
)
oflag = O_RDWR;
OPENFILE3_CLOEXEC(fn, oflag, 0666, fd);
@@ -380,18 +408,23 @@ void repl_inst_jnlpool_reset(void)
{
repl_inst_hdr repl_instance;
unix_db_info *udi;
+ gd_region *reg;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
- assert(udi->grabbed_ftok_sem);
- if (NULL != jnlpool.repl_inst_filehdr)
+ if ((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr))
{ /* If journal pool exists, reset sem/shm ids in the file header in the journal pool and flush changes to disk */
- jnlpool.repl_inst_filehdr->jnlpool_semid = INVALID_SEMID;
- jnlpool.repl_inst_filehdr->jnlpool_shmid = INVALID_SHMID;
- jnlpool.repl_inst_filehdr->jnlpool_semid_ctime = 0;
- jnlpool.repl_inst_filehdr->jnlpool_shmid_ctime = 0;
+ jnlpool->repl_inst_filehdr->jnlpool_semid = INVALID_SEMID;
+ jnlpool->repl_inst_filehdr->jnlpool_shmid = INVALID_SHMID;
+ jnlpool->repl_inst_filehdr->jnlpool_semid_ctime = 0;
+ jnlpool->repl_inst_filehdr->jnlpool_shmid_ctime = 0;
repl_inst_flush_filehdr();
} else
{ /* If journal pool does not exist, reset sem/shm ids directly in the replication instance file header on disk */
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
+ if (NULL == reg)
+ reg = recvpool.recvpool_dummy_reg;
+ assert(NULL != reg);
+ udi = FILE_INFO(reg);
+ assert(udi->grabbed_ftok_sem);
repl_inst_read((char *)udi->fn, (off_t)0, (sm_uc_ptr_t)&repl_instance, SIZEOF(repl_inst_hdr));
repl_instance.jnlpool_semid = INVALID_SEMID;
repl_instance.jnlpool_shmid = INVALID_SHMID;
@@ -413,14 +446,15 @@ void repl_inst_recvpool_reset(void)
repl_inst_hdr repl_instance;
unix_db_info *udi;
+ assert(NULL != recvpool.recvpool_dummy_reg);
udi = FILE_INFO(recvpool.recvpool_dummy_reg);
assert(udi->grabbed_ftok_sem);
- if (NULL != jnlpool.repl_inst_filehdr)
+ if ((NULL != jnlpool) && (NULL != jnlpool->repl_inst_filehdr))
{ /* If journal pool exists, reset sem/shm ids in the file header in the journal pool and flush changes to disk */
- jnlpool.repl_inst_filehdr->recvpool_semid = INVALID_SEMID;
- jnlpool.repl_inst_filehdr->recvpool_shmid = INVALID_SHMID;
- jnlpool.repl_inst_filehdr->recvpool_semid_ctime = 0;
- jnlpool.repl_inst_filehdr->recvpool_shmid_ctime = 0;
+ jnlpool->repl_inst_filehdr->recvpool_semid = INVALID_SEMID;
+ jnlpool->repl_inst_filehdr->recvpool_shmid = INVALID_SHMID;
+ jnlpool->repl_inst_filehdr->recvpool_semid_ctime = 0;
+ jnlpool->repl_inst_filehdr->recvpool_shmid_ctime = 0;
repl_inst_flush_filehdr();
} else
{ /* If journal pool does not exist, reset sem/shm ids directly in the replication instance file header on disk */
@@ -440,10 +474,10 @@ void repl_inst_ftok_sem_lock(void)
unix_db_info *udi;
assert(!jgbl.mur_rollback); /* Rollback already has standalone access and will not ask for ftok lock */
- assert((NULL != jnlpool.jnlpool_dummy_reg) || (NULL != recvpool.recvpool_dummy_reg));
- assert((NULL == jnlpool.jnlpool_dummy_reg) || (NULL == recvpool.recvpool_dummy_reg)
- || (recvpool.recvpool_dummy_reg == jnlpool.jnlpool_dummy_reg));
- reg = jnlpool.jnlpool_dummy_reg;
+ assert(((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg)) || (NULL != recvpool.recvpool_dummy_reg));
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_dummy_reg)) || (NULL == recvpool.recvpool_dummy_reg)
+ || ((NULL != jnlpool) && ((recvpool.recvpool_dummy_reg == jnlpool->jnlpool_dummy_reg))));
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
if (NULL == reg)
reg = recvpool.recvpool_dummy_reg;
assert(NULL != reg);
@@ -468,10 +502,10 @@ void repl_inst_ftok_sem_release(void)
unix_db_info *udi;
assert(!jgbl.mur_rollback); /* Rollback already has standalone access and will not ask for ftok lock */
- assert((NULL != jnlpool.jnlpool_dummy_reg) || (NULL != recvpool.recvpool_dummy_reg));
- assert((NULL == jnlpool.jnlpool_dummy_reg) || (NULL == recvpool.recvpool_dummy_reg)
- || (recvpool.recvpool_dummy_reg == jnlpool.jnlpool_dummy_reg));
- reg = jnlpool.jnlpool_dummy_reg;
+ assert(((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg)) || (NULL != recvpool.recvpool_dummy_reg));
+ assert(((NULL == jnlpool) || (NULL == jnlpool->jnlpool_dummy_reg)) || (NULL == recvpool.recvpool_dummy_reg)
+ || ((NULL != jnlpool) && ((recvpool.recvpool_dummy_reg == jnlpool->jnlpool_dummy_reg))));
+ reg = jnlpool ? jnlpool->jnlpool_dummy_reg : NULL;
if (NULL == reg)
reg = recvpool.recvpool_dummy_reg;
assert(NULL != reg);
@@ -504,12 +538,13 @@ int4 repl_inst_histinfo_get(int4 index, repl_histinfo *histinfo)
unix_db_info *udi;
repl_inst_hdr_ptr_t repl_inst_filehdr;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
assert(udi->s_addrs.now_crit || jgbl.mur_rollback);
if (0 > index)
return ERR_REPLINSTNOHIST;
- repl_inst_filehdr = jnlpool.repl_inst_filehdr;
+ repl_inst_filehdr = jnlpool->repl_inst_filehdr;
assert(NULL != repl_inst_filehdr);
assert(index < repl_inst_filehdr->num_histinfo);
/* assert that no caller should request a get of an unused (but allocated) histinfo */
@@ -557,11 +592,12 @@ int4 repl_inst_histinfo_find_seqno(seq_num seqno, int4 strm_idx, repl_histinfo *
# endif
repl_inst_hdr_ptr_t inst_hdr;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg));
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
assert(udi->s_addrs.now_crit || jgbl.mur_rollback);
assert(0 != seqno);
- inst_hdr = jnlpool.repl_inst_filehdr;
+ inst_hdr = jnlpool->repl_inst_filehdr;
assert(NULL != inst_hdr);
assert((INVALID_SUPPL_STRM == strm_idx) || inst_hdr->is_supplementary && (0 <= strm_idx) && (MAX_SUPPL_STRMS > strm_idx));
assert(inst_hdr->num_histinfo <= inst_hdr->num_alloc_histinfo);
@@ -609,10 +645,11 @@ int4 repl_inst_wrapper_histinfo_find_seqno(seq_num seqno, int4 strm_idx, repl_hi
int4 status;
repl_histinfo *next_histinfo;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg));
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
assert(udi->s_addrs.now_crit || jgbl.mur_rollback);
- assert(NULL != jnlpool.repl_inst_filehdr); /* journal pool should be set up */
+ assert(NULL != jnlpool->repl_inst_filehdr); /* journal pool should be set up */
assert((is_src_server && ((INVALID_SUPPL_STRM == strm_index) || (0 == strm_index)))
|| (!is_src_server && ((INVALID_SUPPL_STRM == strm_index)
|| ((0 <= strm_index) && (MAX_SUPPL_STRMS > strm_index)))));
@@ -648,39 +685,42 @@ void repl_inst_histinfo_add(repl_histinfo *histinfo)
seq_num histinfo_strm_seqno, prev_strm_seqno;
unix_db_info *udi;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg));
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(udi->s_addrs.now_crit);
- assert(jnlpool.repl_inst_filehdr->num_histinfo <= jnlpool.repl_inst_filehdr->num_alloc_histinfo);
- histinfo_num = jnlpool.repl_inst_filehdr->num_histinfo;
+ assert(NULL != jnlpool->repl_inst_filehdr);
+ assert(jnlpool->repl_inst_filehdr->num_histinfo <= jnlpool->repl_inst_filehdr->num_alloc_histinfo);
+ histinfo_num = jnlpool->repl_inst_filehdr->num_histinfo;
assert(0 <= histinfo_num);
strm_idx = histinfo->strm_index;
/* Assert that the very first history record in any instance file (irrespective of whether the
* instance is a root primary or propagating primary) should correspond to stream-0.
*/
assert((0 < histinfo_num) || (0 == strm_idx));
- is_supplementary = jnlpool.repl_inst_filehdr->is_supplementary;
+ is_supplementary = jnlpool->repl_inst_filehdr->is_supplementary;
assert(!is_supplementary && (0 == strm_idx) || (is_supplementary && (0 <= strm_idx) && (MAX_SUPPL_STRMS > strm_idx)));
/* If -updateresync is specified and instance is not supplementary, then there better be NO history records */
assert((HISTINFO_TYPE_UPDRESYNC != histinfo->history_type) || is_supplementary || (0 == histinfo_num));
- if (strm_idx && !jnlpool.jnlpool_ctl->upd_disabled)
+ assert(NULL != jnlpool->jnlpool_ctl);
+ if (strm_idx && !jnlpool->jnlpool_ctl->upd_disabled)
{ /* A non-supplementary stream history record is being written into a supplementary root primary instance.
* Convert the history record as appropriate. See below macro definition for more comments on the conversion.
*/
- CONVERT_NONSUPPL2SUPPL_HISTINFO(histinfo, jnlpool.jnlpool_ctl)
+ CONVERT_NONSUPPL2SUPPL_HISTINFO(histinfo, jnlpool->jnlpool_ctl)
}
if (0 < histinfo_num)
{
last_histinfo = &last_histrec;
status = repl_inst_histinfo_get(histinfo_num - 1, last_histinfo);
assert(0 == status); /* Since histinfo_num-1 we are passing is >=0 and < num_histinfo */
- assert(jnlpool.jnlpool_ctl->last_histinfo_seqno == last_histinfo->start_seqno);
+ assert(jnlpool->jnlpool_ctl->last_histinfo_seqno == last_histinfo->start_seqno);
if (histinfo->start_seqno < last_histinfo->start_seqno)
{ /* cannot create histinfo with out-of-order start_seqno */
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(8) ERR_REPLINSTSEQORD, 6, LEN_AND_LIT("New history record"),
&histinfo->start_seqno, &last_histinfo->start_seqno, LEN_AND_STR(udi->fn));
}
}
- strm_histinfo_num = jnlpool.repl_inst_filehdr->last_histinfo_num[strm_idx];
+ strm_histinfo_num = jnlpool->repl_inst_filehdr->last_histinfo_num[strm_idx];
prev_histinfo_num = strm_histinfo_num;
if (0 <= strm_histinfo_num)
{
@@ -775,8 +815,8 @@ void repl_inst_histinfo_add(repl_histinfo *histinfo)
}
}
/* Assert that the history record we are going to add is in sync with the current seqno state of the instance */
- assert(jnlpool.jnlpool_ctl->jnl_seqno == histinfo->start_seqno);
- assert(jnlpool.jnlpool_ctl->strm_seqno[histinfo->strm_index] == histinfo->strm_seqno);
+ assert(jnlpool->jnlpool_ctl->jnl_seqno == histinfo->start_seqno);
+ assert(jnlpool->jnlpool_ctl->strm_seqno[histinfo->strm_index] == histinfo->strm_seqno);
offset = REPL_INST_HISTINFO_START + (SIZEOF(repl_histinfo) * (off_t)histinfo_num);
/* Initialize the following members of the repl_histinfo structure. Everything else should be initialized by caller.
* histinfo_num
@@ -789,19 +829,19 @@ void repl_inst_histinfo_add(repl_histinfo *histinfo)
assert(histinfo->prev_histinfo_num < histinfo->histinfo_num);
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++)
{
- assert((jnlpool.repl_inst_filehdr->last_histinfo_num[idx] < histinfo_num)
- || (idx == strm_idx) && (jnlpool.repl_inst_filehdr->last_histinfo_num[idx] == histinfo_num));
- histinfo->last_histinfo_num[idx] = jnlpool.repl_inst_filehdr->last_histinfo_num[idx];
+ assert((jnlpool->repl_inst_filehdr->last_histinfo_num[idx] < histinfo_num)
+ || (idx == strm_idx) && (jnlpool->repl_inst_filehdr->last_histinfo_num[idx] == histinfo_num));
+ histinfo->last_histinfo_num[idx] = jnlpool->repl_inst_filehdr->last_histinfo_num[idx];
}
if (strm_histinfo_num == histinfo_num)
{ /* The last history record in the instance file is going to be overwritten with another history record of
- * the same stream. In this case, jnlpool.repl_inst_filehdr->last_histinfo_num[strm_idx] would not reflect a
+ * the same stream. In this case, jnlpool->repl_inst_filehdr->last_histinfo_num[strm_idx] would not reflect a
* state of the instance file BEFORE this history record was added. So find the correct value. Thankfully
* the last history record (that we are about to overwrite) already has this value so copy it over.
*/
histinfo->last_histinfo_num[strm_idx] = last_histinfo->last_histinfo_num[strm_idx];
}
- assert(strm_histinfo_num == jnlpool.repl_inst_filehdr->last_histinfo_num[strm_idx]);
+ assert(strm_histinfo_num == jnlpool->repl_inst_filehdr->last_histinfo_num[strm_idx]);
assert(strm_histinfo_num <= histinfo_num);
assert(strm_histinfo_num >= prev_histinfo_num);
assert(histinfo_num > prev_histinfo_num);
@@ -833,22 +873,22 @@ void repl_inst_histinfo_add(repl_histinfo *histinfo)
assert((0 == histinfo_num) || (INVALID_HISTINFO_NUM != histinfo->last_histinfo_num[0]));
repl_inst_write(udi->fn, offset, (sm_uc_ptr_t)histinfo, SIZEOF(repl_histinfo));
/* Update stream specific history number fields in the file header to reflect the latest history addition to this stream */
- jnlpool.repl_inst_filehdr->last_histinfo_num[strm_idx] = histinfo_num;
+ jnlpool->repl_inst_filehdr->last_histinfo_num[strm_idx] = histinfo_num;
/* If -updateresync history record for a non-zero stream #, then initialize strm_group_info in file header */
if ((0 < strm_idx) && (HISTINFO_TYPE_UPDRESYNC == histinfo->history_type))
- jnlpool.repl_inst_filehdr->strm_group_info[strm_idx - 1] = histinfo->lms_group;
+ jnlpool->repl_inst_filehdr->strm_group_info[strm_idx - 1] = histinfo->lms_group;
histinfo_num++;
- if (jnlpool.repl_inst_filehdr->num_alloc_histinfo < histinfo_num)
- jnlpool.repl_inst_filehdr->num_alloc_histinfo = histinfo_num;
- jnlpool.repl_inst_filehdr->num_histinfo = histinfo_num;
+ if (jnlpool->repl_inst_filehdr->num_alloc_histinfo < histinfo_num)
+ jnlpool->repl_inst_filehdr->num_alloc_histinfo = histinfo_num;
+ jnlpool->repl_inst_filehdr->num_histinfo = histinfo_num;
/* Since we are going to flush the file header, take this opportunity to update the current jnl seqno in it.
* Note that the current stream jnl seqnos are already udpated inside "repl_inst_flush_filehdr" by the
* "COPY_JCTL_STRMSEQNO_TO_INSTHDR_IF_NEEDED" macro. We dont do the current jnl seqno to there because
* "repl_inst_histinfo_truncate" invokes "repl_inst_flush_filehdr" with a different jnl seqno than the current.
*/
- jnlpool.repl_inst_filehdr->jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ jnlpool->repl_inst_filehdr->jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
repl_inst_flush_filehdr();
- jnlpool.jnlpool_ctl->last_histinfo_seqno = histinfo->start_seqno;
+ jnlpool->jnlpool_ctl->last_histinfo_seqno = histinfo->start_seqno;
repl_inst_sync(udi->fn); /* Harden the new histinfo to disk before any logical records for this arrive. */
return;
}
@@ -875,13 +915,19 @@ seq_num repl_inst_histinfo_truncate(seq_num rollback_seqno)
repl_histinfo temphistinfo, nexthistinfo, strmhistinfo;
repl_inst_hdr_ptr_t inst_hdr;
unix_db_info *udi;
+ gd_region *reg;
seq_num last_histinfo_seqno = 0;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool);
+ reg = jnlpool->jnlpool_dummy_reg;
+ if (NULL == reg)
+ reg = recvpool.recvpool_dummy_reg;
+ assert(NULL != reg);
+ udi = FILE_INFO(reg);
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
assert(in_backup || jgbl.mur_rollback); /* Only ROLLBACK or BACKUP calls this function */
assert(udi->s_addrs.now_crit || jgbl.mur_rollback);
- inst_hdr = jnlpool.repl_inst_filehdr;
+ inst_hdr = jnlpool->repl_inst_filehdr;
assert(NULL != inst_hdr); /* Should have been set when mupip rollback invoked "mu_replpool_grab_sem" */
num_histinfo = inst_hdr->num_histinfo;
if (0 != num_histinfo)
@@ -1037,14 +1083,14 @@ seq_num repl_inst_histinfo_truncate(seq_num rollback_seqno)
inst_hdr->recvpool_semid_ctime = 0;
inst_hdr->recvpool_shmid_ctime = 0;
} /* else for rollback, we reset the IPC fields in mu_replpool_release_sem() and crash in mur_close_files */
- /* Flush all file header changes in jnlpool.repl_inst_filehdr to disk */
+ /* Flush all file header changes in jnlpool->repl_inst_filehdr to disk */
repl_inst_flush_filehdr();
assert((0 == inst_hdr->num_histinfo) || (0 < last_histinfo_seqno));
return last_histinfo_seqno;
}
/* Description:
- * Flushes the instance file header pointed to by "jnlpool.repl_inst_filehdr" to disk.
+ * Flushes the instance file header pointed to by "jnlpool->repl_inst_filehdr" to disk.
* Parameters:
* None
* Return Value:
@@ -1054,7 +1100,8 @@ void repl_inst_flush_filehdr()
{
unix_db_info *udi;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
/* We could come here from several paths. If journal pool exists, we would have done a grab_lock. This covers most of the
* cases. If the journal pool doesn't exist, then we could come here from one of the following places
*
@@ -1078,16 +1125,16 @@ void repl_inst_flush_filehdr()
*/
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
assert(udi->s_addrs.now_crit || udi->grabbed_ftok_sem || (jgbl.mur_rollback && holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]));
- if (jnlpool.jnlpool_dummy_reg->open)
+ if (jnlpool->jnlpool_dummy_reg->open)
COPY_JCTL_STRMSEQNO_TO_INSTHDR_IF_NEEDED; /* Keep the file header copy of "strm_seqno" uptodate with jnlpool_ctl */
- assert((NULL == jnlpool.jnlpool_ctl) || udi->s_addrs.now_crit);
- assert(NULL != jnlpool.repl_inst_filehdr);
+ assert((NULL == jnlpool->jnlpool_ctl) || udi->s_addrs.now_crit);
+ assert(NULL != jnlpool->repl_inst_filehdr);
/* flush the instance file header */
- repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)jnlpool.repl_inst_filehdr, REPL_INST_HDR_SIZE);
+ repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)jnlpool->repl_inst_filehdr, REPL_INST_HDR_SIZE);
}
/* Description:
- * Flushes the "gtmsrc_lcl" structure corresponding to the jnlpool.gtmsource_local structure for the
+ * Flushes the "gtmsrc_lcl" structure corresponding to the jnlpool->gtmsource_local structure for the
* calling source server. Updates "gtmsource_local->last_flush_resync_seqno" to equal "gtmsource_local->read_jnl_seqno"
* Parameters:
* None
@@ -1101,23 +1148,24 @@ void repl_inst_flush_gtmsrc_lcl()
off_t offset;
gtmsrc_lcl_ptr_t gtmsrclcl_ptr;
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert(NULL != jnlpool);
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(!jgbl.mur_rollback); /* Rollback should never reach here */
assert(udi->s_addrs.now_crit);
- assert(NULL != jnlpool.gtmsource_local);
- index = jnlpool.gtmsource_local->gtmsrc_lcl_array_index;
+ assert(NULL != jnlpool->gtmsource_local);
+ index = jnlpool->gtmsource_local->gtmsrc_lcl_array_index;
assert(0 <= index);
- assert(jnlpool.gtmsource_local == &jnlpool.gtmsource_local_array[index]);
- gtmsrclcl_ptr = &jnlpool.gtmsrc_lcl_array[index];
- assert(jnlpool.jnlpool_dummy_reg->open); /* journal pool exists and this process has done "jnlpool_init" */
+ assert(jnlpool->gtmsource_local == &jnlpool->gtmsource_local_array[index]);
+ gtmsrclcl_ptr = &jnlpool->gtmsrc_lcl_array[index];
+ assert(jnlpool->jnlpool_dummy_reg->open); /* journal pool exists and this process has done "jnlpool_init" */
/* Copy each field from "gtmsource_local" to "gtmsrc_lcl" before flushing it to disk.
* Do not need the journal pool lock, as we are the only ones reading/updating the below fields
* in "gtmsource_local" or "gtmsrc_lcl".
*/
- COPY_GTMSOURCELOCAL_TO_GTMSRCLCL(jnlpool.gtmsource_local, gtmsrclcl_ptr);
+ COPY_GTMSOURCELOCAL_TO_GTMSRCLCL(jnlpool->gtmsource_local, gtmsrclcl_ptr);
offset = REPL_INST_HDR_SIZE + (SIZEOF(gtmsrc_lcl) * (off_t)index);
repl_inst_write(udi->fn, offset, (sm_uc_ptr_t)gtmsrclcl_ptr, SIZEOF(gtmsrc_lcl));
- jnlpool.gtmsource_local->last_flush_resync_seqno = jnlpool.gtmsource_local->read_jnl_seqno;
+ jnlpool->gtmsource_local->last_flush_resync_seqno = jnlpool->gtmsource_local->read_jnl_seqno;
}
/* Description:
@@ -1134,8 +1182,8 @@ void repl_inst_flush_jnlpool(boolean_t reset_replpool_fields, boolean_t reset_cr
gtmsrc_lcl_ptr_t gtmsrclcl_ptr;
gtmsource_local_ptr_t gtmsourcelocal_ptr;
- assert(NULL != jnlpool.jnlpool_dummy_reg);
- udi = FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_dummy_reg));
+ udi = FILE_INFO(jnlpool->jnlpool_dummy_reg);
/* This function should be invoked only if the caller determines this is last process attached to the journal pool.
* Since the ftok lock on the instance file is already held, no other process will be allowed to attach to the
* journal pool and hence this is the only process having access to the journal pool during this function. The only
@@ -1145,41 +1193,41 @@ void repl_inst_flush_jnlpool(boolean_t reset_replpool_fields, boolean_t reset_cr
*/
assert(udi->grabbed_ftok_sem || (jgbl.onlnrlbk && udi->s_addrs.now_crit));
assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- assert(NULL != jnlpool.gtmsource_local_array);
- assert(NULL != jnlpool.gtmsrc_lcl_array);
- assert(NULL != jnlpool.repl_inst_filehdr);
- assert(NULL != jnlpool.jnlpool_ctl);
- assert((sm_uc_ptr_t)jnlpool.gtmsrc_lcl_array == (sm_uc_ptr_t)jnlpool.repl_inst_filehdr + REPL_INST_HDR_SIZE);
+ assert(NULL != jnlpool->gtmsource_local_array);
+ assert(NULL != jnlpool->gtmsrc_lcl_array);
+ assert(NULL != jnlpool->repl_inst_filehdr);
+ assert(NULL != jnlpool->jnlpool_ctl);
+ assert((sm_uc_ptr_t)jnlpool->gtmsrc_lcl_array == (sm_uc_ptr_t)jnlpool->repl_inst_filehdr + REPL_INST_HDR_SIZE);
/* Reset the instance file header fields (if needed) before flushing and removing the journal pool shared memory */
if (reset_crash)
- jnlpool.repl_inst_filehdr->crash = FALSE;
+ jnlpool->repl_inst_filehdr->crash = FALSE;
if (!jgbl.onlnrlbk)
{
if (reset_replpool_fields)
{
- jnlpool.repl_inst_filehdr->jnlpool_semid = INVALID_SEMID;
- jnlpool.repl_inst_filehdr->jnlpool_shmid = INVALID_SHMID;
- jnlpool.repl_inst_filehdr->recvpool_semid = INVALID_SEMID; /* Just in case it is not already reset */
- jnlpool.repl_inst_filehdr->recvpool_shmid = INVALID_SHMID; /* Just in case it is not already reset */
+ jnlpool->repl_inst_filehdr->jnlpool_semid = INVALID_SEMID;
+ jnlpool->repl_inst_filehdr->jnlpool_shmid = INVALID_SHMID;
+ jnlpool->repl_inst_filehdr->recvpool_semid = INVALID_SEMID; /* Just in case it is not already reset */
+ jnlpool->repl_inst_filehdr->recvpool_shmid = INVALID_SHMID; /* Just in case it is not already reset */
}
}
/* If the source server that created the journal pool died before it was completely initialized in "gtmsource_seqno_init"
* do not copy seqnos from the journal pool into the instance file header. Instead keep the instance file header unchanged.
*/
- if (jnlpool.jnlpool_ctl->pool_initialized)
+ if (jnlpool->jnlpool_ctl->pool_initialized)
{
- assert(jnlpool.jnlpool_ctl->start_jnl_seqno);
- assert(jnlpool.jnlpool_ctl->jnl_seqno);
- jnlpool.repl_inst_filehdr->jnl_seqno = jnlpool.jnlpool_ctl->jnl_seqno;
+ assert(jnlpool->jnlpool_ctl->start_jnl_seqno);
+ assert(jnlpool->jnlpool_ctl->jnl_seqno);
+ jnlpool->repl_inst_filehdr->jnl_seqno = jnlpool->jnlpool_ctl->jnl_seqno;
COPY_JCTL_STRMSEQNO_TO_INSTHDR_IF_NEEDED; /* Keep the file header copy of "strm_seqno" uptodate with jnlpool_ctl */
/* Copy all "gtmsource_local" to corresponding "gtmsrc_lcl" structures before flushing to instance file */
- gtmsourcelocal_ptr = &jnlpool.gtmsource_local_array[0];
- gtmsrclcl_ptr = &jnlpool.gtmsrc_lcl_array[0];
+ gtmsourcelocal_ptr = &jnlpool->gtmsource_local_array[0];
+ gtmsrclcl_ptr = &jnlpool->gtmsrc_lcl_array[0];
for (index = 0; index < NUM_GTMSRC_LCL; index++, gtmsourcelocal_ptr++, gtmsrclcl_ptr++)
COPY_GTMSOURCELOCAL_TO_GTMSRCLCL(gtmsourcelocal_ptr, gtmsrclcl_ptr);
- repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)jnlpool.repl_inst_filehdr, REPL_INST_HDR_SIZE + GTMSRC_LCL_SIZE);
+ repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)jnlpool->repl_inst_filehdr, REPL_INST_HDR_SIZE + GTMSRC_LCL_SIZE);
} else
- repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)jnlpool.repl_inst_filehdr, REPL_INST_HDR_SIZE);
+ repl_inst_write(udi->fn, (off_t)0, (sm_uc_ptr_t)jnlpool->repl_inst_filehdr, REPL_INST_HDR_SIZE);
}
/* This function determines if this replication instance was formerly a root primary. It finds this out by looking at the
@@ -1201,17 +1249,17 @@ boolean_t repl_inst_was_rootprimary(void)
SETUP_THREADGBL_ACCESS;
assert(!jgbl.mur_rollback || !jgbl.mur_options_forward); /* ROLLBACK -FORWARD should not call this function */
- if (NULL != jnlpool.jnlpool_ctl)
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl))
{ /* If the journal pool is available (indicated by NULL != jnlpool_ctl), we expect jnlpool_dummy_reg to be open.
* The only exception is online rollback which doesn't do a jnlpool_init thereby leaving jnlpool_dummy_reg->open
* to be FALSE. Assert accordingly.
*/
- assert(((NULL != jnlpool.jnlpool_dummy_reg) && jnlpool.jnlpool_dummy_reg->open)
+ assert(((NULL != jnlpool->jnlpool_dummy_reg) && jnlpool->jnlpool_dummy_reg->open)
|| jgbl.onlnrlbk || (jgbl.mur_rollback && INST_FREEZE_ON_ERROR_POLICY));
- csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
ASSERT_VALID_JNLPOOL(csa);
assert(csa->now_crit);
- if (!jnlpool.jnlpool_ctl->upd_disabled)
+ if (!jnlpool->jnlpool_ctl->upd_disabled)
{ /* This instance is a root primary supplementary instance where an online rollback is being run
* (either explicitly or implicitly through a receiver server started with -autorollback)
* Since this instance is currently a rootprimary, was_rootprimary is FALSE. Return right away.
@@ -1223,15 +1271,16 @@ boolean_t repl_inst_was_rootprimary(void)
/* If this is a supplementary instance, look at the last history record corresponding to the 0th stream index.
* If not, look at the last history record. This is okay since there is no multiple streams in this case.
*/
- histinfo_num = (!jnlpool.repl_inst_filehdr->is_supplementary) ? (jnlpool.repl_inst_filehdr->num_histinfo - 1)
- : jnlpool.repl_inst_filehdr->last_histinfo_num[0];
- was_rootprimary = jnlpool.repl_inst_filehdr->was_rootprimary;
- assert(histinfo_num < jnlpool.repl_inst_filehdr->num_alloc_histinfo);
+ histinfo_num = (!jnlpool->repl_inst_filehdr->is_supplementary) ? (jnlpool->repl_inst_filehdr->num_histinfo - 1)
+ : jnlpool->repl_inst_filehdr->last_histinfo_num[0];
+ was_rootprimary = jnlpool->repl_inst_filehdr->was_rootprimary;
+ assert(histinfo_num < jnlpool->repl_inst_filehdr->num_alloc_histinfo);
if (was_rootprimary && (0 <= histinfo_num))
{
status = repl_inst_histinfo_get(histinfo_num, last_histinfo);
assert(0 == status); /* Since the histinfo_num we are passing is >=0 and < num_histinfo */
- was_rootprimary = !STRCMP(last_histinfo->root_primary_instname, jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ was_rootprimary = !STRCMP(last_histinfo->root_primary_instname,
+ jnlpool->repl_inst_filehdr->inst_info.this_instname);
} else
was_rootprimary = FALSE;
return was_rootprimary;
@@ -1253,21 +1302,22 @@ int4 repl_inst_reset_zqgblmod_seqno_and_tn(void)
* Assert this.
*/
assert(is_rcvr_server || holds_sem[SOURCE][JNL_POOL_ACCESS_SEM]);
- if (0 == jnlpool.jnlpool_ctl->max_zqgblmod_seqno)
+ if (0 == jnlpool->jnlpool_ctl->max_zqgblmod_seqno)
{ /* Already reset to 0 by a previous call to this function. No need to do it again. */
return ret;
}
/* This function is currently ONLY called by receiver server AND mupip replic -source -losttncomplete
- * both of which should have NO GBLDIR or REGION OPEN at this time. Assert that.
+ * The receiver should have NO GBLDIR or REGION OPEN at this time. Assert that.
+ * is_src_server is not set for -losttncomplete so other check needed
*/
- assert(NULL == gd_header);
+ assert(holds_sem[SOURCE][JNL_POOL_ACCESS_SEM] || (NULL == gd_header));
if (NULL == gd_header)
gvinit();
/* We use the same code dse uses to open all regions but we must make sure they are all open before proceeding. */
all_files_open = region_init(FALSE);
if (!all_files_open)
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_NOTALLDBOPN);
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
for (reg = gd_header->regions, reg_top = reg + gd_header->n_regions; reg < reg_top; reg++)
{
assert(reg->open);
@@ -1306,17 +1356,17 @@ int4 repl_inst_reset_zqgblmod_seqno_and_tn(void)
* an online rollback is detected, return without resetting max_zqgblmod_seqno. The caller knows to take appropriate
* action (on seeing -1 as the return code).
*/
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
- if (repl_csa->onln_rlbk_cycle != jnlpool.jnlpool_ctl->onln_rlbk_cycle)
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ if (repl_csa->onln_rlbk_cycle != jnlpool->jnlpool_ctl->onln_rlbk_cycle)
{
assert(is_rcvr_server);
SYNC_ONLN_RLBK_CYCLES;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(jnlpool->jnlpool_dummy_reg);
ret = -1; /* failure */
} else
{
- jnlpool.jnlpool_ctl->max_zqgblmod_seqno = 0;
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ jnlpool->jnlpool_ctl->max_zqgblmod_seqno = 0;
+ rel_lock(jnlpool->jnlpool_dummy_reg);
}
}
for (reg = gd_header->regions, reg_top = reg + gd_header->n_regions; reg < reg_top; reg++)
diff --git a/sr_unix/repl_instance.h b/sr_unix/repl_instance.h
old mode 100755
new mode 100644
index 6f909c7..d5e110d
--- a/sr_unix/repl_instance.h
+++ b/sr_unix/repl_instance.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -162,13 +162,13 @@ typedef struct gtmsrc_lcl_struct
#define COPY_JCTL_STRMSEQNO_TO_INSTHDR_IF_NEEDED \
{ \
int idx; \
- GBLREF jnlpool_addrs jnlpool; /* used by the below macro */ \
+ GBLREF jnlpool_addrs_ptr_t jnlpool; /* used by the below macro */ \
\
/* Keep the file header copy of "strm_seqno" uptodate with jnlpool_ctl */ \
- if (jnlpool.repl_inst_filehdr->is_supplementary) \
+ if (jnlpool->repl_inst_filehdr->is_supplementary) \
{ \
for (idx = 0; idx < MAX_SUPPL_STRMS; idx++) \
- jnlpool.repl_inst_filehdr->strm_seqno[idx] = jnlpool.jnlpool_ctl->strm_seqno[idx]; \
+ jnlpool->repl_inst_filehdr->strm_seqno[idx] = jnlpool->jnlpool_ctl->strm_seqno[idx]; \
} \
}
@@ -176,20 +176,21 @@ typedef struct gtmsrc_lcl_struct
* corresponding to that stream in the instance file. If this is not the case, those history-less updates will have no way of
* being replicated (propagated downstream) from this instance as there is no history record to identify the update originator.
*/
-#define ASSERT_INST_FILE_HDR_HAS_HISTREC_FOR_STRM(STRM_IDX) \
-{ \
- GBLREF jnlpool_addrs jnlpool; /* used by the below macro */ \
- \
- assert(INVALID_HISTINFO_NUM != jnlpool.repl_inst_filehdr->last_histinfo_num[STRM_IDX]); \
+#define ASSERT_INST_FILE_HDR_HAS_HISTREC_FOR_STRM(STRM_IDX, JNLPOOL) \
+{ \
+ assert(INVALID_HISTINFO_NUM != JNLPOOL->repl_inst_filehdr->last_histinfo_num[STRM_IDX]); \
}
#define OK_TO_LOG_FALSE FALSE
#define OK_TO_LOG_TRUE TRUE
+#define INST_NOT_GLD (struct gd_addr_struct *)1
+#define IS_INST_FROM_GLD(REPL_GLD) (INST_NOT_GLD != REPL_GLD) /* where repl_inst_get_name found instance file name */
+
#define GET_INSTFILE_NAME(sendmsg, err_act) \
{ \
- if ((SS_NORMAL == (status = TRANS_LOG_NAME(&log_nam, &trans_name, temp_inst_fn, SIZEOF(temp_inst_fn), \
- sendmsg))) \
+ if (((SS_NORMAL == (status = TRANS_LOG_NAME(&log_nam, &trans_name, temp_inst_fn, \
+ SIZEOF(temp_inst_fn), sendmsg))) || (inst_from_gld && (SS_NOLOGNAM == status))) \
&& (0 != trans_name.len)) \
{ \
temp_inst_fn[trans_name.len] = '\0'; \
@@ -202,13 +203,30 @@ typedef struct gtmsrc_lcl_struct
} \
}
+#define SETUP_INST_INFO(GDPTR, LOGNAM, INSTFROMGLD) \
+{ \
+ if (IS_MUMPS_IMAGE && GDPTR && GDPTR->instinfo) \
+ { /* use global directory information */ \
+ LOGNAM.addr = GDPTR->instinfo->instfilename; \
+ LOGNAM.len = STRLEN(GDPTR->instinfo->instfilename); \
+ INSTFROMGLD = TRUE; \
+ } else \
+ { \
+ LOGNAM.addr = GTM_REPL_INSTANCE; \
+ LOGNAM.len = SIZEOF(GTM_REPL_INSTANCE) - 1; \
+ INSTFROMGLD = FALSE; \
+ } \
+}
+
typedef enum {
return_on_error,
issue_rts_error,
issue_gtm_putmsg
} instname_act;
-boolean_t repl_inst_get_name(char *, unsigned int *, unsigned int, instname_act error_action);
+/* return and gd_ptr are really gd_addr * but gdsfhead.h would be needed */
+struct gd_addr_struct *repl_inst_get_name(char *, unsigned int *, unsigned int, instname_act error_action,
+ struct gd_addr_struct *gd_ptr);
void repl_inst_create(void);
void repl_inst_edit(void);
void repl_inst_read(char *fn, off_t offset, sm_uc_ptr_t buff, size_t buflen);
diff --git a/sr_unix/repl_ipc_cleanup.c b/sr_unix/repl_ipc_cleanup.c
index 302bb6b..cbf8f49 100644
--- a/sr_unix/repl_ipc_cleanup.c
+++ b/sr_unix/repl_ipc_cleanup.c
@@ -43,8 +43,8 @@
#include "anticipatory_freeze.h"
#include "jnl.h"
-GBLREF jnlpool_addrs jnlpool;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF int pool_init;
GBLREF int gtmrecv_srv_count;
GBLREF recvpool_addrs recvpool;
@@ -86,9 +86,10 @@ int gtmsource_ipc_cleanup(boolean_t auto_shutdown, int *exit_status, int4 *num_s
* around, and we will need the journal pool attached so that we can check for instance freeze in database rundown.
* In that case, the detach will happen automatically when the process terminates.
*/
+ assert(NULL != jnlpool);
if (IS_REPL_INST_FROZEN)
return FALSE;
- udi = (unix_db_info *)FILE_INFO(jnlpool.jnlpool_dummy_reg);
+ udi = (unix_db_info *)FILE_INFO(jnlpool->jnlpool_dummy_reg);
assert(INVALID_SHMID != udi->shmid);
if (attempt_ipc_cleanup)
{
@@ -104,11 +105,11 @@ int gtmsource_ipc_cleanup(boolean_t auto_shutdown, int *exit_status, int4 *num_s
*exit_status = ABNORMAL_SHUTDOWN;
} else if (INVALID_SHMID != udi->shmid)
{
- if (INVALID_SEMID != jnlpool.repl_inst_filehdr->recvpool_semid DEBUG_ONLY(&&
+ if (INVALID_SEMID != jnlpool->repl_inst_filehdr->recvpool_semid DEBUG_ONLY(&&
!(gtm_white_box_test_case_enabled &&
(WBTEST_UPD_PROCESS_ERROR == gtm_white_box_test_case_number))))
repl_log(stderr, TRUE, TRUE, "Receiver pool semaphore IDs were not removed\n");
- if ((INVALID_SHMID != jnlpool.repl_inst_filehdr->recvpool_shmid) DEBUG_ONLY(&&
+ if ((INVALID_SHMID != jnlpool->repl_inst_filehdr->recvpool_shmid) DEBUG_ONLY(&&
!(gtm_white_box_test_case_enabled &&
(WBTEST_UPD_PROCESS_ERROR == gtm_white_box_test_case_number))))
repl_log(stderr, TRUE, TRUE, "Receiver pool shared memory not removed\n");
diff --git a/sr_unix/repl_sem.c b/sr_unix/repl_sem.c
old mode 100755
new mode 100644
index efdb093..5493d2c
--- a/sr_unix/repl_sem.c
+++ b/sr_unix/repl_sem.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -51,8 +51,6 @@
FTOK related semaphore for replication is also added here.
*/
-GBLREF jnlpool_addrs jnlpool;
-GBLREF recvpool_addrs recvpool;
GBLREF boolean_t holds_sem[NUM_SEM_SETS][NUM_SRC_SEMS];
static struct sembuf sop[5];
diff --git a/sr_unix/rts_error.c b/sr_unix/rts_error.c
old mode 100755
new mode 100644
index 0856787..8dbb614
--- a/sr_unix/rts_error.c
+++ b/sr_unix/rts_error.c
@@ -38,8 +38,8 @@ GBLREF boolean_t dont_want_core;
GBLREF boolean_t run_time;
GBLREF char cg_phase;
GBLREF gd_region *gv_cur_region;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF int gtm_errno;
-GBLREF jnlpool_addrs jnlpool;
GBLREF void (*stx_error_va_fptr)(int in_error, ...); /* Function pointer for stx_error_va() so this can avoid
* pulling stx_error() into gtmsecshr.
*/
@@ -69,10 +69,11 @@ int rts_error(int argcnt, ...)
{
va_list var;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by PTHREAD_CSA_FROM_GV_CUR_REGION */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- csa = PTHREAD_CSA_FROM_GV_CUR_REGION;
+ PTHREAD_CSA_FROM_GV_CUR_REGION(csa, local_jnlpool);
VAR_START(var, argcnt);
return rts_error_va(csa, argcnt, var);
}
diff --git a/sr_unix/secshr_client.c b/sr_unix/secshr_client.c
index bbd5255..0fe3113 100755
--- a/sr_unix/secshr_client.c
+++ b/sr_unix/secshr_client.c
@@ -349,9 +349,9 @@ int send_mesg2gtmsecshr(unsigned int code, unsigned int id, char *path, int path
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(13) ERR_GTMSECSHRSRVFIL, 7, RTS_ERROR_TEXT("Client"),
process_id, mesg.pid, req_code, RTS_ERROR_TEXT(mesg.mesg.path),
ERR_TEXT, 2, RTS_ERROR_STRING("Communicating with wrong GT.M version"));
- rts_error_csa(CSA_ARG(NULL) VARLSTCNT(13) ERR_GTMSECSHRSRVFIL, 7, RTS_ERROR_TEXT("Client"),
- process_id, mesg.pid, req_code, RTS_ERROR_TEXT(mesg.mesg.path),
- ERR_TEXT, 2, RTS_ERROR_STRING("Communicating with wrong GT.M version"));
+ rts_error_csa(CSA_ARG(NULL) VARLSTCNT(13) MAKE_MSG_ERROR(ERR_GTMSECSHRSRVFIL), 7,
+ RTS_ERROR_TEXT("Client"), process_id, mesg.pid, req_code, RTS_ERROR_TEXT(mesg.mesg.path),
+ ERR_TEXT, 2, RTS_ERROR_STRING("Communicating with wrong GT.M version"));
break; /* rts_error should not return */
}
switch(req_code)
diff --git a/sr_unix/send_msg.c b/sr_unix/send_msg.c
old mode 100755
new mode 100644
index bb8ef57..aebcad8
--- a/sr_unix/send_msg.c
+++ b/sr_unix/send_msg.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2015 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -33,9 +33,9 @@
#include "anticipatory_freeze.h" /* for SET_ANTICIPATORY_FREEZE_IF_NEEDED */
GBLREF VSIG_ATOMIC_T forced_exit;
-GBLREF bool caller_id_flag;
+GBLREF boolean_t caller_id_flag;
GBLREF gd_region *gv_cur_region;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF volatile boolean_t timer_in_handler;
GBLREF volatile int4 exit_state;
@@ -57,10 +57,11 @@ void send_msg(int arg_count, ...)
{
va_list var;
sgmnt_addrs *csa;
+ jnlpool_addrs_ptr_t local_jnlpool; /* used by PTHREAD_CSA_FROM_GV_CUR_REGION */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
- csa = PTHREAD_CSA_FROM_GV_CUR_REGION;
+ PTHREAD_CSA_FROM_GV_CUR_REGION(csa, local_jnlpool);
VAR_START(var, arg_count);
send_msg_va(csa, arg_count, var);
va_end(var);
@@ -86,6 +87,7 @@ void send_msg_va(void *csa, int arg_count, va_list var)
va_list save_last_va_list_ptr;
boolean_t util_copy_saved = FALSE;
boolean_t freeze_needed = FALSE, was_holder;
+ jnlpool_addrs_ptr_t local_jnlpool; /* used by CHECK_IF_FREEZE_ON_ERROR_NEEDED and FREEZE_INSTANCE_IF_NEEDED */
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -110,7 +112,7 @@ void send_msg_va(void *csa, int arg_count, va_list var)
for (;;)
{
msg_id = (int) va_arg(var, VA_ARG_TYPE);
- CHECK_IF_FREEZE_ON_ERROR_NEEDED(csa, msg_id, freeze_needed, freeze_msg_id);
+ CHECK_IF_FREEZE_ON_ERROR_NEEDED(csa, msg_id, freeze_needed, freeze_msg_id, local_jnlpool);
--arg_count;
msg_string.addr = msg_buffer;
msg_string.len = SIZEOF(msg_buffer);
@@ -147,6 +149,6 @@ void send_msg_va(void *csa, int arg_count, va_list var)
* and conditionally enter a "forever" loop on wcs_sleep for unix debugging
*/
DEBUG_ONLY(nesting_level--;)
- FREEZE_INSTANCE_IF_NEEDED(csa, freeze_needed, freeze_msg_id);
+ FREEZE_INSTANCE_IF_NEEDED(csa, freeze_needed, freeze_msg_id, local_jnlpool);
PTHREAD_MUTEX_UNLOCK_IF_NEEDED(was_holder); /* release exclusive thread lock if needed */
}
diff --git a/sr_unix/set_zstatus.c b/sr_unix/set_zstatus.c
index 1e49efd..f525dbf 100644
--- a/sr_unix/set_zstatus.c
+++ b/sr_unix/set_zstatus.c
@@ -30,7 +30,6 @@
#include "gtmmsg.h"
GBLREF mval dollar_zstatus, dollar_zerror;
-GBLREF mval dollar_ztrap, dollar_etrap;
GBLREF stack_frame *zyerr_frame, *frame_pointer;
GBLREF mstr *err_act;
diff --git a/sr_unix/source_file.c b/sr_unix/source_file.c
index 2273221..6fca8d3 100755
--- a/sr_unix/source_file.c
+++ b/sr_unix/source_file.c
@@ -48,6 +48,7 @@ GBLREF stack_frame *frame_pointer;
GBLREF uint4 dollar_tlevel;
GBLREF unsigned char source_file_name[];
GBLREF unsigned short source_name_len;
+GBLREF short int source_line;
LITREF mval literal_null;
LITREF mval literal_notimeout;
@@ -76,6 +77,7 @@ error_def(ERR_MEMORY);
error_def(ERR_OBJFILERR);
error_def(ERR_SRCFILERR);
error_def(ERR_STACKOFLOW);
+error_def(ERR_LSINSERTED);
void compile_source_file(unsigned short flen, char *faddr, boolean_t MFtIsReqd)
{
@@ -241,7 +243,9 @@ bool open_source_file (void)
*/
int4 read_source_file (void)
{
+ static char extra_ch;
unsigned char *cp;
+ int4 read_len;
mval val;
DCL_THREADGBL_ACCESS;
@@ -250,16 +254,33 @@ int4 read_source_file (void)
tmp_list_dev = io_curr_device;
io_curr_device = compile_src_dev;
ESTABLISH_RET(read_source_ch, -1);
- op_readfl(&val, MAX_SRCLINE, (mval *)(dollar_tlevel ? &literal_zero : &literal_notimeout));
+ read_len = MAX_SRCLINE + (extra_ch ? 0 : 1); /* read up to 1 extra character in case of line > 8k */
+ op_readfl(&val, read_len, (mval *)(dollar_tlevel ? &literal_zero : &literal_notimeout));
REVERT;
+ if (extra_ch)
+ *((TREF(source_buffer)).addr++) = extra_ch; /* start with the overflow character from the last readfl */
memcpy((TREF(source_buffer)).addr, val.str.addr, val.str.len);
+ if (extra_ch)
+ { /* we had an overflow character from the last readfl */
+ extra_ch = '\0';
+ (TREF(source_buffer)).addr--;
+ val.str.len++;
+ }
cp = (unsigned char *)((TREF(source_buffer)).addr + val.str.len);
- *cp++ = '\n'; /* insert /n needed in checksum calculation */
- *cp = '\0';
- if ( FALSE != io_curr_device.in->dollar.zeof )
+ (TREF(source_buffer)).len = val.str.len;
+ if (MAX_SRCLINE < val.str.len)
+ { /* Emit a warning */
+ extra_ch = *(--cp); /* save the overflow character */
+ dec_err(VARLSTCNT(4) ERR_LSINSERTED, 3, source_line, source_name_len, source_file_name);
+ if (1 < source_line)
+ source_line--;
+ } else
+ (TREF(source_buffer)).len++;
+ *cp = '\n'; /* insert \n needed in checksum calculation */
+ *(++cp) = '\0'; /* UNIX string terminator */
+ if (FALSE != io_curr_device.in->dollar.zeof)
return -1;
- io_curr_device = tmp_list_dev; /* restore list file after reading if it's opened */
- (TREF(source_buffer)).len = val.str.len + 1;
+ io_curr_device = tmp_list_dev; /* restore list file after reading in case it's opened */
return (int4)((TREF(source_buffer)).len);
}
diff --git a/sr_unix/ss_initiate.c b/sr_unix/ss_initiate.c
index d71fd13..d462346 100644
--- a/sr_unix/ss_initiate.c
+++ b/sr_unix/ss_initiate.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2009-2016 Fidelity National Information *
+ * Copyright (c) 2009-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -264,7 +264,7 @@ boolean_t ss_initiate(gd_region *reg, /* Region in which snapshot has to be s
assert(ss_lock_held_by_us(reg));
ss_release_lock(reg);
/* For a readonly database for the current process, we better have the region frozen */
- assert(!reg->read_only || FROZEN_HARD(csd));
+ assert(!reg->read_only || FROZEN_HARD(csa));
/* ============================ STEP 1 : Shadow file name construction ==============================
*
* --> Directory is taken from GTM_SNAPTMPDIR, if available, else GTM_BAK_TEMPDIR_LOG_NAME_UC, if available,
@@ -289,6 +289,7 @@ boolean_t ss_initiate(gd_region *reg, /* Region in which snapshot has to be s
tempdir_log.addr = GTM_SNAPTMPDIR;
tempdir_log.len = STR_LIT_LEN(GTM_SNAPTMPDIR);
tempfilename = tempdir_full.addr = tempdir_full_buffer;
+ tempdir_full.len = SIZEOF(tempdir_full_buffer);
/* Check if the environment variable is defined or not.
* Side-effect: tempdir_trans.addr = tempdir_trans_buffer irrespective of whether TRANS_LOG_NAME
* succeeded or not.
diff --git a/sr_unix/trigger_delete.c b/sr_unix/trigger_delete.c
index 533416a..56bf3be 100644
--- a/sr_unix/trigger_delete.c
+++ b/sr_unix/trigger_delete.c
@@ -52,12 +52,18 @@
#include "repl_msg.h"
#include "gtmsource.h"
#include "gtm_reservedDB.h"
+#include "is_file_identical.h"
+#include "anticipatory_freeze.h"
+#include "gtm_repl_multi_inst.h" /* for DISALLOW_MULTIINST_UPDATE_IN_TP */
GBLREF boolean_t dollar_ztrigger_invoked;
+GBLREF sgm_info *first_sgm_info;
GBLREF gd_addr *gd_header;
GBLREF gd_region *gv_cur_region;
GBLREF gv_key *gv_currkey;
GBLREF gv_namehead *gv_target;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF sgm_info *sgm_info_ptr;
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF uint4 dollar_tlevel;
@@ -331,6 +337,7 @@ boolean_t trigger_delete_name(char *trigger_name, uint4 trigger_name_len, uint4
gd_region *save_gv_cur_region, *lgtrig_reg;
gv_namehead *save_gv_target;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
mval trig_gbl;
mval *trigger_count;
char trigvn[MAX_MIDENT_LEN + 1];
@@ -395,6 +402,7 @@ boolean_t trigger_delete_name(char *trigger_name, uint4 trigger_name_len, uint4
if (NULL == csa) /* not BG or MM access method */
continue;
/* gv_target now points to ^#t in region "reg" */
+ DISALLOW_MULTIINST_UPDATE_IN_TP(dollar_tlevel, jnlpool_head, csa, first_sgm_info, TRUE);
/* To write the LGTRIG logical jnl record, choose some region that has journaling enabled */
if (!reg->read_only && !jnl_format_done && JNL_WRITE_LOGICAL_RECS(csa))
lgtrig_reg = reg;
@@ -409,7 +417,7 @@ boolean_t trigger_delete_name(char *trigger_name, uint4 trigger_name_len, uint4
{
if (reg->read_only)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_TRIGMODREGNOTRW, 2, REG_LEN_STR(reg));
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
ptr = trig_gbl.str.addr;
trigvn_len = MIN(trig_gbl.str.len, MAX_MIDENT_LEN);
STRNLEN(ptr, trigvn_len, trigvn_len);
@@ -482,7 +490,8 @@ boolean_t trigger_delete_name(char *trigger_name, uint4 trigger_name_len, uint4
}
}
trigger_count->mvtype = 0; /* allow stp_gcol to release the current contents if necessary */
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr,
+ save_jnlpool);
triggers_deleted++;
}
if (!wildcard)
@@ -510,7 +519,7 @@ boolean_t trigger_delete_name(char *trigger_name, uint4 trigger_name_len, uint4
* case this is a NO-OP trigger operation that wont update any ^#t records and we still
* want to write a TLGTRIG/ULGTRIG journal record. Hence the need to do this.
*/
- JNLPOOL_INIT_IF_NEEDED(csa, csa->hdr, csa->nl);
+ JNLPOOL_INIT_IF_NEEDED(csa, csa->hdr, csa->nl, SCNDDBNOUPD_CHECK_TRUE);
assert(dollar_tlevel);
/* below is needed to set update_trans TRUE on this region even if NO db updates happen to ^#t nodes */
T_BEGIN_SETORKILL_NONTP_OR_TP(ERR_TRIGLOADFAIL);
@@ -811,6 +820,7 @@ void trigger_delete_all(char *trigger_rec, uint4 len, uint4 *trig_stats)
if (NULL == csa) /* not BG or MM access method */
continue;
/* gv_target now points to ^#t in region "reg" */
+ DISALLOW_MULTIINST_UPDATE_IN_TP(dollar_tlevel, jnlpool_head, csa, first_sgm_info, TRUE);
/* To write the LGTRIG logical jnl record, choose some region that has journaling enabled */
if (!reg->read_only && !jnl_format_done && JNL_WRITE_LOGICAL_RECS(csa))
lgtrig_reg = reg;
@@ -937,7 +947,7 @@ void trigger_delete_all(char *trigger_rec, uint4 len, uint4 *trig_stats)
*/
GVTR_SWITCH_REG_AND_HASHT_BIND_NAME(lgtrig_reg);
csa = cs_addrs;
- JNLPOOL_INIT_IF_NEEDED(csa, csa->hdr, csa->nl); /* see previous usage for comment on why it is needed */
+ JNLPOOL_INIT_IF_NEEDED(csa, csa->hdr, csa->nl, SCNDDBNOUPD_CHECK_TRUE); /* see previous use for why it is needed */
assert(dollar_tlevel);
T_BEGIN_SETORKILL_NONTP_OR_TP(ERR_TRIGLOADFAIL); /* needed to set update_trans TRUE on this region
* even if NO db updates happen to ^#t nodes. */
diff --git a/sr_unix/trigger_fill_xecute_buffer.c b/sr_unix/trigger_fill_xecute_buffer.c
index 4bb3bf3..044acee 100644
--- a/sr_unix/trigger_fill_xecute_buffer.c
+++ b/sr_unix/trigger_fill_xecute_buffer.c
@@ -44,10 +44,8 @@
#include "trigger_fill_xecute_buffer.h"
#include "trigger_gbl_fill_xecute_buffer.h"
#include "gtm_trigger_trc.h"
-#ifdef DEBUG
#include "repl_msg.h"
-#include "gtmsource.h" /* for jnlpool_addrs */
-#endif
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF sgmnt_addrs *cs_addrs;
@@ -57,8 +55,8 @@ GBLREF gd_region *gv_cur_region;
GBLREF gv_namehead *gv_target;
#ifdef DEBUG
GBLREF boolean_t is_updproc;
-GBLREF jnlpool_addrs jnlpool;
#endif
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF sgm_info *sgm_info_ptr;
GBLREF boolean_t skip_INVOKE_RESTART;
GBLREF int tprestart_state;
@@ -151,11 +149,12 @@ STATICFNDEF void trigger_fill_xecute_buffer_read_trigger_source(gv_trigger_t *tr
gv_namehead *save_gv_target;
gd_region *save_gv_cur_region;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
assert(0 < dollar_tlevel);
assert(NULL != trigdsc);
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
gvt_trigger = trigdsc->gvt_trigger; /* We now know our base block now */
index = trigdsc - gvt_trigger->gv_trig_array + 1; /* We now know our trigger index value */
@@ -188,8 +187,8 @@ STATICFNDEF void trigger_fill_xecute_buffer_read_trigger_source(gv_trigger_t *tr
*/
DBGTRIGR((stderr, "trigger_fill_xecute_buffer_read_trigger_source: stale trigger view\n"));
assert(CDB_STAGNATE > t_tries);
- assert(!is_updproc || (jnlpool.repl_inst_filehdr->is_supplementary
- && !jnlpool.jnlpool_ctl->upd_disabled));
+ assert(!is_updproc || (jnlpool && jnlpool->repl_inst_filehdr->is_supplementary
+ && !jnlpool->jnlpool_ctl->upd_disabled));
t_retry(cdb_sc_triggermod);
}
SET_GVTARGET_TO_HASHT_GBL(csa);
@@ -198,7 +197,7 @@ STATICFNDEF void trigger_fill_xecute_buffer_read_trigger_source(gv_trigger_t *tr
xecute_buff.addr = trigger_gbl_fill_xecute_buffer(gbl.addr, gbl.len, &trig_index, NULL, (int4 *)&xecute_buff.len);
trigdsc->xecute_str.str = xecute_buff;
/* Restore gv_target/gv_currkey which need to be kept in sync */
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
return;
}
#endif /* GTM_TRIGGER */
diff --git a/sr_unix/trigger_gbl_fill_xecute_buffer.c b/sr_unix/trigger_gbl_fill_xecute_buffer.c
index 55701ce..5f22678 100644
--- a/sr_unix/trigger_gbl_fill_xecute_buffer.c
+++ b/sr_unix/trigger_gbl_fill_xecute_buffer.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2010-2016 Fidelity National Information *
+ * Copyright (c) 2010-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -32,10 +32,8 @@
#include "gtmimagename.h"
#include "filestruct.h" /* for FILE_INFO, needed by REG2CSA */
#include "have_crit.h"
-#ifdef DEBUG
#include "repl_msg.h"
#include "gtmsource.h" /* for jnlpool_addrs */
-#endif
LITREF mval literal_ten;
@@ -54,8 +52,8 @@ GBLREF gd_region *gv_cur_region;
GBLREF gv_key *gv_currkey;
#ifdef DEBUG
GBLREF boolean_t is_updproc;
-GBLREF jnlpool_addrs jnlpool;
#endif
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF unsigned int t_tries;
GBLREF unsigned char t_fail_hist[CDB_MAX_TRIES];
@@ -136,8 +134,8 @@ char *trigger_gbl_fill_xecute_buffer(char *trigvn, int trigvn_len, mval *trig_in
* supplementary instance. Assert accordingly. Note similar asserts occur in t_end.c and
* tp_tend.c.
*/
- assert(!is_updproc || (jnlpool.repl_inst_filehdr->is_supplementary
- && !jnlpool.jnlpool_ctl->upd_disabled));
+ assert(!is_updproc || (jnlpool && jnlpool->repl_inst_filehdr->is_supplementary
+ && !jnlpool->jnlpool_ctl->upd_disabled));
DBGTRIGR((stderr, "trigger_gbl_fill_xecute_buffer: multiline not found, retry\n"));
/* Assert that the cycle has changed but in order to properly do the assert, we need a memory
* barrier since cs_data->db_trigger_cycle could be stale in our cache.
diff --git a/sr_unix/trigger_locate_andor_load.c b/sr_unix/trigger_locate_andor_load.c
index 3b4300d..04f3fca 100644
--- a/sr_unix/trigger_locate_andor_load.c
+++ b/sr_unix/trigger_locate_andor_load.c
@@ -35,6 +35,8 @@
#include "tp_frame.h"
#include "gvnh_spanreg.h"
#include "trigger_read_andor_locate.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
@@ -44,6 +46,7 @@ GBLREF tp_frame *tp_pointer;
GBLREF gv_key *gv_currkey;
GBLREF gd_region *gv_cur_region;
GBLREF sgm_info *sgm_info_ptr;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
LITREF mval literal_batch;
@@ -92,6 +95,7 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
gvt_trigger_t *gvt_trigger;
rtn_tabent *rttabent;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
rhdtyp *rtn_vector;
sgmnt_addrs *csa, *regcsa;
sgmnt_data_ptr_t csd;
@@ -161,7 +165,7 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
rtn_vector = NULL;
DBGTRIGR((stderr, "trigger_locate_andor_load: routine was %sfound (1)\n", (NULL == rtn_vector)?"not ":""));
/* If we have the trigger routine header, do some validation on it, else keep looking */
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
runtime_disambiguator_specified = ('#' != trigname->addr[trigname->len - 1]);
if (!runtime_disambiguator_specified && (NULL != reg))
{ /* Region-name has been specified and no runtime-disambiguator specified. Need to further refine the
@@ -171,7 +175,7 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
rtn_name.len = MIN(trigname->len, MAX_MIDENT_LEN);
rtn_name.addr = trigname->addr;
if (!reg->open)
- gv_init_reg(reg); /* Open the region before obtaining "csa" */
+ gv_init_reg(reg, NULL); /* Open the region before obtaining "csa" */
regcsa = &FILE_INFO(reg)->s_addrs;
assert('#' == rtn_name.addr[rtn_name.len - 1]);
for ( ; rttabent <= rtn_names_end; rttabent++)
@@ -217,7 +221,7 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
if (runtime_disambiguator_specified
|| (TRIG_FAILURE_RC == trigger_source_read_andor_verify(trigname, &rtn_vector)))
{
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -242,10 +246,11 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
* treat it as a failure to find the trigger.
*/
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
if (&FILE_INFO(reg)->s_addrs != csa)
{
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr,
+ save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -257,7 +262,8 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
if (((NULL == gvnh_reg->gvspan) && (gv_cur_region != reg))
|| ((NULL != gvnh_reg->gvspan) && !gvnh_spanreg_ismapped(gvnh_reg, gd_header, reg)))
{
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr,
+ save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -266,7 +272,7 @@ int trigger_locate_andor_load(mstr *trigname, rhdtyp **rtn_vec)
}
DBGTRIGR((stderr, "trigger_locate_andor_load: leaving with source from rtnhdr 0x%lx\n",
(*rtn_vec) ? (*((rhdtyp **)rtn_vec))->trigr_handle : NULL));
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
assert(NULL != rtn_vector);
assert(trigdsc == rtn_vector->trigr_handle);
*rtn_vec = rtn_vector;
diff --git a/sr_unix/trigger_select.c b/sr_unix/trigger_select.c
index 03a8888..1b07c1a 100644
--- a/sr_unix/trigger_select.c
+++ b/sr_unix/trigger_select.c
@@ -57,6 +57,8 @@
#include "hashtab_mname.h"
#include "tp_frame.h"
#include "tp_restart.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
@@ -68,6 +70,7 @@ GBLREF gv_key *gv_altkey;
GBLREF io_pair io_curr_device;
GBLREF io_pair io_std_device; /* standard device */
GBLREF sgm_info *sgm_info_ptr;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF int (*op_open_ptr)(mval *v, mval *p, mval *t, mval *mspace);
GBLREF uint4 dollar_tlevel;
GBLREF unsigned char t_fail_hist[CDB_MAX_TRIES];
@@ -728,6 +731,7 @@ STATICFNDEF boolean_t trigger_select(char *select_list, uint4 select_list_len)
gd_region *save_gv_cur_region;
gv_namehead *save_gv_target;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
boolean_t select_status;
gvnh_reg_t *gvnh_reg;
gd_binding *map, *start_map, *end_map;
@@ -788,7 +792,7 @@ STATICFNDEF boolean_t trigger_select(char *select_list, uint4 select_list_len)
/* Skip only if the previous global is the same as the current */
if ((prev_len == gbl_len) && (0 == memcmp(prev_ptr, ptr1, gbl_len)))
continue;
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
prev_ptr = ptr1;
prev_len = gbl_len;
start_map = gv_srch_map(gd_header, ptr1, gbl_len, SKIP_BASEDB_OPEN_FALSE);
@@ -853,7 +857,7 @@ STATICFNDEF boolean_t trigger_select(char *select_list, uint4 select_list_len)
len1--; /* drop the trailing # sign */
gvname.var_name.addr = sel_ptr;
gvname.var_name.len = len1;
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
for (reg = gd_header->regions, reg_top = reg + gd_header->n_regions; reg < reg_top; reg++)
{
if (IS_STATSDB_REGNAME(reg))
@@ -867,7 +871,7 @@ STATICFNDEF boolean_t trigger_select(char *select_list, uint4 select_list_len)
write_gbls_or_names(gvname.var_name.addr, gvname.var_name.len, trig_name);
}
}
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
} while (NULL != (sel_ptr = STRTOK_R(NULL, ",", &strtok_ptr))); /* Embedded assignment is intended */
}
return select_status;
diff --git a/sr_unix/trigger_source_read_andor_verify.c b/sr_unix/trigger_source_read_andor_verify.c
index 4d6df52..5dd743f 100644
--- a/sr_unix/trigger_source_read_andor_verify.c
+++ b/sr_unix/trigger_source_read_andor_verify.c
@@ -59,6 +59,8 @@
#include "gvnh_spanreg.h"
#include "min_max.h"
#include "io.h"
+#include "repl_msg.h" /* for gtmsource.h */
+#include "gtmsource.h" /* for jnlpool_addrs_ptr_t */
GBLREF uint4 dollar_tlevel;
GBLREF sgmnt_addrs *cs_addrs;
@@ -67,6 +69,7 @@ GBLREF gd_addr *gd_header;
GBLREF gv_key *gv_currkey;
GBLREF gd_region *gv_cur_region;
GBLREF sgm_info *sgm_info_ptr;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF gv_namehead *gv_target;
GBLREF int tprestart_state;
GBLREF tp_frame *tp_pointer;
@@ -317,6 +320,7 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
rhdtyp *rtn_vector;
rtn_tabent *rttabent;
sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
sgmnt_addrs *csa, *regcsa;
sgmnt_data_ptr_t csd;
boolean_t db_trigger_cycle_mismatch, ztrig_cycle_mismatch, needs_reload = FALSE;
@@ -326,7 +330,7 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
assert(dollar_tlevel); /* A TP wrap should have been done by the caller if needed */
DBGTRIGR((stderr, "trigger_source_raov: Entered\n"));
/* Before we try to save anything, see if there is something to save and initialize stuff if not */
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
if (NULL != *rtn_vec)
rtn_vector = *rtn_vec;
else if (find_rtn_tabent(&rttabent, trigname))
@@ -346,7 +350,7 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
rtn_name.len = MIN(trigname->len, MAX_MIDENT_LEN);
rtn_name.addr = trigname->addr;
if (!reg->open)
- gv_init_reg(reg); /* Open the region before obtaining "csa" */
+ gv_init_reg(reg, NULL); /* Open the region before obtaining "csa" */
regcsa = &FILE_INFO(reg)->s_addrs;
assert('#' == rtn_name.addr[rtn_name.len - 1]);
for ( ; rttabent <= rtn_names_end; rttabent++)
@@ -390,7 +394,7 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
if (runtime_disambiguator_specified
|| (TRIG_FAILURE == trigger_source_raov_trigload(trigname, &trigdsc, reg)))
{
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -415,10 +419,11 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
* treat it as a failure to find the trigger.
*/
if (!reg->open)
- gv_init_reg(reg);
+ gv_init_reg(reg, NULL);
if (&FILE_INFO(reg)->s_addrs != csa)
{
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr,
+ save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -430,7 +435,8 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
if (((NULL == gvnh_reg->gvspan) && (gv_cur_region != reg))
|| ((NULL != gvnh_reg->gvspan) && !gvnh_spanreg_ismapped(gvnh_reg, gd_header, reg)))
{
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr,
+ save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -449,7 +455,8 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
&& (NULL == rtn_vector->source_code))
{
/* A reload failed (deleted or ^#t busted) and there is nothing cached, issue an error */
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr,
+ save_jnlpool);
ISSUE_TRIGNAMENF_ERROR_IF_APPROPRIATE(trigname);
return TRIG_FAILURE_RC;
}
@@ -462,7 +469,7 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
if (NULL != trigdsc->rtn_desc.rt_adr)
{
DBGTRIGR((stderr, "trigger_source_raov: trigger already compiled, all done\n"));
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
*rtn_vec = rtn_vector;
return 0;
}
@@ -498,7 +505,7 @@ STATICFNDEF int trigger_source_raov(mstr *trigname, gd_region *reg, rhdtyp **rtn
{
assert(rtn_vector && (NULL !=rtn_vector->source_code));
}
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
assert(rtn_vector);
assert(trigdsc == rtn_vector->trigr_handle);
*rtn_vec = rtn_vector;
diff --git a/sr_unix/trigger_update.c b/sr_unix/trigger_update.c
index e9e4691..2799551 100644
--- a/sr_unix/trigger_update.c
+++ b/sr_unix/trigger_update.c
@@ -66,6 +66,9 @@
#include "change_reg.h" /* for "change_reg" prototype */
#include "gvnh_spanreg.h" /* for "gvnh_spanreg_subs_gvt_init" prototype */
#include "mu_interactive.h" /* for prompt looping */
+#include "is_file_identical.h"
+#include "anticipatory_freeze.h"
+#include "gtm_repl_multi_inst.h" /* for DISALLOW_MULTIINST_UPDATE_IN_TP */
GBLREF sgmnt_data_ptr_t cs_data;
GBLREF uint4 dollar_tlevel;
@@ -75,6 +78,8 @@ GBLREF gd_region *gv_cur_region;
GBLREF gv_key *gv_currkey;
GBLREF gd_addr *gd_header;
GBLREF io_pair io_curr_device;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool_head;
GBLREF trans_num local_tn;
GBLREF gv_namehead *reset_gv_target;
GBLREF sgm_info *sgm_info_ptr;
@@ -428,16 +433,17 @@ STATICFNDEF int4 update_trigger_name(char *trigvn, int trigvn_len, int trigger_i
*/
boolean_t trigger_name_search(char *trigger_name, uint4 trigger_name_len, mval *val, gd_region **srch_reg)
{
- boolean_t name_found;
- char *ptr, *ptr2;
- gd_region *reg, *reg_top;
- gd_region *save_gv_cur_region;
- gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
- gv_namehead *save_gv_target;
- gvnh_reg_t *gvnh_reg;
- int len;
- mname_entry gvname;
- sgm_info *save_sgm_info_ptr;
+ boolean_t name_found;
+ char *ptr, *ptr2;
+ gd_region *reg, *reg_top;
+ gd_region *save_gv_cur_region;
+ gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
+ gv_namehead *save_gv_target;
+ gvnh_reg_t *gvnh_reg;
+ int len;
+ mname_entry gvname;
+ sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
/* Example trigger name could be x#1#A:BREG to indicate trigger on global ^x with an autogenerated name x#1
* that exists in multiple regions and hence had a runtime disambiguator of x#1#A. The :BREG is a region-level
@@ -459,7 +465,7 @@ boolean_t trigger_name_search(char *trigger_name, uint4 trigger_name_len, mval *
* on the max # of duplicated auto-generated names.
*/
assert(0 < trigger_name_len);
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
name_found = FALSE;
reg = *srch_reg;
if (NULL != reg)
@@ -510,7 +516,7 @@ boolean_t trigger_name_search(char *trigger_name, uint4 trigger_name_len, mval *
name_found = TRUE;
break;
}
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
return name_found;
}
@@ -518,15 +524,16 @@ boolean_t trigger_name_search(char *trigger_name, uint4 trigger_name_len, mval *
boolean_t check_unique_trigger_name_full(char **values, uint4 *value_len, mval *val, boolean_t *new_match,
char *trigvn, int trigvn_len, stringkey *kill_trigger_hash, stringkey *set_trigger_hash)
{
- boolean_t overall_name_found, this_name_found;
- gd_region *reg, *reg_top;
- gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
- gd_region *save_gv_cur_region;
- gv_namehead *save_gv_target;
- sgm_info *save_sgm_info_ptr;
- int set_index, kill_index;
- boolean_t db_matched_set, db_matched_kill, full_match, trigger_exists;
- mval setname, killname;
+ boolean_t overall_name_found, this_name_found;
+ gd_region *reg, *reg_top;
+ gv_key save_currkey[DBKEYALLOC(MAX_KEY_SZ)];
+ gd_region *save_gv_cur_region;
+ gv_namehead *save_gv_target;
+ sgm_info *save_sgm_info_ptr;
+ jnlpool_addrs_ptr_t save_jnlpool;
+ int set_index, kill_index;
+ boolean_t db_matched_set, db_matched_kill, full_match, trigger_exists;
+ mval setname, killname;
DCL_THREADGBL_ACCESS;
SETUP_THREADGBL_ACCESS;
@@ -540,7 +547,7 @@ boolean_t check_unique_trigger_name_full(char **values, uint4 *value_len, mval *
*new_match = TRUE;
if (0 == value_len[TRIGNAME_SUB])
return TRUE;
- SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ SAVE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
overall_name_found = FALSE;
for (reg = gd_header->regions, reg_top = reg + gd_header->n_regions; reg < reg_top; reg++)
{
@@ -570,7 +577,7 @@ boolean_t check_unique_trigger_name_full(char **values, uint4 *value_len, mval *
}
}
}
- RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr);
+ RESTORE_REGION_INFO(save_currkey, save_gv_target, save_gv_cur_region, save_sgm_info_ptr, save_jnlpool);
return !overall_name_found;
}
@@ -1536,13 +1543,14 @@ STATICFNDEF trig_stats_t trigupdrec_reg(char *trigvn, int trigvn_len, boolean_t
if (gv_cur_region->read_only)
rts_error_csa(CSA_ARG(csa) VARLSTCNT(4) ERR_TRIGMODREGNOTRW, 2, REG_LEN_STR(gv_cur_region));
assert(cs_addrs == gv_target->gd_csa);
+ DISALLOW_MULTIINST_UPDATE_IN_TP(dollar_tlevel, jnlpool_head, csa, first_sgm_info, TRUE);
if (!*jnl_format_done && JNL_WRITE_LOGICAL_RECS(csa))
{ /* Attach to jnlpool if replication is turned on. Normally SET or KILL of the ^#t records take care of this
* but in case this is a NO-OP trigger operation that wont happen and we still want to write a
* TLGTRIG/ULGTRIG journal record. Hence the need to do this. Also write a LGTRIG record in just one region
* in case this is a global spanning multiple regions.
*/
- JNLPOOL_INIT_IF_NEEDED(csa, csa->hdr, csa->nl);
+ JNLPOOL_INIT_IF_NEEDED(csa, csa->hdr, csa->nl, SCNDDBNOUPD_CHECK_TRUE);
assert(dollar_tlevel);
T_BEGIN_SETORKILL_NONTP_OR_TP(ERR_TRIGLOADFAIL); /* needed to set update_trans TRUE on this region
* even if NO db updates happen to ^#t nodes. */
diff --git a/sr_unix/ttt.txt b/sr_unix/ttt.txt
index 1b1293b..bd4d633 100755
--- a/sr_unix/ttt.txt
+++ b/sr_unix/ttt.txt
@@ -564,7 +564,6 @@ OC_GVZWRITE: jsb xfer.xf_restartpc
pushl val.3
pushl val.2
calls val.1,xfer.xf_gvzwrite
-OC_HALT: calls #0,xfer.xf_halt
OC_HANG: jsb xfer.xf_restartpc
pushab val.1
calls #1,xfer.xf_hang
@@ -949,8 +948,9 @@ OC_ZGOTO: pushl val.1
pushab val.3
pushab val.2
jsb xfer.xf_zgoto
-OC_ZHALT: pushab val.1
- calls #1,xfer.xf_zhalt
+OC_ZHALT: pushl val.1
+ pushl val.2
+ calls #2,xfer.xf_zhalt
OC_ZHELP: pushab val.2
pushab val.1
calls #2,xfer.xf_zhelp
diff --git a/sr_unix/util_exit_handler.c b/sr_unix/util_exit_handler.c
old mode 100755
new mode 100644
index aa50fe8..085fd2c
--- a/sr_unix/util_exit_handler.c
+++ b/sr_unix/util_exit_handler.c
@@ -24,6 +24,8 @@
#include "util.h"
#include "gv_rundown.h"
#include "print_exit_stats.h"
+#include "repl_msg.h" /* needed for jnlpool_addrs_ptr_t */
+#include "gtmsource.h" /* needed for jnlpool_addrs_ptr_t */
#include "secshr_db_clnup.h"
#include "gtmimagename.h"
#include "dpgbldir.h"
diff --git a/sr_unix/util_output.c b/sr_unix/util_output.c
old mode 100755
new mode 100644
index 067b503..17dc8da
--- a/sr_unix/util_output.c
+++ b/sr_unix/util_output.c
@@ -61,8 +61,8 @@ GBLREF io_pair io_std_device;
GBLREF boolean_t blocksig_initialized;
GBLREF sigset_t block_sigsent;
GBLREF boolean_t err_same_as_out;
-GBLREF jnlpool_ctl_ptr_t jnlpool_ctl;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF gd_addr *gd_header;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF boolean_t is_src_server;
GBLREF boolean_t is_rcvr_server;
GBLREF boolean_t is_updproc;
@@ -647,7 +647,7 @@ void util_out_send_oper(char *addr, unsigned int len)
uint4 ustatus;
int4 status;
unsigned int bufsize, file_name_len, *fn_len;
- boolean_t ret;
+ boolean_t ret, inst_from_gld;
repl_inst_hdr replhdr;
int fd;
upd_helper_ctl_ptr_t upd_helper_ctl;
@@ -706,16 +706,15 @@ void util_out_send_oper(char *addr, unsigned int len)
assertpro(FALSE);
}
BUILD_FACILITY(img_type);
- if (NULL != jnlpool_ctl)
+ if ((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl) && (NULL != jnlpool->repl_inst_filehdr))
{ /* Read instace file name from jnlpool */
INSERT_MARKER;
- BUILD_FACILITY((char *)jnlpool.repl_inst_filehdr->inst_info.this_instname);
+ BUILD_FACILITY((char *)jnlpool->repl_inst_filehdr->inst_info.this_instname);
} else
{ /* Read instance name from instance file */
fn_len = &file_name_len;
bufsize = MAX_FN_LEN + 1;
- log_nam.addr = GTM_REPL_INSTANCE;
- log_nam.len = SIZEOF(GTM_REPL_INSTANCE) - 1;
+ SETUP_INST_INFO(gd_header, log_nam, inst_from_gld); /* set log_nam from GLD or environment variable */
trans_name.addr = temp_inst_fn;
ret = FALSE;
GET_INSTFILE_NAME(dont_sendmsg_on_log2long, return_on_error);
diff --git a/sr_unix/versions.csh b/sr_unix/versions.csh
index 55171cb..3df1581 100755
--- a/sr_unix/versions.csh
+++ b/sr_unix/versions.csh
@@ -20,6 +20,6 @@
############################################
# gtm_curpro is the current production version
-setenv gtm_curpro "V63001A"
+setenv gtm_curpro "V63002"
# gtm_verno is the current production version
setenv gtm_verno $gtm_curpro
diff --git a/sr_unix/wait_for_disk_space.c b/sr_unix/wait_for_disk_space.c
index 6e41446..e892d1f 100644
--- a/sr_unix/wait_for_disk_space.c
+++ b/sr_unix/wait_for_disk_space.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2012-2016 Fidelity National Information *
+ * Copyright (c) 2012-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -27,7 +27,7 @@
GBLDEF uint4 lseekwrite_target;
#endif
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF int4 exit_state;
GBLREF int4 exi_condition;
GBLREF int4 forced_exit_err;
@@ -49,6 +49,8 @@ void wait_for_disk_space(sgmnt_addrs *csa, char *fn, int fd, off_t offset, char
boolean_t freeze_cleared;
char wait_comment[MAX_FREEZE_COMMENT_LEN];
sgmnt_addrs *repl_csa;
+ jnlpool_addrs_ptr_t save_jnlpool;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INST_FREEZE_ON_NOSPC_ENABLED */
intrpt_state_t prev_intrpt_state;
# ifdef DEBUG
uint4 lcl_lseekwrite_target;
@@ -61,13 +63,21 @@ void wait_for_disk_space(sgmnt_addrs *csa, char *fn, int fd, off_t offset, char
/* Reset global to safe state after noting it down in a local (just in case there are errors in this function) */
lcl_lseekwrite_target = lseekwrite_target; lseekwrite_target = LSEEKWRITE_IS_TO_NONE;
# endif
+ save_jnlpool = jnlpool;
+ if (csa->jnlpool && (jnlpool != csa->jnlpool))
+ jnlpool = csa->jnlpool;
/* If anticipatory freeze scheme is not in effect, or if this database does not care about it,
* or DSKNOSPCAVAIL is not configured as a custom error, return right away.
*/
- if (!INST_FREEZE_ON_NOSPC_ENABLED(csa))
+ if (!INST_FREEZE_ON_NOSPC_ENABLED(csa, local_jnlpool))
+ {
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return;
+ }
fn_len = STRLEN(fn);
- repl_csa = &FILE_INFO(jnlpool.jnlpool_dummy_reg)->s_addrs;
+ assert(NULL != jnlpool);
+ repl_csa = &FILE_INFO(jnlpool->jnlpool_dummy_reg)->s_addrs;
was_crit = repl_csa->now_crit;
reg = csa->region;
if (!was_crit)
@@ -82,16 +92,18 @@ void wait_for_disk_space(sgmnt_addrs *csa, char *fn, int fd, off_t offset, char
* case, a normal grab_lock is fine (is_blocking_wait = TRUE).
*/
if (csa->now_crit)
- grab_lock(jnlpool.jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
- else if (FALSE == grab_lock(jnlpool.jnlpool_dummy_reg, FALSE, GRAB_LOCK_ONLY))
+ grab_lock(jnlpool->jnlpool_dummy_reg, TRUE, GRAB_LOCK_ONLY);
+ else if (FALSE == grab_lock(jnlpool->jnlpool_dummy_reg, FALSE, GRAB_LOCK_ONLY))
{
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_ENOSPCQIODEFER, 2, fn_len, fn);
*save_errno = ERR_ENOSPCQIODEFER;
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
return;
}
}
/* We either came into this function holding journal pool lock or grab_lock() succeeded */
- assert(NULL != jnlpool.jnlpool_ctl);
+ assert((NULL != jnlpool) && (NULL != jnlpool->jnlpool_ctl));
assert(NULL != fn); /* if "csa" is non-NULL, fn better be non-NULL as well */
/* The "send_msg" of DSKNOSPCAVAIL done below will set instance freeze (the configuration file includes it). After that, we
* will keep retrying the IO waiting for disk space to become available. If yes, we will clear the freeze. Until that is
@@ -127,7 +139,7 @@ void wait_for_disk_space(sgmnt_addrs *csa, char *fn, int fd, off_t offset, char
/* If some other process froze the instance and changed the comment, a retry of the
* LSEEKWRITE may not be appropriate, so just loop waiting for the freeze to be lifted.
*/
- if (IS_REPL_INST_FROZEN && (STRCMP(wait_comment, jnlpool.jnlpool_ctl->freeze_comment) != 0))
+ if (IS_REPL_INST_FROZEN && (STRCMP(wait_comment, jnlpool->jnlpool_ctl->freeze_comment) != 0))
{
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_DSKNOSPCBLOCKED, 2, fn_len, fn);
WAIT_FOR_REPL_INST_UNFREEZE(csa)
@@ -143,14 +155,17 @@ void wait_for_disk_space(sgmnt_addrs *csa, char *fn, int fd, off_t offset, char
/* Report that we were able to continue whether we are still frozen or not. */
send_msg_csa(CSA_ARG(NULL) VARLSTCNT(4) ERR_DSKSPCAVAILABLE, 2, fn_len, fn);
/* Only report if we were the process to set the current freeze comment; otherwise someone else reported it. */
- if (STRCMP(wait_comment, jnlpool.jnlpool_ctl->freeze_comment) == 0)
+ if (STRCMP(wait_comment, jnlpool->jnlpool_ctl->freeze_comment) == 0)
{
CLEAR_ANTICIPATORY_FREEZE(freeze_cleared); /* sets freeze_cleared */
REPORT_INSTANCE_UNFROZEN(freeze_cleared);
}
*save_errno = tmp_errno;
+ local_jnlpool = jnlpool;
+ if (save_jnlpool != jnlpool)
+ jnlpool = save_jnlpool;
ENABLE_INTERRUPTS(INTRPT_IN_WAIT_FOR_DISK_SPACE, prev_intrpt_state);
if (!was_crit)
- rel_lock(jnlpool.jnlpool_dummy_reg);
+ rel_lock(local_jnlpool->jnlpool_dummy_reg);
return;
}
diff --git a/sr_unix/wcs_clean_dbsync.c b/sr_unix/wcs_clean_dbsync.c
old mode 100755
new mode 100644
index fdc8fb3..529fbfd
--- a/sr_unix/wcs_clean_dbsync.c
+++ b/sr_unix/wcs_clean_dbsync.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2016 Fidelity National Information *
+ * Copyright (c) 2001-2017 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -32,6 +32,8 @@
#include "timers.h" /* for TIM_DEFER_DBSYNC #define */
#include "gdsbgtr.h" /* for the BG_TRACE_PRO macros */
#include "gtmio.h" /* for the GET_LSEEK_FLAG macro */
+#include "repl_msg.h" /* needed for gtmsource.h */
+#include "gtmsource.h" /* needed for jnlpool_addrs typedef */
#include "wcs_clean_dbsync.h"
#include "wcs_flu.h"
#include "lockconst.h"
@@ -45,6 +47,7 @@
GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data_ptr_t cs_data;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF volatile int4 crit_count;
GBLREF volatile boolean_t in_mutex_deadlock_check;
GBLREF volatile int4 db_fsync_in_prog, jnl_qio_in_prog;
@@ -68,6 +71,7 @@ void wcs_clean_dbsync(TID tid, int4 hd_len, sgmnt_addrs **csaptr)
node_local_ptr_t cnl;
sgmnt_addrs *csa, *check_csaddrs, *save_csaddrs;
sgmnt_data_ptr_t csd, save_csdata;
+ jnlpool_addrs_ptr_t save_jnlpool;
DEBUG_ONLY(boolean_t save_ok_to_call_wcs_recover;)
boolean_t is_mm;
DCL_THREADGBL_ACCESS;
@@ -89,6 +93,7 @@ void wcs_clean_dbsync(TID tid, int4 hd_len, sgmnt_addrs **csaptr)
save_region = gv_cur_region; /* Save for later restore. See notes about restore */
save_csaddrs = cs_addrs;
save_csdata = cs_data;
+ save_jnlpool = jnlpool;
/* Save to see if we are in crit anywhere */
check_csaddrs = ((NULL == save_region || FALSE == save_region->open) ? NULL : (&FILE_INFO(save_region)->s_addrs));
/* Note the non-usage of TP_CHANGE_REG_IF_NEEDED macros since this routine can be timer driven. */
@@ -225,5 +230,6 @@ void wcs_clean_dbsync(TID tid, int4 hd_len, sgmnt_addrs **csaptr)
gv_cur_region = save_region;
cs_addrs = save_csaddrs;
cs_data = save_csdata;
+ jnlpool = save_jnlpool;
return;
}
diff --git a/sr_unix/wcs_wt.h b/sr_unix/wcs_wt.h
index 6aa709b..4ec7e75 100644
--- a/sr_unix/wcs_wt.h
+++ b/sr_unix/wcs_wt.h
@@ -26,23 +26,24 @@ MBSTART { \
} \
} MBEND
-#define BREAK_TWIN(csr, csa) \
+#define BREAK_TWIN(CSR, CSA) \
MBSTART { \
cache_rec_ptr_t cr_new; \
\
- assert(csr->twin && csa->now_crit); /* We need crit to break twin connections. */ \
- assert(!csr->bt_index); /* It has to be an OLDER twin. It cannot be a NEWER twin because \
- * as long as the OLDER twin exists in the WIP queue, the NEWER \
- * twin write would not have been issued by "wcs_wtstart". \
- */ \
- assert(!csr->in_cw_set); /* no other process should be needing this buffer */ \
- cr_new = (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, csr->twin); /* Get NEWER twin cr */ \
- assert((void *)&((cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, cr_new->twin))->state_que == (void *)csr); \
+ assert((CSR)->twin && (CSA)->now_crit); /* We need crit to break twin connections. */ \
+ assert(!(CSR)->bt_index); /* It has to be an OLDER twin. It cannot be a NEWER twin because \
+ * as long as the OLDER twin exists in the WIP queue, the NEWER \
+ * twin write would not have been issued by "wcs_wtstart". \
+ */ \
+ assert(!(CSR)->in_cw_set); /* no other process should be needing this buffer */ \
+ cr_new = (cache_rec_ptr_t)GDS_ANY_REL2ABS((CSA), (CSR)->twin); /* Get NEWER twin cr */ \
+ assert((void *)&((cache_rec_ptr_t)GDS_ANY_REL2ABS((CSA), cr_new->twin))->state_que == (void *)(CSR)); \
assert(cr_new->dirty); /* NEWER twin should be in ACTIVE queue */ \
- csr->cycle++; /* increment cycle whenever blk number changes (tp_hist needs it) */ \
- csr->blk = CR_BLKEMPTY; \
+ (CSR)->cycle++; /* increment cycle whenever blk number changes (tp_hist needs it) */ \
+ (CSR)->blk = CR_BLKEMPTY; \
assert(CR_BLKEMPTY != cr_new->blk); /* NEWER twin should have a valid block number */ \
- cr_new->twin = csr->twin = 0; /* Break the twin link */ \
+ cr_new->twin = (CSR)->twin = 0; /* Break the twin link */ \
+ cr_new->backup_cr_is_twin = FALSE; \
} MBEND
/* "wcs_wtfini" is called with a second parameter which indicates whether it has to do "is_proc_alive" check or not.
* In places where we know for sure we do not need this check, we pass FALSE. In places where we would benefit from a check
diff --git a/sr_unix/wcs_wtstart.c b/sr_unix/wcs_wtstart.c
index 6c95120..b9477d1 100644
--- a/sr_unix/wcs_wtstart.c
+++ b/sr_unix/wcs_wtstart.c
@@ -111,7 +111,7 @@ GBLREF int reformat_buffer_len;
GBLREF gd_region *gv_cur_region;
GBLREF sgmnt_addrs *cs_addrs;
GBLREF sgmnt_data *cs_data;
-GBLREF jnlpool_addrs jnlpool;
+GBLREF jnlpool_addrs_ptr_t jnlpool;
GBLREF uint4 dollar_tlevel;
GBLREF uint4 update_trans;
GBLREF uint4 mu_reorg_encrypt_in_prog;
@@ -158,6 +158,8 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
gd_region *sav_cur_region;
sgmnt_addrs *sav_cs_addrs;
sgmnt_data *sav_cs_data;
+ jnlpool_addrs_ptr_t sav_jnlpool;
+ jnlpool_addrs_ptr_t local_jnlpool; /* needed by INST_FREEZE_ON_ERROR_POLICY_CSA */
intrpt_state_t prev_intrpt_state;
char *in, *out;
int in_len;
@@ -166,7 +168,7 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
boolean_t use_new_key, skip_in_trans, skip_sync, sync_keys;
que_ent_ptr_t next, prev;
void_ptr_t retcsrptr;
- boolean_t keep_buff_lock;
+ boolean_t keep_buff_lock, pushed_region;
cache_rec_ptr_t older_twin;
DCL_THREADGBL_ACCESS;
@@ -174,10 +176,11 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
SETUP_THREADGBL_ACCESS;
if (cr_list_ptr)
cr_list_ptr->numcrs = 0;
- if (INST_FREEZE_ON_ERROR_POLICY)
- PUSH_GV_CUR_REGION(region, sav_cur_region, sav_cs_addrs, sav_cs_data);
udi = FILE_INFO(region);
csa = &udi->s_addrs;
+ pushed_region = INST_FREEZE_ON_ERROR_POLICY_CSA(csa, local_jnlpool);
+ if (pushed_region)
+ PUSH_GV_CUR_REGION(region, sav_cur_region, sav_cs_addrs, sav_cs_data, sav_jnlpool);
csd = csa->hdr;
is_mm = (dba_mm == csd->acc_meth);
assert(is_mm || (dba_bg == csd->acc_meth));
@@ -188,8 +191,8 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
{
WCS_OPS_TRACE(csa, process_id, wcs_ops_wtstart1, 0, 0, 0, 0, 0);
BG_TRACE_PRO_ANY(csa, wrt_busy);
- if (INST_FREEZE_ON_ERROR_POLICY)
- POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data);
+ if (pushed_region)
+ POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data, sav_jnlpool);
return err_status; /* Already here, get out */
}
/* Defer interrupts to protect against an inconsistent state caused by mismatch of such values as
@@ -204,8 +207,8 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
WCS_OPS_TRACE(csa, process_id, wcs_ops_wtstart2, 0, 0, 0, 0, 0);
DECR_INTENT_WTSTART(cnl);
BG_TRACE_PRO_ANY(csa, wrt_blocked);
- if (INST_FREEZE_ON_ERROR_POLICY)
- POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data);
+ if (pushed_region)
+ POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data, sav_jnlpool);
ENABLE_INTERRUPTS(INTRPT_IN_WCS_WTSTART, prev_intrpt_state);
return err_status;
}
@@ -215,13 +218,13 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
* Because it is highly unlikely for an interrupt-deferred process to get killed at exactly this spot, do not test that.
*/
INCR_CNT(&cnl->in_wtstart, &cnl->wc_var_lock); /* and cnl->in_wtstart (shared copy) assignments as close as possible. */
- if (FROZEN_CHILLED(csd) && !FREEZE_LATCH_HELD(csa))
+ if (FROZEN_CHILLED(csa) && !FREEZE_LATCH_HELD(csa))
{
CAREFUL_DECR_CNT(cnl->in_wtstart, cnl->wc_var_lock);
DECR_INTENT_WTSTART(cnl);
csa->in_wtstart = FALSE;
- if (INST_FREEZE_ON_ERROR_POLICY)
- POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data);
+ if (pushed_region)
+ POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data, sav_jnlpool);
ENABLE_INTERRUPTS(INTRPT_IN_WCS_WTSTART, prev_intrpt_state);
/* Return non-zero in order to break wcs_wtstart_fini() out of its loop. Ignored elsewhere. */
return EAGAIN;
@@ -336,7 +339,7 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
}
if (NULL == csr)
break; /* the queue is empty */
- assert(!FROZEN_CHILLED(csd) || FREEZE_LATCH_HELD(csa));
+ assert(!FROZEN_CHILLED(csa) || FREEZE_LATCH_HELD(csa));
if (csr == csrfirst)
{ /* completed a tour of the queue */
queue_empty = FALSE;
@@ -446,13 +449,16 @@ int4 wcs_wtstart(gd_region *region, int4 writes, wtstart_cr_list_t *cr_list_ptr,
*/
if (!wtfini_called_once && (was_crit || grab_crit_immediate(region, OK_FOR_WCS_RECOVER_FALSE)))
{
- DEBUG_ONLY(dbg_wtfini_lcnt = dbg_wtfini_wcs_wtstart); /* used by "wcs_wtfini" */
- older_twin = (csr->bt_index ? (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, csr->twin) : cr);
- assert(!older_twin->bt_index);
- wcs_wtfini(region, CHECK_IS_PROC_ALIVE_FALSE, older_twin);
+ if (csr->twin)
+ {
+ DEBUG_ONLY(dbg_wtfini_lcnt = dbg_wtfini_wcs_wtstart); /* used by "wcs_wtfini" */
+ older_twin = (csr->bt_index ? (cache_rec_ptr_t)GDS_ANY_REL2ABS(csa, csr->twin) : cr);
+ assert(!older_twin->bt_index);
+ wcs_wtfini(region, CHECK_IS_PROC_ALIVE_FALSE, older_twin);
+ wtfini_called_once = TRUE;
+ }
if (!was_crit)
rel_crit(region);
- wtfini_called_once = TRUE;
}
/* Note that in the most common case, csr will be the NEWER twin. But it is possible csr is the OLDER
* twin too. For example, if the OLDER twin's write got aborted because the process that initiated
@@ -800,7 +806,8 @@ writes_completed:
*/
GTMCRYPT_REPORT_ERROR(gtmcrypt_errno, rts_error, seg->fname_len, seg->fname);
}
- if (INST_FREEZE_ON_ERROR_POLICY)
- POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data);
+ if (pushed_region)
+
+ POP_GV_CUR_REGION(sav_cur_region, sav_cs_addrs, sav_cs_data, sav_jnlpool);
return err_status;
}
diff --git a/sr_unix/ygblstat.mpt b/sr_unix/ygblstat.mpt
index 980a3f8..5458205 100644
--- a/sr_unix/ygblstat.mpt
+++ b/sr_unix/ygblstat.mpt
@@ -51,10 +51,11 @@ help ; Usage: mumps -run %YGBLSTAT [--help] [--pid pidlist] [--reg reglist] [
; Main Program
if $stack do PROMPTGO quit ; if invoked from another program, prompt for inputs, do work, and exit
- use $principal:(ctrap=$char(3):nocenable:exception="halt") ; terminate on Ctrl-C if invoked from shell
- set $etrap="set $etrap=""use $principal write $zstatus,! zhalt 1"""
+ use $principal:(ctrap=$char(3):nocenable:exception="zgoto 0") ; terminate on Ctrl-C if invoked from shell
+ set $etrap="set $etrap=""use $principal write $zstatus,! set $etrap=""""zshow """"""*"""""" zgoto 0"""" zhalt 1"""
set $etrap=$etrap_" set tmp1=$piece($ecode,"","",2),tmp2=$text(@tmp1)"
- set $etrap=$etrap_" if $length(tmp2) write $text(+0),@$piece(tmp2,"";"",2),! zhalt +$extract(tmp1,2,$length(tmp1))"
+ set $etrap=$etrap_" if $length(tmp2) write $text(+0),@$piece(tmp2,"";"",2),!"
+ set $etrap=$etrap_" set $etrap=""zgoto 0"" zhalt +$extract(tmp1,2,$length(tmp1))"
new cmdline,pid,reg
set cmdline=$zcmdline
set (pid,reg,stat)="*" ; Default is all processes, all regions, all statistics
@@ -83,7 +84,8 @@ INITYGS ; Initialize statistics names and locations in %YGS
MSGANDHALT(label)
new j,tmp
- for j=0:1 set tmp=$piece($text(@label+j),"; ",2) halt:""=tmp write tmp,!
+ set $etrap="zgoto 0"
+ for j=0:1 set tmp=$piece($text(@label+j),"; ",2) zhalt:""=tmp 1 write tmp,!
ORDERPID(pid,gld,reg)
; Get the next pid as specified by gld and reg, first pid if pid=""
diff --git a/sr_unix_cm/omi_lkextnam.c b/sr_unix_cm/omi_lkextnam.c
index 34ce5b6..18ce660 100755
--- a/sr_unix_cm/omi_lkextnam.c
+++ b/sr_unix_cm/omi_lkextnam.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -37,6 +38,7 @@ static char rcsid[] = "$Header:$";
#include "mlk_pvtblk_insert.h"
#include "dpgbldir.h"
#include "mlk_region_lookup.h"
+#include "mmrhash.h"
GBLREF mlk_pvtblk *mlk_pvt_root;
@@ -95,21 +97,23 @@ omi_lkextnam(
lck.mvtype = ext.mvtype = MV_STR;
reg = mlk_region_lookup(&lck, cptr->ga);
OMI_SI_READ(&si, data);
- r = (mlk_pvtblk *)malloc(SIZEOF(mlk_pvtblk) + elen + si.value);
- memset(r, 0, SIZEOF(mlk_pvtblk) - 1);
+ MLK_PVTBLK_ALLOC(elen, subcnt, si.value + 1, r);
r->translev = 1;
r->subscript_cnt = subcnt;
- r->total_length = elen;
+ r->nref_length = elen;
memcpy(&r->value[0], lck.str.addr - 1, elen);
- r->value[elen++] = si.value;
- memcpy(&r->value[elen], data, si.value);
+ MLK_PVTBLK_TAIL(r)[0] = si.value;
+ memcpy(MLK_PVTBLK_TAIL(r) + 1, data, si.value);
+ MLK_PVTBLK_SUBHASH_GEN(r);
r->region = reg;
sa = &FILE_INFO(r->region)->s_addrs;
r->ctlptr = (mlk_ctldata *)sa->lock_addrs[0];
if (!mlk_pvtblk_insert(r))
{
- if (r->value[r->total_length] == mlk_pvt_root->value[mlk_pvt_root->total_length]
- && !memcmp(&r->value[elen],&mlk_pvt_root->value[elen],r->value[r->total_length]))
+ MLK_PVTBLK_VALIDATE(r);
+ MLK_PVTBLK_VALIDATE(mlk_pvt_root);
+ if ((MLK_PVTBLK_TAIL(r)[0] == MLK_PVTBLK_TAIL(mlk_pvt_root)[0])
+ && !memcmp(MLK_PVTBLK_TAIL(r) + 1, MLK_PVTBLK_TAIL(mlk_pvt_root) + 1, MLK_PVTBLK_TAIL(r)[0]))
{
free(r);
return TRUE;
diff --git a/sr_unix_cm/omi_prc_unlc.c b/sr_unix_cm/omi_prc_unlc.c
index 5e914ad..35d027c 100755
--- a/sr_unix_cm/omi_prc_unlc.c
+++ b/sr_unix_cm/omi_prc_unlc.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2007 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -55,12 +56,13 @@ omi_prc_unlc(omi_conn *cptr, char *xend, char *buff, char *bend)
/* Loop through all the locks, unlocking ones that belong to this client */
for (prior = &mlk_pvt_root; *prior; ) {
+ MLK_PVTBLK_VALIDATE(*prior);
if (!(*prior)->granted || !(*prior)->nodptr
|| (*prior)->nodptr->owner != omi_pid)
mlk_pvtblk_delete(prior);
else if ((*prior)->nodptr->auxowner == (UINTPTR_T)cptr
- && si.value == (*prior)->value[(*prior)->total_length]
- && memcmp(&(*prior)->value[(*prior)->total_length+1],
+ && si.value == MLK_PVTBLK_TAIL(*prior)[0]
+ && memcmp(MLK_PVTBLK_TAIL(*prior) + 1,
jid, si.value) == 0) {
mlk_unlock(*prior);
mlk_pvtblk_delete(prior);
diff --git a/sr_unix_cm/rc_fnd_file.c b/sr_unix_cm/rc_fnd_file.c
old mode 100755
new mode 100644
index 7a6c61b..026ed6a
--- a/sr_unix_cm/rc_fnd_file.c
+++ b/sr_unix_cm/rc_fnd_file.c
@@ -106,7 +106,7 @@ short rc_fnd_file(rc_xdsid *xdsid)
gv_cur_region->dyn.addr->fname_len = fpath2.len;
REG_ACC_METH(gv_cur_region) = dba_bg;
ESTABLISH_RET(rc_fnd_file_ch1, RC_SUCCESS);
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
REVERT;
change_reg();
/* check to see if this DB has the reserved bytes field set
@@ -206,7 +206,7 @@ short rc_fnd_file(rc_xdsid *xdsid)
gv_cur_region->dyn.addr->fname_len = len;
REG_ACC_METH(gv_cur_region) = dba_bg;
ESTABLISH_RET(rc_fnd_file_ch2, RC_SUCCESS);
- gvcst_init(gv_cur_region);
+ gvcst_init(gv_cur_region, NULL);
REVERT;
change_reg();
/* check to see if this DB has the reserved bytes field set
diff --git a/sr_unix_cm/rc_prc_lock.c b/sr_unix_cm/rc_prc_lock.c
index 86040cd..f25456c 100755
--- a/sr_unix_cm/rc_prc_lock.c
+++ b/sr_unix_cm/rc_prc_lock.c
@@ -1,6 +1,7 @@
/****************************************************************
* *
- * Copyright 2001, 2009 Fidelity Information Services, Inc *
+ * Copyright (c) 2001-2017 Fidelity National Information *
+ * Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
@@ -31,6 +32,7 @@
#include "lckclr.h"
#include "mlk_lock.h"
#include "mlk_bckout.h"
+#include "mmrhash.h"
GBLREF UINTPTR_T rc_auxown; /* From server, address to use in auxown field, same as OMI */
GBLREF unsigned short lks_this_cmd;
@@ -75,10 +77,11 @@ int rc_prc_lock(rc_q_hdr *qhdr)
if (req->hdr.r.fmd.value & RC_MODE_CLEARLOCK)
{ /* Loop through all the locks, unlocking ones that belong to this client */
for (prior = &mlk_pvt_root; *prior; )
- { if ((*prior)->nodptr->auxowner == rc_auxown
- && pid_len == (*prior)->value[(*prior)->total_length]
- && !memcmp(&(*prior)->value[(*prior)->total_length+1],
- buff,pid_len))
+ {
+ MLK_PVTBLK_VALIDATE(*prior);
+ if ((*prior)->nodptr->auxowner == rc_auxown
+ && pid_len == MLK_PVTBLK_TAIL(*prior)[0]
+ && !memcmp(MLK_PVTBLK_TAIL(*prior) + 1, buff, pid_len))
{ mlk_unlock(*prior);
mlk_pvtblk_delete(prior);
}else
@@ -122,18 +125,20 @@ int rc_prc_lock(rc_q_hdr *qhdr)
/* Loop through all owned locks looking for requested one */
for (prior = &mlk_pvt_root; *prior; )
- { if ((*prior)->nodptr->auxowner == rc_auxown
- && temp == (*prior)->total_length
- && !memcmp(&(*prior)->value[0],key_buff,temp)
- && pid_len == (*prior)->value[(*prior)->total_length]
- && !memcmp(&(*prior)->value[(*prior)->total_length+1],
- buff,pid_len))
- { (*prior)->level -= 1;
+ {
+ MLK_PVTBLK_VALIDATE(*prior);
+ if ((*prior)->nodptr->auxowner == rc_auxown
+ && temp == (*prior)->nref_length
+ && !memcmp(&(*prior)->value[0], key_buff, temp)
+ && pid_len == MLK_PVTBLK_TAIL(*prior)[0]
+ && !memcmp(MLK_PVTBLK_TAIL(*prior) + 1, buff, pid_len))
+ {
+ (*prior)->level -= 1;
if (!(*prior)->level)
{ mlk_unlock(*prior);
mlk_pvtblk_delete(prior);
}
- }else
+ } else
prior = &(*prior)->next;
}
fl = (rc_lknam*)((char *)fl + sbk->len.value - 1 + SIZEOF(rc_lknam));
@@ -186,20 +191,22 @@ int rc_prc_lock(rc_q_hdr *qhdr)
return -1;
}
temp += subcnt;
- mp = (mlk_pvtblk*)malloc(SIZEOF(mlk_pvtblk) + temp + pid_len + 1);
- memset(mp, 0, SIZEOF(mlk_pvtblk) - 1);
+ MLK_PVTBLK_ALLOC(temp, subcnt, pid_len + 1, mp);
mp->subscript_cnt = subcnt;
- mp->total_length = temp;
- memcpy(mp->value, key_buff, mp->total_length);
+ mp->nref_length = temp;
+ memcpy(mp->value, key_buff, mp->nref_length);
+ MLK_PVTBLK_SUBHASH_GEN(mp);
mp->region = gv_cur_region;
mp->ctlptr = (mlk_ctldata*)cs_addrs->lock_addrs[0];
- mp->value[mp->total_length] = pid_len;
- memcpy(&mp->value[mp->total_length + 1], buff, pid_len);
+ MLK_PVTBLK_TAIL(mp)[0] = pid_len;
+ memcpy(MLK_PVTBLK_TAIL(mp) + 1, buff, pid_len);
if (!mlk_pvtblk_insert(mp))
- { if (!(mp->value[mp->total_length] == mlk_pvt_root->value[mlk_pvt_root->total_length]
- && !memcmp(&mp->value[mp->total_length + 1], &mlk_pvt_root->value[mp->total_length + 1],
- mp->total_length + 1)))
- { free(mp); /* Server owns lock on behalf of a different agent/client pair */
+ {
+ if (!(MLK_PVTBLK_TAIL(mp)[0] == MLK_PVTBLK_TAIL(mlk_pvt_root)[0]
+ && !memcmp(MLK_PVTBLK_TAIL(mp) + 1, MLK_PVTBLK_TAIL(mlk_pvt_root) + 1,
+ MLK_PVTBLK_TAIL(mp)[0])))
+ {
+ free(mp); /* Server owns lock on behalf of a different agent/client pair */
REVERT;
qhdr->a.erc.value = RC_LOCKCONFLICT;
return 0; /* Return lock not granted */
@@ -214,6 +221,7 @@ int rc_prc_lock(rc_q_hdr *qhdr)
return -1;/* error */
}
+ MLK_PVTBLK_VALIDATE(mp);
fl = (rc_lknam*)((char *)fl + sbk->len.value - 1 + SIZEOF(rc_lknam));
sbk = &fl->sb_key;
}
diff --git a/sr_unix_nsb/ttt.txt b/sr_unix_nsb/ttt.txt
index 2301f27..3872888 100755
--- a/sr_unix_nsb/ttt.txt
+++ b/sr_unix_nsb/ttt.txt
@@ -516,7 +516,6 @@ OC_GVZWRITE: jsb xfer.xf_restartpc
pushl val.3
pushl val.2
calls val.1,xfer.xf_gvzwrite
-OC_HALT: calls #0,xfer.xf_halt
OC_HANG: jsb xfer.xf_restartpc
pushab val.1
calls #1,xfer.xf_hang
@@ -896,8 +895,9 @@ OC_ZGOTO: pushl val.1
pushab val.3
pushab val.2
jsb xfer.xf_zgoto
-OC_ZHALT: pushab val.1
- calls #1,xfer.xf_zhalt
+OC_ZHALT: pushl val.1
+ pushl val.2
+ calls #2,xfer.xf_zhalt
OC_ZHELP: pushab val.2
pushab val.1
calls #2,xfer.xf_zhelp
diff --git a/sr_x86_64/GTMDefinedTypesInitDebug.m b/sr_x86_64/GTMDefinedTypesInitDebug.m
index 5335a01..df5536e 100644
--- a/sr_x86_64/GTMDefinedTypesInitDebug.m
+++ b/sr_x86_64/GTMDefinedTypesInitDebug.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2010-2017 Fidelity National Information ;
+; Copyright (c) 2010-2018 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -11,14 +11,14 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
-; Generated by scantypedefs.m at 16:03:08 on 2017-08-16
-; Build done with GT.M version: GT.M V6.3-001A Linux x86_64
+; Generated by scantypedefs.m at 11:25:23 on 2018-01-13
+; Build done with GT.M version: GT.M V6.3-002 Linux x86_64
;
; Environment variables during run:
-; $gtm_dist: /usr/library/V63001A/dbg
-; $gtm_exe: /usr/library/V63002/dbg
-; $gtm_src: /usr/library/V63002/src
-; $gtm_inc: /usr/library/V63002/inc
+; $gtm_dist: /usr/library/V63002/dbg
+; $gtm_exe: /usr/library/V63003A/dbg
+; $gtm_src: /usr/library/V63003A/src
+; $gtm_inc: /usr/library/V63003A/inc
;
; Note this file should not be manually invoked
;
@@ -1023,7 +1023,7 @@ Init
Set gtmtypes("cache_que_heads",39,"name")="cache_que_heads.cache_array[0].stopped"
Set gtmtypes("cache_que_heads",39,"off")=148
Set gtmtypes("cache_que_heads",39,"len")=4
- Set gtmtypes("cache_que_heads",39,"type")="unsigned-int"
+ Set gtmtypes("cache_que_heads",39,"type")="boolean_t"
Set gtmtypfldindx("cache_que_heads","cache_array[0].stopped")=39
Set gtmtypes("cache_que_heads",40,"name")="cache_que_heads.cache_array[0].rip_latch"
Set gtmtypes("cache_que_heads",40,"off")=152
@@ -1192,7 +1192,7 @@ Init
Set gtmtypes("cache_rec",20,"name")="cache_rec.stopped"
Set gtmtypes("cache_rec",20,"off")=100
Set gtmtypes("cache_rec",20,"len")=4
- Set gtmtypes("cache_rec",20,"type")="unsigned-int"
+ Set gtmtypes("cache_rec",20,"type")="boolean_t"
Set gtmtypfldindx("cache_rec","stopped")=20
Set gtmtypes("cache_rec",21,"name")="cache_rec.rip_latch"
Set gtmtypes("cache_rec",21,"off")=104
@@ -2737,8 +2737,8 @@ Init
Set gtmtypfldindx("d_mt_struct","stream")=32
;
Set gtmtypes("d_rm_struct")="struct"
- Set gtmtypes("d_rm_struct",0)=90
- Set gtmtypes("d_rm_struct","len")=480
+ Set gtmtypes("d_rm_struct",0)=91
+ Set gtmtypes("d_rm_struct","len")=488
Set gtmtypes("d_rm_struct",1,"name")="d_rm_struct.fixed"
Set gtmtypes("d_rm_struct",1,"off")=0
Set gtmtypes("d_rm_struct",1,"len")=4
@@ -3190,6 +3190,11 @@ Init
Set gtmtypes("d_rm_struct",90,"len")=8
Set gtmtypes("d_rm_struct",90,"type")="addr"
Set gtmtypfldindx("d_rm_struct","fsblock_buffer")=90
+ Set gtmtypes("d_rm_struct",91,"name")="d_rm_struct.crlastbuff"
+ Set gtmtypes("d_rm_struct",91,"off")=480
+ Set gtmtypes("d_rm_struct",91,"len")=4
+ Set gtmtypes("d_rm_struct",91,"type")="boolean_t"
+ Set gtmtypfldindx("d_rm_struct","crlastbuff")=91
;
Set gtmtypes("d_socket_struct")="struct"
Set gtmtypes("d_socket_struct",0)=19
@@ -4821,8 +4826,8 @@ Init
Set gtmtypes("gcall_args",6,"dim")=32
;
Set gtmtypes("gd_addr")="struct"
- Set gtmtypes("gd_addr",0)=20
- Set gtmtypes("gd_addr","len")=112
+ Set gtmtypes("gd_addr",0)=21
+ Set gtmtypes("gd_addr","len")=120
Set gtmtypes("gd_addr",1,"name")="gd_addr.local_locks"
Set gtmtypes("gd_addr",1,"off")=0
Set gtmtypes("gd_addr",1,"len")=8
@@ -4878,51 +4883,56 @@ Init
Set gtmtypes("gd_addr",11,"len")=8
Set gtmtypes("gd_addr",11,"type")="addr"
Set gtmtypfldindx("gd_addr","gblnames")=11
- Set gtmtypes("gd_addr",12,"name")="gd_addr.link"
+ Set gtmtypes("gd_addr",12,"name")="gd_addr.instinfo"
Set gtmtypes("gd_addr",12,"off")=64
Set gtmtypes("gd_addr",12,"len")=8
Set gtmtypes("gd_addr",12,"type")="addr"
- Set gtmtypfldindx("gd_addr","link")=12
- Set gtmtypes("gd_addr",13,"name")="gd_addr.tab_ptr"
+ Set gtmtypfldindx("gd_addr","instinfo")=12
+ Set gtmtypes("gd_addr",13,"name")="gd_addr.link"
Set gtmtypes("gd_addr",13,"off")=72
Set gtmtypes("gd_addr",13,"len")=8
Set gtmtypes("gd_addr",13,"type")="addr"
- Set gtmtypfldindx("gd_addr","tab_ptr")=13
- Set gtmtypes("gd_addr",14,"name")="gd_addr.id"
+ Set gtmtypfldindx("gd_addr","link")=13
+ Set gtmtypes("gd_addr",14,"name")="gd_addr.tab_ptr"
Set gtmtypes("gd_addr",14,"off")=80
Set gtmtypes("gd_addr",14,"len")=8
Set gtmtypes("gd_addr",14,"type")="addr"
- Set gtmtypfldindx("gd_addr","id")=14
- Set gtmtypes("gd_addr",15,"name")="gd_addr.end"
+ Set gtmtypfldindx("gd_addr","tab_ptr")=14
+ Set gtmtypes("gd_addr",15,"name")="gd_addr.id"
Set gtmtypes("gd_addr",15,"off")=88
Set gtmtypes("gd_addr",15,"len")=8
- Set gtmtypes("gd_addr",15,"type")="uintptr_t"
- Set gtmtypfldindx("gd_addr","end")=15
- Set gtmtypes("gd_addr",16,"name")="gd_addr.has_span_gbls"
+ Set gtmtypes("gd_addr",15,"type")="addr"
+ Set gtmtypfldindx("gd_addr","id")=15
+ Set gtmtypes("gd_addr",16,"name")="gd_addr.end"
Set gtmtypes("gd_addr",16,"off")=96
- Set gtmtypes("gd_addr",16,"len")=4
- Set gtmtypes("gd_addr",16,"type")="unsigned-int"
- Set gtmtypfldindx("gd_addr","has_span_gbls")=16
- Set gtmtypes("gd_addr",17,"name")="gd_addr.ygs_map_entry_changed"
- Set gtmtypes("gd_addr",17,"off")=100
- Set gtmtypes("gd_addr",17,"len")=1
- Set gtmtypes("gd_addr",17,"type")="char"
- Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=17
- Set gtmtypes("gd_addr",18,"name")="gd_addr.is_dummy_gbldir"
- Set gtmtypes("gd_addr",18,"off")=101
+ Set gtmtypes("gd_addr",16,"len")=8
+ Set gtmtypes("gd_addr",16,"type")="uintptr_t"
+ Set gtmtypfldindx("gd_addr","end")=16
+ Set gtmtypes("gd_addr",17,"name")="gd_addr.has_span_gbls"
+ Set gtmtypes("gd_addr",17,"off")=104
+ Set gtmtypes("gd_addr",17,"len")=4
+ Set gtmtypes("gd_addr",17,"type")="unsigned-int"
+ Set gtmtypfldindx("gd_addr","has_span_gbls")=17
+ Set gtmtypes("gd_addr",18,"name")="gd_addr.ygs_map_entry_changed"
+ Set gtmtypes("gd_addr",18,"off")=108
Set gtmtypes("gd_addr",18,"len")=1
Set gtmtypes("gd_addr",18,"type")="char"
- Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=18
- Set gtmtypes("gd_addr",19,"name")="gd_addr.filler"
- Set gtmtypes("gd_addr",19,"off")=102
- Set gtmtypes("gd_addr",19,"len")=2
+ Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=18
+ Set gtmtypes("gd_addr",19,"name")="gd_addr.is_dummy_gbldir"
+ Set gtmtypes("gd_addr",19,"off")=109
+ Set gtmtypes("gd_addr",19,"len")=1
Set gtmtypes("gd_addr",19,"type")="char"
- Set gtmtypfldindx("gd_addr","filler")=19
- Set gtmtypes("gd_addr",20,"name")="gd_addr.thread_gdi"
- Set gtmtypes("gd_addr",20,"off")=104
- Set gtmtypes("gd_addr",20,"len")=8
- Set gtmtypes("gd_addr",20,"type")="addr"
- Set gtmtypfldindx("gd_addr","thread_gdi")=20
+ Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=19
+ Set gtmtypes("gd_addr",20,"name")="gd_addr.filler"
+ Set gtmtypes("gd_addr",20,"off")=110
+ Set gtmtypes("gd_addr",20,"len")=2
+ Set gtmtypes("gd_addr",20,"type")="char"
+ Set gtmtypfldindx("gd_addr","filler")=20
+ Set gtmtypes("gd_addr",21,"name")="gd_addr.thread_gdi"
+ Set gtmtypes("gd_addr",21,"off")=112
+ Set gtmtypes("gd_addr",21,"len")=8
+ Set gtmtypes("gd_addr",21,"type")="addr"
+ Set gtmtypfldindx("gd_addr","thread_gdi")=21
;
Set gtmtypes("gd_binding")="struct"
Set gtmtypes("gd_binding",0)=8
@@ -4987,6 +4997,15 @@ Init
Set gtmtypes("gd_gblname",3,"type")="unsigned-int"
Set gtmtypfldindx("gd_gblname","ver")=3
;
+ Set gtmtypes("gd_inst_info")="struct"
+ Set gtmtypes("gd_inst_info",0)=1
+ Set gtmtypes("gd_inst_info","len")=256
+ Set gtmtypes("gd_inst_info",1,"name")="gd_inst_info.instfilename"
+ Set gtmtypes("gd_inst_info",1,"off")=0
+ Set gtmtypes("gd_inst_info",1,"len")=256
+ Set gtmtypes("gd_inst_info",1,"type")="char"
+ Set gtmtypfldindx("gd_inst_info","instfilename")=1
+ ;
Set gtmtypes("gd_region")="struct"
Set gtmtypes("gd_region",0)=44
Set gtmtypes("gd_region","len")=424
@@ -5226,7 +5245,7 @@ Init
Set gtmtypfldindx("gd_seg_addr","addr")=2
;
Set gtmtypes("gd_segment")="struct"
- Set gtmtypes("gd_segment",0)=24
+ Set gtmtypes("gd_segment",0)=25
Set gtmtypes("gd_segment","len")=384
Set gtmtypes("gd_segment",1,"name")="gd_segment.sname_len"
Set gtmtypes("gd_segment",1,"off")=0
@@ -5343,11 +5362,16 @@ Init
Set gtmtypes("gd_segment",23,"len")=4
Set gtmtypes("gd_segment",23,"type")="boolean_t"
Set gtmtypfldindx("gd_segment","asyncio")=23
- Set gtmtypes("gd_segment",24,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",24,"name")="gd_segment.read_only"
Set gtmtypes("gd_segment",24,"off")=368
- Set gtmtypes("gd_segment",24,"len")=16
- Set gtmtypes("gd_segment",24,"type")="char"
- Set gtmtypfldindx("gd_segment","filler")=24
+ Set gtmtypes("gd_segment",24,"len")=4
+ Set gtmtypes("gd_segment",24,"type")="boolean_t"
+ Set gtmtypfldindx("gd_segment","read_only")=24
+ Set gtmtypes("gd_segment",25,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",25,"off")=372
+ Set gtmtypes("gd_segment",25,"len")=12
+ Set gtmtypes("gd_segment",25,"type")="char"
+ Set gtmtypfldindx("gd_segment","filler")=25
;
Set gtmtypes("gdr_name")="struct"
Set gtmtypes("gdr_name",0)=10
@@ -9409,8 +9433,8 @@ Init
Set gtmtypes("integ_error_blk_list",3,"dim")=10
;
Set gtmtypes("io_desc")="struct"
- Set gtmtypes("io_desc",0)=30
- Set gtmtypes("io_desc","len")=296
+ Set gtmtypes("io_desc",0)=32
+ Set gtmtypes("io_desc","len")=320
Set gtmtypes("io_desc",1,"name")="io_desc.pair"
Set gtmtypes("io_desc",1,"off")=0
Set gtmtypes("io_desc",1,"len")=16
@@ -9487,80 +9511,90 @@ Init
Set gtmtypes("io_desc",15,"type")="int"
Set gtmtypfldindx("io_desc","state")=15
Set gtmtypes("io_desc",16,"name")="io_desc.dollar"
- Set gtmtypes("io_desc",16,"off")=68
- Set gtmtypes("io_desc",16,"len")=188
+ Set gtmtypes("io_desc",16,"off")=72
+ Set gtmtypes("io_desc",16,"len")=208
Set gtmtypes("io_desc",16,"type")="struct"
Set gtmtypfldindx("io_desc","dollar")=16
Set gtmtypes("io_desc",17,"name")="io_desc.dollar.x"
- Set gtmtypes("io_desc",17,"off")=68
+ Set gtmtypes("io_desc",17,"off")=72
Set gtmtypes("io_desc",17,"len")=4
Set gtmtypes("io_desc",17,"type")="unsigned-int"
Set gtmtypfldindx("io_desc","dollar.x")=17
Set gtmtypes("io_desc",18,"name")="io_desc.dollar.y"
- Set gtmtypes("io_desc",18,"off")=72
+ Set gtmtypes("io_desc",18,"off")=76
Set gtmtypes("io_desc",18,"len")=4
Set gtmtypes("io_desc",18,"type")="unsigned-int"
Set gtmtypfldindx("io_desc","dollar.y")=18
Set gtmtypes("io_desc",19,"name")="io_desc.dollar.zeof"
- Set gtmtypes("io_desc",19,"off")=76
+ Set gtmtypes("io_desc",19,"off")=80
Set gtmtypes("io_desc",19,"len")=2
Set gtmtypes("io_desc",19,"type")="unsigned-short"
Set gtmtypfldindx("io_desc","dollar.zeof")=19
Set gtmtypes("io_desc",20,"name")="io_desc.dollar.za"
- Set gtmtypes("io_desc",20,"off")=78
+ Set gtmtypes("io_desc",20,"off")=82
Set gtmtypes("io_desc",20,"len")=2
Set gtmtypes("io_desc",20,"type")="unsigned-short"
Set gtmtypfldindx("io_desc","dollar.za")=20
Set gtmtypes("io_desc",21,"name")="io_desc.dollar.zb"
- Set gtmtypes("io_desc",21,"off")=80
+ Set gtmtypes("io_desc",21,"off")=84
Set gtmtypes("io_desc",21,"len")=16
Set gtmtypes("io_desc",21,"type")="unsigned-char"
Set gtmtypfldindx("io_desc","dollar.zb")=21
Set gtmtypes("io_desc",22,"name")="io_desc.dollar.key"
- Set gtmtypes("io_desc",22,"off")=96
+ Set gtmtypes("io_desc",22,"off")=100
Set gtmtypes("io_desc",22,"len")=80
Set gtmtypes("io_desc",22,"type")="char"
Set gtmtypfldindx("io_desc","dollar.key")=22
Set gtmtypes("io_desc",23,"name")="io_desc.dollar.device"
- Set gtmtypes("io_desc",23,"off")=176
+ Set gtmtypes("io_desc",23,"off")=180
Set gtmtypes("io_desc",23,"len")=80
Set gtmtypes("io_desc",23,"type")="char"
Set gtmtypfldindx("io_desc","dollar.device")=23
- Set gtmtypes("io_desc",24,"name")="io_desc.esc_state"
- Set gtmtypes("io_desc",24,"off")=256
- Set gtmtypes("io_desc",24,"len")=1
- Set gtmtypes("io_desc",24,"type")="unsigned-char"
- Set gtmtypfldindx("io_desc","esc_state")=24
- Set gtmtypes("io_desc",25,"name")="io_desc.dev_sp"
- Set gtmtypes("io_desc",25,"off")=264
- Set gtmtypes("io_desc",25,"len")=8
- Set gtmtypes("io_desc",25,"type")="addr"
- Set gtmtypfldindx("io_desc","dev_sp")=25
- Set gtmtypes("io_desc",26,"name")="io_desc.disp_ptr"
- Set gtmtypes("io_desc",26,"off")=272
- Set gtmtypes("io_desc",26,"len")=8
- Set gtmtypes("io_desc",26,"type")="addr"
- Set gtmtypfldindx("io_desc","disp_ptr")=26
- Set gtmtypes("io_desc",27,"name")="io_desc.newly_created"
- Set gtmtypes("io_desc",27,"off")=280
- Set gtmtypes("io_desc",27,"len")=4
- Set gtmtypes("io_desc",27,"type")="boolean_t"
- Set gtmtypfldindx("io_desc","newly_created")=27
- Set gtmtypes("io_desc",28,"name")="io_desc.ichset"
- Set gtmtypes("io_desc",28,"off")=284
- Set gtmtypes("io_desc",28,"len")=4
- Set gtmtypes("io_desc",28,"type")="int"
- Set gtmtypfldindx("io_desc","ichset")=28
- Set gtmtypes("io_desc",29,"name")="io_desc.ochset"
- Set gtmtypes("io_desc",29,"off")=288
+ Set gtmtypes("io_desc",24,"name")="io_desc.dollar.devicebuffer"
+ Set gtmtypes("io_desc",24,"off")=264
+ Set gtmtypes("io_desc",24,"len")=8
+ Set gtmtypes("io_desc",24,"type")="addr"
+ Set gtmtypfldindx("io_desc","dollar.devicebuffer")=24
+ Set gtmtypes("io_desc",25,"name")="io_desc.dollar.devicebufferlen"
+ Set gtmtypes("io_desc",25,"off")=272
+ Set gtmtypes("io_desc",25,"len")=4
+ Set gtmtypes("io_desc",25,"type")="int"
+ Set gtmtypfldindx("io_desc","dollar.devicebufferlen")=25
+ Set gtmtypes("io_desc",26,"name")="io_desc.esc_state"
+ Set gtmtypes("io_desc",26,"off")=280
+ Set gtmtypes("io_desc",26,"len")=1
+ Set gtmtypes("io_desc",26,"type")="unsigned-char"
+ Set gtmtypfldindx("io_desc","esc_state")=26
+ Set gtmtypes("io_desc",27,"name")="io_desc.dev_sp"
+ Set gtmtypes("io_desc",27,"off")=288
+ Set gtmtypes("io_desc",27,"len")=8
+ Set gtmtypes("io_desc",27,"type")="addr"
+ Set gtmtypfldindx("io_desc","dev_sp")=27
+ Set gtmtypes("io_desc",28,"name")="io_desc.disp_ptr"
+ Set gtmtypes("io_desc",28,"off")=296
+ Set gtmtypes("io_desc",28,"len")=8
+ Set gtmtypes("io_desc",28,"type")="addr"
+ Set gtmtypfldindx("io_desc","disp_ptr")=28
+ Set gtmtypes("io_desc",29,"name")="io_desc.newly_created"
+ Set gtmtypes("io_desc",29,"off")=304
Set gtmtypes("io_desc",29,"len")=4
- Set gtmtypes("io_desc",29,"type")="int"
- Set gtmtypfldindx("io_desc","ochset")=29
- Set gtmtypes("io_desc",30,"name")="io_desc.write_filter"
- Set gtmtypes("io_desc",30,"off")=292
+ Set gtmtypes("io_desc",29,"type")="boolean_t"
+ Set gtmtypfldindx("io_desc","newly_created")=29
+ Set gtmtypes("io_desc",30,"name")="io_desc.ichset"
+ Set gtmtypes("io_desc",30,"off")=308
Set gtmtypes("io_desc",30,"len")=4
Set gtmtypes("io_desc",30,"type")="int"
- Set gtmtypfldindx("io_desc","write_filter")=30
+ Set gtmtypfldindx("io_desc","ichset")=30
+ Set gtmtypes("io_desc",31,"name")="io_desc.ochset"
+ Set gtmtypes("io_desc",31,"off")=312
+ Set gtmtypes("io_desc",31,"len")=4
+ Set gtmtypes("io_desc",31,"type")="int"
+ Set gtmtypfldindx("io_desc","ochset")=31
+ Set gtmtypes("io_desc",32,"name")="io_desc.write_filter"
+ Set gtmtypes("io_desc",32,"off")=316
+ Set gtmtypes("io_desc",32,"len")=4
+ Set gtmtypes("io_desc",32,"type")="int"
+ Set gtmtypfldindx("io_desc","write_filter")=32
;
Set gtmtypes("io_log_name")="struct"
Set gtmtypes("io_log_name",0)=4
@@ -11975,8 +12009,8 @@ Init
Set gtmtypfldindx("jnlext_multi_t","size")=7
;
Set gtmtypes("jnlpool_addrs")="struct"
- Set gtmtypes("jnlpool_addrs",0)=16
- Set gtmtypes("jnlpool_addrs","len")=96
+ Set gtmtypes("jnlpool_addrs",0)=22
+ Set gtmtypes("jnlpool_addrs","len")=136
Set gtmtypes("jnlpool_addrs",1,"name")="jnlpool_addrs.jnlpool_ctl"
Set gtmtypes("jnlpool_addrs",1,"off")=0
Set gtmtypes("jnlpool_addrs",1,"len")=8
@@ -12057,6 +12091,36 @@ Init
Set gtmtypes("jnlpool_addrs",16,"len")=4
Set gtmtypes("jnlpool_addrs",16,"type")="char"
Set gtmtypfldindx("jnlpool_addrs","jrs.filler_8byte_align")=16
+ Set gtmtypes("jnlpool_addrs",17,"name")="jnlpool_addrs.pool_init"
+ Set gtmtypes("jnlpool_addrs",17,"off")=96
+ Set gtmtypes("jnlpool_addrs",17,"len")=4
+ Set gtmtypes("jnlpool_addrs",17,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","pool_init")=17
+ Set gtmtypes("jnlpool_addrs",18,"name")="jnlpool_addrs.recv_pool"
+ Set gtmtypes("jnlpool_addrs",18,"off")=100
+ Set gtmtypes("jnlpool_addrs",18,"len")=4
+ Set gtmtypes("jnlpool_addrs",18,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","recv_pool")=18
+ Set gtmtypes("jnlpool_addrs",19,"name")="jnlpool_addrs.relaxed"
+ Set gtmtypes("jnlpool_addrs",19,"off")=104
+ Set gtmtypes("jnlpool_addrs",19,"len")=4
+ Set gtmtypes("jnlpool_addrs",19,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","relaxed")=19
+ Set gtmtypes("jnlpool_addrs",20,"name")="jnlpool_addrs.next"
+ Set gtmtypes("jnlpool_addrs",20,"off")=112
+ Set gtmtypes("jnlpool_addrs",20,"len")=8
+ Set gtmtypes("jnlpool_addrs",20,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","next")=20
+ Set gtmtypes("jnlpool_addrs",21,"name")="jnlpool_addrs.gd_instinfo"
+ Set gtmtypes("jnlpool_addrs",21,"off")=120
+ Set gtmtypes("jnlpool_addrs",21,"len")=8
+ Set gtmtypes("jnlpool_addrs",21,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_instinfo")=21
+ Set gtmtypes("jnlpool_addrs",22,"name")="jnlpool_addrs.gd_ptr"
+ Set gtmtypes("jnlpool_addrs",22,"off")=128
+ Set gtmtypes("jnlpool_addrs",22,"len")=8
+ Set gtmtypes("jnlpool_addrs",22,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_ptr")=22
;
Set gtmtypes("jnlpool_ctl_struct")="struct"
Set gtmtypes("jnlpool_ctl_struct",0)=72
@@ -14387,8 +14451,8 @@ Init
Set gtmtypfldindx("mliteral","v.str")=11
;
Set gtmtypes("mlk_ctldata")="struct"
- Set gtmtypes("mlk_ctldata",0)=12
- Set gtmtypes("mlk_ctldata","len")=328
+ Set gtmtypes("mlk_ctldata",0)=13
+ Set gtmtypes("mlk_ctldata","len")=80
Set gtmtypes("mlk_ctldata",1,"name")="mlk_ctldata.prcfree"
Set gtmtypes("mlk_ctldata",1,"off")=0
Set gtmtypes("mlk_ctldata",1,"len")=8
@@ -14399,57 +14463,61 @@ Init
Set gtmtypes("mlk_ctldata",2,"len")=8
Set gtmtypes("mlk_ctldata",2,"type")="intptr_t"
Set gtmtypfldindx("mlk_ctldata","blkfree")=2
- Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkroot"
+ Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkhash"
Set gtmtypes("mlk_ctldata",3,"off")=16
Set gtmtypes("mlk_ctldata",3,"len")=8
Set gtmtypes("mlk_ctldata",3,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","blkroot")=3
- Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.subbase"
+ Set gtmtypfldindx("mlk_ctldata","blkhash")=3
+ Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.blkroot"
Set gtmtypes("mlk_ctldata",4,"off")=24
Set gtmtypes("mlk_ctldata",4,"len")=8
Set gtmtypes("mlk_ctldata",4,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subbase")=4
- Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subfree"
+ Set gtmtypfldindx("mlk_ctldata","blkroot")=4
+ Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subbase"
Set gtmtypes("mlk_ctldata",5,"off")=32
Set gtmtypes("mlk_ctldata",5,"len")=8
Set gtmtypes("mlk_ctldata",5,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subfree")=5
- Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subtop"
+ Set gtmtypfldindx("mlk_ctldata","subbase")=5
+ Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subfree"
Set gtmtypes("mlk_ctldata",6,"off")=40
Set gtmtypes("mlk_ctldata",6,"len")=8
Set gtmtypes("mlk_ctldata",6,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subtop")=6
- Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.max_prccnt"
+ Set gtmtypfldindx("mlk_ctldata","subfree")=6
+ Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.subtop"
Set gtmtypes("mlk_ctldata",7,"off")=48
- Set gtmtypes("mlk_ctldata",7,"len")=4
- Set gtmtypes("mlk_ctldata",7,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_prccnt")=7
- Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_blkcnt"
- Set gtmtypes("mlk_ctldata",8,"off")=52
+ Set gtmtypes("mlk_ctldata",7,"len")=8
+ Set gtmtypes("mlk_ctldata",7,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_ctldata","subtop")=7
+ Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_prccnt"
+ Set gtmtypes("mlk_ctldata",8,"off")=56
Set gtmtypes("mlk_ctldata",8,"len")=4
Set gtmtypes("mlk_ctldata",8,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=8
- Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.prccnt"
- Set gtmtypes("mlk_ctldata",9,"off")=56
+ Set gtmtypfldindx("mlk_ctldata","max_prccnt")=8
+ Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.max_blkcnt"
+ Set gtmtypes("mlk_ctldata",9,"off")=60
Set gtmtypes("mlk_ctldata",9,"len")=4
- Set gtmtypes("mlk_ctldata",9,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","prccnt")=9
- Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.blkcnt"
- Set gtmtypes("mlk_ctldata",10,"off")=60
+ Set gtmtypes("mlk_ctldata",9,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=9
+ Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.num_blkhash"
+ Set gtmtypes("mlk_ctldata",10,"off")=64
Set gtmtypes("mlk_ctldata",10,"len")=4
- Set gtmtypes("mlk_ctldata",10,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","blkcnt")=10
- Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.clus_pids"
- Set gtmtypes("mlk_ctldata",11,"off")=64
- Set gtmtypes("mlk_ctldata",11,"len")=256
- Set gtmtypes("mlk_ctldata",11,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","clus_pids")=11
- Set gtmtypes("mlk_ctldata",11,"dim")=64
- Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.wakeups"
- Set gtmtypes("mlk_ctldata",12,"off")=320
+ Set gtmtypes("mlk_ctldata",10,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","num_blkhash")=10
+ Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.prccnt"
+ Set gtmtypes("mlk_ctldata",11,"off")=68
+ Set gtmtypes("mlk_ctldata",11,"len")=4
+ Set gtmtypes("mlk_ctldata",11,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","prccnt")=11
+ Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.blkcnt"
+ Set gtmtypes("mlk_ctldata",12,"off")=72
Set gtmtypes("mlk_ctldata",12,"len")=4
- Set gtmtypes("mlk_ctldata",12,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","wakeups")=12
+ Set gtmtypes("mlk_ctldata",12,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","blkcnt")=12
+ Set gtmtypes("mlk_ctldata",13,"name")="mlk_ctldata.wakeups"
+ Set gtmtypes("mlk_ctldata",13,"off")=76
+ Set gtmtypes("mlk_ctldata",13,"len")=4
+ Set gtmtypes("mlk_ctldata",13,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","wakeups")=13
;
Set gtmtypes("mlk_prcblk")="struct"
Set gtmtypes("mlk_prcblk",0)=4
@@ -14476,8 +14544,8 @@ Init
Set gtmtypfldindx("mlk_prcblk","filler_4byte")=4
;
Set gtmtypes("mlk_pvtblk")="struct"
- Set gtmtypes("mlk_pvtblk",0)=16
- Set gtmtypes("mlk_pvtblk","len")=80
+ Set gtmtypes("mlk_pvtblk",0)=19
+ Set gtmtypes("mlk_pvtblk","len")=96
Set gtmtypes("mlk_pvtblk",1,"name")="mlk_pvtblk.ctlptr"
Set gtmtypes("mlk_pvtblk",1,"off")=0
Set gtmtypes("mlk_pvtblk",1,"len")=8
@@ -14518,46 +14586,61 @@ Init
Set gtmtypes("mlk_pvtblk",8,"len")=8
Set gtmtypes("mlk_pvtblk",8,"type")="addr"
Set gtmtypfldindx("mlk_pvtblk","tp")=8
- Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.total_length"
+ Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.nref_length"
Set gtmtypes("mlk_pvtblk",9,"off")=56
Set gtmtypes("mlk_pvtblk",9,"len")=4
Set gtmtypes("mlk_pvtblk",9,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_length")=9
- Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.total_len_padded"
+ Set gtmtypfldindx("mlk_pvtblk","nref_length")=9
+ Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.subscript_cnt"
Set gtmtypes("mlk_pvtblk",10,"off")=60
- Set gtmtypes("mlk_pvtblk",10,"len")=4
- Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_len_padded")=10
- Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.subscript_cnt"
+ Set gtmtypes("mlk_pvtblk",10,"len")=2
+ Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-short"
+ Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=10
+ Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.trans"
Set gtmtypes("mlk_pvtblk",11,"off")=64
- Set gtmtypes("mlk_pvtblk",11,"len")=2
- Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-short"
- Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=11
- Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.trans"
- Set gtmtypes("mlk_pvtblk",12,"off")=68
+ Set gtmtypes("mlk_pvtblk",11,"len")=1
+ Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-char"
+ Set gtmtypfldindx("mlk_pvtblk","trans")=11
+ Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.translev"
+ Set gtmtypes("mlk_pvtblk",12,"off")=65
Set gtmtypes("mlk_pvtblk",12,"len")=1
Set gtmtypes("mlk_pvtblk",12,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","trans")=12
- Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.translev"
- Set gtmtypes("mlk_pvtblk",13,"off")=69
+ Set gtmtypfldindx("mlk_pvtblk","translev")=12
+ Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.old"
+ Set gtmtypes("mlk_pvtblk",13,"off")=66
Set gtmtypes("mlk_pvtblk",13,"len")=1
Set gtmtypes("mlk_pvtblk",13,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","translev")=13
- Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.old"
- Set gtmtypes("mlk_pvtblk",14,"off")=70
- Set gtmtypes("mlk_pvtblk",14,"len")=1
+ Set gtmtypfldindx("mlk_pvtblk","old")=13
+ Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.filler"
+ Set gtmtypes("mlk_pvtblk",14,"off")=67
+ Set gtmtypes("mlk_pvtblk",14,"len")=5
Set gtmtypes("mlk_pvtblk",14,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","old")=14
- Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.filler"
- Set gtmtypes("mlk_pvtblk",15,"off")=71
- Set gtmtypes("mlk_pvtblk",15,"len")=1
- Set gtmtypes("mlk_pvtblk",15,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","filler")=15
- Set gtmtypes("mlk_pvtblk",16,"name")="mlk_pvtblk.value"
- Set gtmtypes("mlk_pvtblk",16,"off")=72
- Set gtmtypes("mlk_pvtblk",16,"len")=1
- Set gtmtypes("mlk_pvtblk",16,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","value")=16
+ Set gtmtypfldindx("mlk_pvtblk","filler")=14
+ Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.alloc_size"
+ Set gtmtypes("mlk_pvtblk",15,"off")=72
+ Set gtmtypes("mlk_pvtblk",15,"len")=8
+ Set gtmtypes("mlk_pvtblk",15,"type")="size_t"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_size")=15
+ Set gtmtypes("mlk_pvtblk",16,"name")="mlk_pvtblk.alloc_nref_len"
+ Set gtmtypes("mlk_pvtblk",16,"off")=80
+ Set gtmtypes("mlk_pvtblk",16,"len")=4
+ Set gtmtypes("mlk_pvtblk",16,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_nref_len")=16
+ Set gtmtypes("mlk_pvtblk",17,"name")="mlk_pvtblk.alloc_sub_cnt"
+ Set gtmtypes("mlk_pvtblk",17,"off")=84
+ Set gtmtypes("mlk_pvtblk",17,"len")=4
+ Set gtmtypes("mlk_pvtblk",17,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_sub_cnt")=17
+ Set gtmtypes("mlk_pvtblk",18,"name")="mlk_pvtblk.alloc_aux_size"
+ Set gtmtypes("mlk_pvtblk",18,"off")=88
+ Set gtmtypes("mlk_pvtblk",18,"len")=4
+ Set gtmtypes("mlk_pvtblk",18,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_pvtblk","alloc_aux_size")=18
+ Set gtmtypes("mlk_pvtblk",19,"name")="mlk_pvtblk.value"
+ Set gtmtypes("mlk_pvtblk",19,"off")=92
+ Set gtmtypes("mlk_pvtblk",19,"len")=1
+ Set gtmtypes("mlk_pvtblk",19,"type")="unsigned-char"
+ Set gtmtypfldindx("mlk_pvtblk","value")=19
;
Set gtmtypes("mlk_shrblk")="struct"
Set gtmtypes("mlk_shrblk",0)=11
@@ -14618,6 +14701,25 @@ Init
Set gtmtypes("mlk_shrblk",11,"type")="unsigned-char"
Set gtmtypfldindx("mlk_shrblk","auxnode")=11
;
+ Set gtmtypes("mlk_shrhash")="struct"
+ Set gtmtypes("mlk_shrhash",0)=3
+ Set gtmtypes("mlk_shrhash","len")=16
+ Set gtmtypes("mlk_shrhash",1,"name")="mlk_shrhash.shrblk"
+ Set gtmtypes("mlk_shrhash",1,"off")=0
+ Set gtmtypes("mlk_shrhash",1,"len")=8
+ Set gtmtypes("mlk_shrhash",1,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_shrhash","shrblk")=1
+ Set gtmtypes("mlk_shrhash",2,"name")="mlk_shrhash.hash"
+ Set gtmtypes("mlk_shrhash",2,"off")=8
+ Set gtmtypes("mlk_shrhash",2,"len")=4
+ Set gtmtypes("mlk_shrhash",2,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","hash")=2
+ Set gtmtypes("mlk_shrhash",3,"name")="mlk_shrhash.usedmap"
+ Set gtmtypes("mlk_shrhash",3,"off")=12
+ Set gtmtypes("mlk_shrhash",3,"len")=4
+ Set gtmtypes("mlk_shrhash",3,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","usedmap")=3
+ ;
Set gtmtypes("mlk_shrsub")="struct"
Set gtmtypes("mlk_shrsub",0)=3
Set gtmtypes("mlk_shrsub","len")=16
@@ -17959,8 +18061,8 @@ Init
Set gtmtypfldindx("nametabent","name")=2
;
Set gtmtypes("node_local")="struct"
- Set gtmtypes("node_local",0)=248
- Set gtmtypes("node_local","len")=121536
+ Set gtmtypes("node_local",0)=247
+ Set gtmtypes("node_local","len")=113352
Set gtmtypes("node_local",1,"name")="node_local.label"
Set gtmtypes("node_local",1,"off")=0
Set gtmtypes("node_local",1,"len")=12
@@ -18548,670 +18650,664 @@ Init
Set gtmtypes("node_local",116,"len")=256
Set gtmtypes("node_local",116,"type")="char"
Set gtmtypfldindx("node_local","statsdb_fname")=116
- Set gtmtypes("node_local",117,"name")="node_local.secshr_ops_index"
+ Set gtmtypes("node_local",117,"name")="node_local.gvstats_rec"
Set gtmtypes("node_local",117,"off")=104392
- Set gtmtypes("node_local",117,"len")=4
- Set gtmtypes("node_local",117,"type")="int"
- Set gtmtypfldindx("node_local","secshr_ops_index")=117
- Set gtmtypes("node_local",118,"name")="node_local.secshr_ops_array"
- Set gtmtypes("node_local",118,"off")=104400
- Set gtmtypes("node_local",118,"len")=8184
+ Set gtmtypes("node_local",117,"len")=472
+ Set gtmtypes("node_local",117,"type")="gvstats_rec_t"
+ Set gtmtypfldindx("node_local","gvstats_rec")=117
+ Set gtmtypes("node_local",118,"name")="node_local.gvstats_rec.n_set"
+ Set gtmtypes("node_local",118,"off")=104392
+ Set gtmtypes("node_local",118,"len")=8
Set gtmtypes("node_local",118,"type")="uint64_t"
- Set gtmtypfldindx("node_local","secshr_ops_array")=118
- Set gtmtypes("node_local",118,"dim")=1023
- Set gtmtypes("node_local",119,"name")="node_local.gvstats_rec"
- Set gtmtypes("node_local",119,"off")=112584
- Set gtmtypes("node_local",119,"len")=472
- Set gtmtypes("node_local",119,"type")="gvstats_rec_t"
- Set gtmtypfldindx("node_local","gvstats_rec")=119
- Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec.n_set"
- Set gtmtypes("node_local",120,"off")=112584
+ Set gtmtypfldindx("node_local","gvstats_rec.n_set")=118
+ Set gtmtypes("node_local",119,"name")="node_local.gvstats_rec.n_kill"
+ Set gtmtypes("node_local",119,"off")=104400
+ Set gtmtypes("node_local",119,"len")=8
+ Set gtmtypes("node_local",119,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=119
+ Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec.n_get"
+ Set gtmtypes("node_local",120,"off")=104408
Set gtmtypes("node_local",120,"len")=8
Set gtmtypes("node_local",120,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_set")=120
- Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_kill"
- Set gtmtypes("node_local",121,"off")=112592
+ Set gtmtypfldindx("node_local","gvstats_rec.n_get")=120
+ Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_data"
+ Set gtmtypes("node_local",121,"off")=104416
Set gtmtypes("node_local",121,"len")=8
Set gtmtypes("node_local",121,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=121
- Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_get"
- Set gtmtypes("node_local",122,"off")=112600
+ Set gtmtypfldindx("node_local","gvstats_rec.n_data")=121
+ Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_order"
+ Set gtmtypes("node_local",122,"off")=104424
Set gtmtypes("node_local",122,"len")=8
Set gtmtypes("node_local",122,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_get")=122
- Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_data"
- Set gtmtypes("node_local",123,"off")=112608
+ Set gtmtypfldindx("node_local","gvstats_rec.n_order")=122
+ Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_zprev"
+ Set gtmtypes("node_local",123,"off")=104432
Set gtmtypes("node_local",123,"len")=8
Set gtmtypes("node_local",123,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_data")=123
- Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_order"
- Set gtmtypes("node_local",124,"off")=112616
+ Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=123
+ Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_query"
+ Set gtmtypes("node_local",124,"off")=104440
Set gtmtypes("node_local",124,"len")=8
Set gtmtypes("node_local",124,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_order")=124
- Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_zprev"
- Set gtmtypes("node_local",125,"off")=112624
+ Set gtmtypfldindx("node_local","gvstats_rec.n_query")=124
+ Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_lock_success"
+ Set gtmtypes("node_local",125,"off")=104448
Set gtmtypes("node_local",125,"len")=8
Set gtmtypes("node_local",125,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=125
- Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_query"
- Set gtmtypes("node_local",126,"off")=112632
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=125
+ Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_lock_fail"
+ Set gtmtypes("node_local",126,"off")=104456
Set gtmtypes("node_local",126,"len")=8
Set gtmtypes("node_local",126,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_query")=126
- Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.n_lock_success"
- Set gtmtypes("node_local",127,"off")=112640
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=126
+ Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.db_curr_tn"
+ Set gtmtypes("node_local",127,"off")=104464
Set gtmtypes("node_local",127,"len")=8
Set gtmtypes("node_local",127,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=127
- Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_lock_fail"
- Set gtmtypes("node_local",128,"off")=112648
+ Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=127
+ Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_dsk_read"
+ Set gtmtypes("node_local",128,"off")=104472
Set gtmtypes("node_local",128,"len")=8
Set gtmtypes("node_local",128,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=128
- Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.db_curr_tn"
- Set gtmtypes("node_local",129,"off")=112656
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=128
+ Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.n_dsk_write"
+ Set gtmtypes("node_local",129,"off")=104480
Set gtmtypes("node_local",129,"len")=8
Set gtmtypes("node_local",129,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=129
- Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.n_dsk_read"
- Set gtmtypes("node_local",130,"off")=112664
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=129
+ Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.n_nontp_readwrite"
+ Set gtmtypes("node_local",130,"off")=104488
Set gtmtypes("node_local",130,"len")=8
Set gtmtypes("node_local",130,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=130
- Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_dsk_write"
- Set gtmtypes("node_local",131,"off")=112672
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=130
+ Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_nontp_readonly"
+ Set gtmtypes("node_local",131,"off")=104496
Set gtmtypes("node_local",131,"len")=8
Set gtmtypes("node_local",131,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=131
- Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_nontp_readwrite"
- Set gtmtypes("node_local",132,"off")=112680
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=131
+ Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
+ Set gtmtypes("node_local",132,"off")=104504
Set gtmtypes("node_local",132,"len")=8
Set gtmtypes("node_local",132,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=132
- Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_readonly"
- Set gtmtypes("node_local",133,"off")=112688
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=132
+ Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_blkread"
+ Set gtmtypes("node_local",133,"off")=104512
Set gtmtypes("node_local",133,"len")=8
Set gtmtypes("node_local",133,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=133
- Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
- Set gtmtypes("node_local",134,"off")=112696
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=133
+ Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_retries_0"
+ Set gtmtypes("node_local",134,"off")=104520
Set gtmtypes("node_local",134,"len")=8
Set gtmtypes("node_local",134,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=134
- Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_blkread"
- Set gtmtypes("node_local",135,"off")=112704
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=134
+ Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_retries_1"
+ Set gtmtypes("node_local",135,"off")=104528
Set gtmtypes("node_local",135,"len")=8
Set gtmtypes("node_local",135,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=135
- Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_retries_0"
- Set gtmtypes("node_local",136,"off")=112712
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=135
+ Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_retries_2"
+ Set gtmtypes("node_local",136,"off")=104536
Set gtmtypes("node_local",136,"len")=8
Set gtmtypes("node_local",136,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=136
- Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_1"
- Set gtmtypes("node_local",137,"off")=112720
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=136
+ Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_3"
+ Set gtmtypes("node_local",137,"off")=104544
Set gtmtypes("node_local",137,"len")=8
Set gtmtypes("node_local",137,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=137
- Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_nontp_retries_2"
- Set gtmtypes("node_local",138,"off")=112728
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=137
+ Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_tp_readwrite"
+ Set gtmtypes("node_local",138,"off")=104552
Set gtmtypes("node_local",138,"len")=8
Set gtmtypes("node_local",138,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=138
- Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_nontp_retries_3"
- Set gtmtypes("node_local",139,"off")=112736
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=138
+ Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_tp_readonly"
+ Set gtmtypes("node_local",139,"off")=104560
Set gtmtypes("node_local",139,"len")=8
Set gtmtypes("node_local",139,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=139
- Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_tp_readwrite"
- Set gtmtypes("node_local",140,"off")=112744
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=139
+ Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_tp_rolledback"
+ Set gtmtypes("node_local",140,"off")=104568
Set gtmtypes("node_local",140,"len")=8
Set gtmtypes("node_local",140,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=140
- Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_readonly"
- Set gtmtypes("node_local",141,"off")=112752
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=140
+ Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_blkwrite"
+ Set gtmtypes("node_local",141,"off")=104576
Set gtmtypes("node_local",141,"len")=8
Set gtmtypes("node_local",141,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=141
- Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_rolledback"
- Set gtmtypes("node_local",142,"off")=112760
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=141
+ Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_blkread"
+ Set gtmtypes("node_local",142,"off")=104584
Set gtmtypes("node_local",142,"len")=8
Set gtmtypes("node_local",142,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=142
- Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_blkwrite"
- Set gtmtypes("node_local",143,"off")=112768
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=142
+ Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
+ Set gtmtypes("node_local",143,"off")=104592
Set gtmtypes("node_local",143,"len")=8
Set gtmtypes("node_local",143,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=143
- Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_blkread"
- Set gtmtypes("node_local",144,"off")=112776
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=143
+ Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
+ Set gtmtypes("node_local",144,"off")=104600
Set gtmtypes("node_local",144,"len")=8
Set gtmtypes("node_local",144,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=144
- Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
- Set gtmtypes("node_local",145,"off")=112784
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=144
+ Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
+ Set gtmtypes("node_local",145,"off")=104608
Set gtmtypes("node_local",145,"len")=8
Set gtmtypes("node_local",145,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=145
- Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
- Set gtmtypes("node_local",146,"off")=112792
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=145
+ Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
+ Set gtmtypes("node_local",146,"off")=104616
Set gtmtypes("node_local",146,"len")=8
Set gtmtypes("node_local",146,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=146
- Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
- Set gtmtypes("node_local",147,"off")=112800
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=146
+ Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
+ Set gtmtypes("node_local",147,"off")=104624
Set gtmtypes("node_local",147,"len")=8
Set gtmtypes("node_local",147,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=147
- Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
- Set gtmtypes("node_local",148,"off")=112808
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=147
+ Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
+ Set gtmtypes("node_local",148,"off")=104632
Set gtmtypes("node_local",148,"len")=8
Set gtmtypes("node_local",148,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=148
- Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
- Set gtmtypes("node_local",149,"off")=112816
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=148
+ Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
+ Set gtmtypes("node_local",149,"off")=104640
Set gtmtypes("node_local",149,"len")=8
Set gtmtypes("node_local",149,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=149
- Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
- Set gtmtypes("node_local",150,"off")=112824
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=149
+ Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
+ Set gtmtypes("node_local",150,"off")=104648
Set gtmtypes("node_local",150,"len")=8
Set gtmtypes("node_local",150,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=150
- Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
- Set gtmtypes("node_local",151,"off")=112832
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=150
+ Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
+ Set gtmtypes("node_local",151,"off")=104656
Set gtmtypes("node_local",151,"len")=8
Set gtmtypes("node_local",151,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=151
- Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
- Set gtmtypes("node_local",152,"off")=112840
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=151
+ Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
+ Set gtmtypes("node_local",152,"off")=104664
Set gtmtypes("node_local",152,"len")=8
Set gtmtypes("node_local",152,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=152
- Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
- Set gtmtypes("node_local",153,"off")=112848
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=152
+ Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_ztrigger"
+ Set gtmtypes("node_local",153,"off")=104672
Set gtmtypes("node_local",153,"len")=8
Set gtmtypes("node_local",153,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=153
- Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
- Set gtmtypes("node_local",154,"off")=112856
+ Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=153
+ Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_db_flush"
+ Set gtmtypes("node_local",154,"off")=104680
Set gtmtypes("node_local",154,"len")=8
Set gtmtypes("node_local",154,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=154
- Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_ztrigger"
- Set gtmtypes("node_local",155,"off")=112864
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=154
+ Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_db_fsync"
+ Set gtmtypes("node_local",155,"off")=104688
Set gtmtypes("node_local",155,"len")=8
Set gtmtypes("node_local",155,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=155
- Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_db_flush"
- Set gtmtypes("node_local",156,"off")=112872
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=155
+ Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_jnl_flush"
+ Set gtmtypes("node_local",156,"off")=104696
Set gtmtypes("node_local",156,"len")=8
Set gtmtypes("node_local",156,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=156
- Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_db_fsync"
- Set gtmtypes("node_local",157,"off")=112880
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=156
+ Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_jnl_fsync"
+ Set gtmtypes("node_local",157,"off")=104704
Set gtmtypes("node_local",157,"len")=8
Set gtmtypes("node_local",157,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=157
- Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_jnl_flush"
- Set gtmtypes("node_local",158,"off")=112888
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=157
+ Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_jbuff_bytes"
+ Set gtmtypes("node_local",158,"off")=104712
Set gtmtypes("node_local",158,"len")=8
Set gtmtypes("node_local",158,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=158
- Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jnl_fsync"
- Set gtmtypes("node_local",159,"off")=112896
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=158
+ Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jfile_bytes"
+ Set gtmtypes("node_local",159,"off")=104720
Set gtmtypes("node_local",159,"len")=8
Set gtmtypes("node_local",159,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=159
- Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jbuff_bytes"
- Set gtmtypes("node_local",160,"off")=112904
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=159
+ Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jfile_writes"
+ Set gtmtypes("node_local",160,"off")=104728
Set gtmtypes("node_local",160,"len")=8
Set gtmtypes("node_local",160,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=160
- Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jfile_bytes"
- Set gtmtypes("node_local",161,"off")=112912
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=160
+ Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jrec_logical"
+ Set gtmtypes("node_local",161,"off")=104736
Set gtmtypes("node_local",161,"len")=8
Set gtmtypes("node_local",161,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=161
- Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jfile_writes"
- Set gtmtypes("node_local",162,"off")=112920
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=161
+ Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jrec_pblk"
+ Set gtmtypes("node_local",162,"off")=104744
Set gtmtypes("node_local",162,"len")=8
Set gtmtypes("node_local",162,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=162
- Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jrec_logical"
- Set gtmtypes("node_local",163,"off")=112928
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=162
+ Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
+ Set gtmtypes("node_local",163,"off")=104752
Set gtmtypes("node_local",163,"len")=8
Set gtmtypes("node_local",163,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=163
- Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_pblk"
- Set gtmtypes("node_local",164,"off")=112936
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=163
+ Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
+ Set gtmtypes("node_local",164,"off")=104760
Set gtmtypes("node_local",164,"len")=8
Set gtmtypes("node_local",164,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=164
- Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
- Set gtmtypes("node_local",165,"off")=112944
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=164
+ Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_other"
+ Set gtmtypes("node_local",165,"off")=104768
Set gtmtypes("node_local",165,"len")=8
Set gtmtypes("node_local",165,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=165
- Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
- Set gtmtypes("node_local",166,"off")=112952
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=165
+ Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jnl_extends"
+ Set gtmtypes("node_local",166,"off")=104776
Set gtmtypes("node_local",166,"len")=8
Set gtmtypes("node_local",166,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=166
- Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_jrec_other"
- Set gtmtypes("node_local",167,"off")=112960
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=166
+ Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_db_extends"
+ Set gtmtypes("node_local",167,"off")=104784
Set gtmtypes("node_local",167,"len")=8
Set gtmtypes("node_local",167,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=167
- Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_jnl_extends"
- Set gtmtypes("node_local",168,"off")=112968
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=167
+ Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_crit_success"
+ Set gtmtypes("node_local",168,"off")=104792
Set gtmtypes("node_local",168,"len")=8
Set gtmtypes("node_local",168,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=168
- Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_db_extends"
- Set gtmtypes("node_local",169,"off")=112976
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=168
+ Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_crits_in_epch"
+ Set gtmtypes("node_local",169,"off")=104800
Set gtmtypes("node_local",169,"len")=8
Set gtmtypes("node_local",169,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=169
- Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.n_crit_success"
- Set gtmtypes("node_local",170,"off")=112984
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=169
+ Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.sq_crit_failed"
+ Set gtmtypes("node_local",170,"off")=104808
Set gtmtypes("node_local",170,"len")=8
Set gtmtypes("node_local",170,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=170
- Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crits_in_epch"
- Set gtmtypes("node_local",171,"off")=112992
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=170
+ Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crit_failed"
+ Set gtmtypes("node_local",171,"off")=104816
Set gtmtypes("node_local",171,"len")=8
Set gtmtypes("node_local",171,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=171
- Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.sq_crit_failed"
- Set gtmtypes("node_local",172,"off")=113000
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=171
+ Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.sq_crit_que_slps"
+ Set gtmtypes("node_local",172,"off")=104824
Set gtmtypes("node_local",172,"len")=8
Set gtmtypes("node_local",172,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=172
- Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.n_crit_failed"
- Set gtmtypes("node_local",173,"off")=113008
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=172
+ Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.n_crit_que_slps"
+ Set gtmtypes("node_local",173,"off")=104832
Set gtmtypes("node_local",173,"len")=8
Set gtmtypes("node_local",173,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=173
- Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.sq_crit_que_slps"
- Set gtmtypes("node_local",174,"off")=113016
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=173
+ Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.sq_crit_yields"
+ Set gtmtypes("node_local",174,"off")=104840
Set gtmtypes("node_local",174,"len")=8
Set gtmtypes("node_local",174,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=174
- Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.n_crit_que_slps"
- Set gtmtypes("node_local",175,"off")=113024
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=174
+ Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.n_crit_yields"
+ Set gtmtypes("node_local",175,"off")=104848
Set gtmtypes("node_local",175,"len")=8
Set gtmtypes("node_local",175,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=175
- Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.sq_crit_yields"
- Set gtmtypes("node_local",176,"off")=113032
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=175
+ Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.n_clean2dirty"
+ Set gtmtypes("node_local",176,"off")=104856
Set gtmtypes("node_local",176,"len")=8
Set gtmtypes("node_local",176,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=176
- Set gtmtypes("node_local",177,"name")="node_local.gvstats_rec.n_crit_yields"
- Set gtmtypes("node_local",177,"off")=113040
+ Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=176
+ Set gtmtypes("node_local",177,"name")="node_local.last_wcsflu_tn"
+ Set gtmtypes("node_local",177,"off")=104864
Set gtmtypes("node_local",177,"len")=8
Set gtmtypes("node_local",177,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=177
- Set gtmtypes("node_local",178,"name")="node_local.gvstats_rec.n_clean2dirty"
- Set gtmtypes("node_local",178,"off")=113048
+ Set gtmtypfldindx("node_local","last_wcsflu_tn")=177
+ Set gtmtypes("node_local",178,"name")="node_local.last_wcs_recover_tn"
+ Set gtmtypes("node_local",178,"off")=104872
Set gtmtypes("node_local",178,"len")=8
Set gtmtypes("node_local",178,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=178
- Set gtmtypes("node_local",179,"name")="node_local.last_wcsflu_tn"
- Set gtmtypes("node_local",179,"off")=113056
+ Set gtmtypfldindx("node_local","last_wcs_recover_tn")=178
+ Set gtmtypes("node_local",179,"name")="node_local.encrypt_glo_buff_off"
+ Set gtmtypes("node_local",179,"off")=104880
Set gtmtypes("node_local",179,"len")=8
- Set gtmtypes("node_local",179,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcsflu_tn")=179
- Set gtmtypes("node_local",180,"name")="node_local.last_wcs_recover_tn"
- Set gtmtypes("node_local",180,"off")=113064
+ Set gtmtypes("node_local",179,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=179
+ Set gtmtypes("node_local",180,"name")="node_local.snapshot_crit_latch"
+ Set gtmtypes("node_local",180,"off")=104888
Set gtmtypes("node_local",180,"len")=8
- Set gtmtypes("node_local",180,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcs_recover_tn")=180
- Set gtmtypes("node_local",181,"name")="node_local.encrypt_glo_buff_off"
- Set gtmtypes("node_local",181,"off")=113072
+ Set gtmtypes("node_local",180,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch")=180
+ Set gtmtypes("node_local",181,"name")="node_local.snapshot_crit_latch.u"
+ Set gtmtypes("node_local",181,"off")=104888
Set gtmtypes("node_local",181,"len")=8
- Set gtmtypes("node_local",181,"type")="intptr_t"
- Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=181
- Set gtmtypes("node_local",182,"name")="node_local.snapshot_crit_latch"
- Set gtmtypes("node_local",182,"off")=113080
+ Set gtmtypes("node_local",181,"type")="union"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=181
+ Set gtmtypes("node_local",182,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",182,"off")=104888
Set gtmtypes("node_local",182,"len")=8
- Set gtmtypes("node_local",182,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch")=182
- Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch.u"
- Set gtmtypes("node_local",183,"off")=113080
+ Set gtmtypes("node_local",182,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=182
+ Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch.u.parts"
+ Set gtmtypes("node_local",183,"off")=104888
Set gtmtypes("node_local",183,"len")=8
- Set gtmtypes("node_local",183,"type")="union"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=183
- Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",184,"off")=113080
- Set gtmtypes("node_local",184,"len")=8
- Set gtmtypes("node_local",184,"type")="uint64_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=184
- Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.parts"
- Set gtmtypes("node_local",185,"off")=113080
- Set gtmtypes("node_local",185,"len")=8
- Set gtmtypes("node_local",185,"type")="struct"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=185
- Set gtmtypes("node_local",186,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",186,"off")=113080
- Set gtmtypes("node_local",186,"len")=4
- Set gtmtypes("node_local",186,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=186
- Set gtmtypes("node_local",187,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
- Set gtmtypes("node_local",187,"off")=113084
+ Set gtmtypes("node_local",183,"type")="struct"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=183
+ Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",184,"off")=104888
+ Set gtmtypes("node_local",184,"len")=4
+ Set gtmtypes("node_local",184,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=184
+ Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",185,"off")=104892
+ Set gtmtypes("node_local",185,"len")=4
+ Set gtmtypes("node_local",185,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=185
+ Set gtmtypes("node_local",186,"name")="node_local.ss_shmid"
+ Set gtmtypes("node_local",186,"off")=104896
+ Set gtmtypes("node_local",186,"len")=8
+ Set gtmtypes("node_local",186,"type")="long"
+ Set gtmtypfldindx("node_local","ss_shmid")=186
+ Set gtmtypes("node_local",187,"name")="node_local.ss_shmcycle"
+ Set gtmtypes("node_local",187,"off")=104904
Set gtmtypes("node_local",187,"len")=4
- Set gtmtypes("node_local",187,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=187
- Set gtmtypes("node_local",188,"name")="node_local.ss_shmid"
- Set gtmtypes("node_local",188,"off")=113088
- Set gtmtypes("node_local",188,"len")=8
- Set gtmtypes("node_local",188,"type")="long"
- Set gtmtypfldindx("node_local","ss_shmid")=188
- Set gtmtypes("node_local",189,"name")="node_local.ss_shmcycle"
- Set gtmtypes("node_local",189,"off")=113096
+ Set gtmtypes("node_local",187,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ss_shmcycle")=187
+ Set gtmtypes("node_local",188,"name")="node_local.snapshot_in_prog"
+ Set gtmtypes("node_local",188,"off")=104908
+ Set gtmtypes("node_local",188,"len")=4
+ Set gtmtypes("node_local",188,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","snapshot_in_prog")=188
+ Set gtmtypes("node_local",189,"name")="node_local.num_snapshots_in_effect"
+ Set gtmtypes("node_local",189,"off")=104912
Set gtmtypes("node_local",189,"len")=4
Set gtmtypes("node_local",189,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ss_shmcycle")=189
- Set gtmtypes("node_local",190,"name")="node_local.snapshot_in_prog"
- Set gtmtypes("node_local",190,"off")=113100
+ Set gtmtypfldindx("node_local","num_snapshots_in_effect")=189
+ Set gtmtypes("node_local",190,"name")="node_local.wbox_test_seq_num"
+ Set gtmtypes("node_local",190,"off")=104916
Set gtmtypes("node_local",190,"len")=4
- Set gtmtypes("node_local",190,"type")="boolean_t"
- Set gtmtypfldindx("node_local","snapshot_in_prog")=190
- Set gtmtypes("node_local",191,"name")="node_local.num_snapshots_in_effect"
- Set gtmtypes("node_local",191,"off")=113104
+ Set gtmtypes("node_local",190,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wbox_test_seq_num")=190
+ Set gtmtypes("node_local",191,"name")="node_local.freeze_online"
+ Set gtmtypes("node_local",191,"off")=104920
Set gtmtypes("node_local",191,"len")=4
Set gtmtypes("node_local",191,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","num_snapshots_in_effect")=191
- Set gtmtypes("node_local",192,"name")="node_local.wbox_test_seq_num"
- Set gtmtypes("node_local",192,"off")=113108
- Set gtmtypes("node_local",192,"len")=4
+ Set gtmtypfldindx("node_local","freeze_online")=191
+ Set gtmtypes("node_local",192,"name")="node_local.kip_pid_array"
+ Set gtmtypes("node_local",192,"off")=104924
+ Set gtmtypes("node_local",192,"len")=32
Set gtmtypes("node_local",192,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wbox_test_seq_num")=192
- Set gtmtypes("node_local",193,"name")="node_local.kip_pid_array"
- Set gtmtypes("node_local",193,"off")=113112
- Set gtmtypes("node_local",193,"len")=32
- Set gtmtypes("node_local",193,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","kip_pid_array")=193
- Set gtmtypes("node_local",193,"dim")=8
- Set gtmtypes("node_local",194,"name")="node_local.sec_size"
- Set gtmtypes("node_local",194,"off")=113144
- Set gtmtypes("node_local",194,"len")=8
- Set gtmtypes("node_local",194,"type")="uint64_t"
- Set gtmtypfldindx("node_local","sec_size")=194
- Set gtmtypes("node_local",195,"name")="node_local.jnlpool_shmid"
- Set gtmtypes("node_local",195,"off")=113152
+ Set gtmtypfldindx("node_local","kip_pid_array")=192
+ Set gtmtypes("node_local",192,"dim")=8
+ Set gtmtypes("node_local",193,"name")="node_local.sec_size"
+ Set gtmtypes("node_local",193,"off")=104960
+ Set gtmtypes("node_local",193,"len")=8
+ Set gtmtypes("node_local",193,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","sec_size")=193
+ Set gtmtypes("node_local",194,"name")="node_local.jnlpool_shmid"
+ Set gtmtypes("node_local",194,"off")=104968
+ Set gtmtypes("node_local",194,"len")=4
+ Set gtmtypes("node_local",194,"type")="int"
+ Set gtmtypfldindx("node_local","jnlpool_shmid")=194
+ Set gtmtypes("node_local",195,"name")="node_local.lockspacefull_logged"
+ Set gtmtypes("node_local",195,"off")=104972
Set gtmtypes("node_local",195,"len")=4
- Set gtmtypes("node_local",195,"type")="int"
- Set gtmtypfldindx("node_local","jnlpool_shmid")=195
- Set gtmtypes("node_local",196,"name")="node_local.lockspacefull_logged"
- Set gtmtypes("node_local",196,"off")=113156
+ Set gtmtypes("node_local",195,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lockspacefull_logged")=195
+ Set gtmtypes("node_local",196,"name")="node_local.trunc_pid"
+ Set gtmtypes("node_local",196,"off")=104976
Set gtmtypes("node_local",196,"len")=4
- Set gtmtypes("node_local",196,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lockspacefull_logged")=196
- Set gtmtypes("node_local",197,"name")="node_local.trunc_pid"
- Set gtmtypes("node_local",197,"off")=113160
+ Set gtmtypes("node_local",196,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","trunc_pid")=196
+ Set gtmtypes("node_local",197,"name")="node_local.highest_lbm_with_busy_blk"
+ Set gtmtypes("node_local",197,"off")=104980
Set gtmtypes("node_local",197,"len")=4
- Set gtmtypes("node_local",197,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","trunc_pid")=197
- Set gtmtypes("node_local",198,"name")="node_local.highest_lbm_with_busy_blk"
- Set gtmtypes("node_local",198,"off")=113164
- Set gtmtypes("node_local",198,"len")=4
- Set gtmtypes("node_local",198,"type")="int"
- Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=198
- Set gtmtypes("node_local",199,"name")="node_local.ftok_ops_array"
- Set gtmtypes("node_local",199,"off")=113168
- Set gtmtypes("node_local",199,"len")=8192
- Set gtmtypes("node_local",199,"type")="ftokhist"
- Set gtmtypfldindx("node_local","ftok_ops_array")=199
- Set gtmtypes("node_local",199,"dim")=512
- Set gtmtypes("node_local",200,"name")="node_local.ftok_ops_array[0].ftok_oper"
- Set gtmtypes("node_local",200,"off")=113168
+ Set gtmtypes("node_local",197,"type")="int"
+ Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=197
+ Set gtmtypes("node_local",198,"name")="node_local.ftok_ops_array"
+ Set gtmtypes("node_local",198,"off")=104984
+ Set gtmtypes("node_local",198,"len")=8192
+ Set gtmtypes("node_local",198,"type")="ftokhist"
+ Set gtmtypfldindx("node_local","ftok_ops_array")=198
+ Set gtmtypes("node_local",198,"dim")=512
+ Set gtmtypes("node_local",199,"name")="node_local.ftok_ops_array[0].ftok_oper"
+ Set gtmtypes("node_local",199,"off")=104984
+ Set gtmtypes("node_local",199,"len")=4
+ Set gtmtypes("node_local",199,"type")="int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=199
+ Set gtmtypes("node_local",200,"name")="node_local.ftok_ops_array[0].process_id"
+ Set gtmtypes("node_local",200,"off")=104988
Set gtmtypes("node_local",200,"len")=4
- Set gtmtypes("node_local",200,"type")="int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=200
- Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array[0].process_id"
- Set gtmtypes("node_local",201,"off")=113172
- Set gtmtypes("node_local",201,"len")=4
- Set gtmtypes("node_local",201,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=201
- Set gtmtypes("node_local",202,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypes("node_local",200,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=200
+ Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypes("node_local",201,"off")=104992
+ Set gtmtypes("node_local",201,"len")=8
+ Set gtmtypes("node_local",201,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=201
+ Set gtmtypes("node_local",202,"name")="node_local.root_search_cycle"
Set gtmtypes("node_local",202,"off")=113176
- Set gtmtypes("node_local",202,"len")=8
- Set gtmtypes("node_local",202,"type")="uint64_t"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=202
- Set gtmtypes("node_local",203,"name")="node_local.root_search_cycle"
- Set gtmtypes("node_local",203,"off")=121360
+ Set gtmtypes("node_local",202,"len")=4
+ Set gtmtypes("node_local",202,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","root_search_cycle")=202
+ Set gtmtypes("node_local",203,"name")="node_local.onln_rlbk_cycle"
+ Set gtmtypes("node_local",203,"off")=113180
Set gtmtypes("node_local",203,"len")=4
Set gtmtypes("node_local",203,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","root_search_cycle")=203
- Set gtmtypes("node_local",204,"name")="node_local.onln_rlbk_cycle"
- Set gtmtypes("node_local",204,"off")=121364
+ Set gtmtypfldindx("node_local","onln_rlbk_cycle")=203
+ Set gtmtypes("node_local",204,"name")="node_local.db_onln_rlbkd_cycle"
+ Set gtmtypes("node_local",204,"off")=113184
Set gtmtypes("node_local",204,"len")=4
Set gtmtypes("node_local",204,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_cycle")=204
- Set gtmtypes("node_local",205,"name")="node_local.db_onln_rlbkd_cycle"
- Set gtmtypes("node_local",205,"off")=121368
+ Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=204
+ Set gtmtypes("node_local",205,"name")="node_local.onln_rlbk_pid"
+ Set gtmtypes("node_local",205,"off")=113188
Set gtmtypes("node_local",205,"len")=4
Set gtmtypes("node_local",205,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=205
- Set gtmtypes("node_local",206,"name")="node_local.onln_rlbk_pid"
- Set gtmtypes("node_local",206,"off")=121372
+ Set gtmtypfldindx("node_local","onln_rlbk_pid")=205
+ Set gtmtypes("node_local",206,"name")="node_local.dbrndwn_ftok_skip"
+ Set gtmtypes("node_local",206,"off")=113192
Set gtmtypes("node_local",206,"len")=4
Set gtmtypes("node_local",206,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_pid")=206
- Set gtmtypes("node_local",207,"name")="node_local.dbrndwn_ftok_skip"
- Set gtmtypes("node_local",207,"off")=121376
+ Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=206
+ Set gtmtypes("node_local",207,"name")="node_local.dbrndwn_access_skip"
+ Set gtmtypes("node_local",207,"off")=113196
Set gtmtypes("node_local",207,"len")=4
Set gtmtypes("node_local",207,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=207
- Set gtmtypes("node_local",208,"name")="node_local.dbrndwn_access_skip"
- Set gtmtypes("node_local",208,"off")=121380
+ Set gtmtypfldindx("node_local","dbrndwn_access_skip")=207
+ Set gtmtypes("node_local",208,"name")="node_local.fastinteg_in_prog"
+ Set gtmtypes("node_local",208,"off")=113200
Set gtmtypes("node_local",208,"len")=4
- Set gtmtypes("node_local",208,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_access_skip")=208
- Set gtmtypes("node_local",209,"name")="node_local.fastinteg_in_prog"
- Set gtmtypes("node_local",209,"off")=121384
+ Set gtmtypes("node_local",208,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fastinteg_in_prog")=208
+ Set gtmtypes("node_local",209,"name")="node_local.wtstart_errcnt"
+ Set gtmtypes("node_local",209,"off")=113204
Set gtmtypes("node_local",209,"len")=4
- Set gtmtypes("node_local",209,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fastinteg_in_prog")=209
- Set gtmtypes("node_local",210,"name")="node_local.wtstart_errcnt"
- Set gtmtypes("node_local",210,"off")=121388
+ Set gtmtypes("node_local",209,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wtstart_errcnt")=209
+ Set gtmtypes("node_local",210,"name")="node_local.fake_db_enospc"
+ Set gtmtypes("node_local",210,"off")=113208
Set gtmtypes("node_local",210,"len")=4
- Set gtmtypes("node_local",210,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wtstart_errcnt")=210
- Set gtmtypes("node_local",211,"name")="node_local.fake_db_enospc"
- Set gtmtypes("node_local",211,"off")=121392
+ Set gtmtypes("node_local",210,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fake_db_enospc")=210
+ Set gtmtypes("node_local",211,"name")="node_local.fake_jnl_enospc"
+ Set gtmtypes("node_local",211,"off")=113212
Set gtmtypes("node_local",211,"len")=4
Set gtmtypes("node_local",211,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_db_enospc")=211
- Set gtmtypes("node_local",212,"name")="node_local.fake_jnl_enospc"
- Set gtmtypes("node_local",212,"off")=121396
+ Set gtmtypfldindx("node_local","fake_jnl_enospc")=211
+ Set gtmtypes("node_local",212,"name")="node_local.doing_epoch"
+ Set gtmtypes("node_local",212,"off")=113216
Set gtmtypes("node_local",212,"len")=4
Set gtmtypes("node_local",212,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_jnl_enospc")=212
- Set gtmtypes("node_local",213,"name")="node_local.doing_epoch"
- Set gtmtypes("node_local",213,"off")=121400
+ Set gtmtypfldindx("node_local","doing_epoch")=212
+ Set gtmtypes("node_local",213,"name")="node_local.epoch_taper_start_dbuffs"
+ Set gtmtypes("node_local",213,"off")=113220
Set gtmtypes("node_local",213,"len")=4
- Set gtmtypes("node_local",213,"type")="boolean_t"
- Set gtmtypfldindx("node_local","doing_epoch")=213
- Set gtmtypes("node_local",214,"name")="node_local.epoch_taper_start_dbuffs"
- Set gtmtypes("node_local",214,"off")=121404
+ Set gtmtypes("node_local",213,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=213
+ Set gtmtypes("node_local",214,"name")="node_local.epoch_taper_need_fsync"
+ Set gtmtypes("node_local",214,"off")=113224
Set gtmtypes("node_local",214,"len")=4
- Set gtmtypes("node_local",214,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=214
- Set gtmtypes("node_local",215,"name")="node_local.epoch_taper_need_fsync"
- Set gtmtypes("node_local",215,"off")=121408
- Set gtmtypes("node_local",215,"len")=4
- Set gtmtypes("node_local",215,"type")="boolean_t"
- Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=215
- Set gtmtypes("node_local",216,"name")="node_local.wt_pid_array"
- Set gtmtypes("node_local",216,"off")=121412
- Set gtmtypes("node_local",216,"len")=16
+ Set gtmtypes("node_local",214,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=214
+ Set gtmtypes("node_local",215,"name")="node_local.wt_pid_array"
+ Set gtmtypes("node_local",215,"off")=113228
+ Set gtmtypes("node_local",215,"len")=16
+ Set gtmtypes("node_local",215,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wt_pid_array")=215
+ Set gtmtypes("node_local",215,"dim")=4
+ Set gtmtypes("node_local",216,"name")="node_local.reorg_encrypt_pid"
+ Set gtmtypes("node_local",216,"off")=113244
+ Set gtmtypes("node_local",216,"len")=4
Set gtmtypes("node_local",216,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wt_pid_array")=216
- Set gtmtypes("node_local",216,"dim")=4
- Set gtmtypes("node_local",217,"name")="node_local.reorg_encrypt_pid"
- Set gtmtypes("node_local",217,"off")=121428
+ Set gtmtypfldindx("node_local","reorg_encrypt_pid")=216
+ Set gtmtypes("node_local",217,"name")="node_local.reorg_encrypt_cycle"
+ Set gtmtypes("node_local",217,"off")=113248
Set gtmtypes("node_local",217,"len")=4
Set gtmtypes("node_local",217,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_pid")=217
- Set gtmtypes("node_local",218,"name")="node_local.reorg_encrypt_cycle"
- Set gtmtypes("node_local",218,"off")=121432
+ Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=217
+ Set gtmtypes("node_local",218,"name")="node_local.mupip_extract_count"
+ Set gtmtypes("node_local",218,"off")=113252
Set gtmtypes("node_local",218,"len")=4
Set gtmtypes("node_local",218,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=218
- Set gtmtypes("node_local",219,"name")="node_local.mupip_extract_count"
- Set gtmtypes("node_local",219,"off")=121436
+ Set gtmtypfldindx("node_local","mupip_extract_count")=218
+ Set gtmtypes("node_local",219,"name")="node_local.saved_acc_meth"
+ Set gtmtypes("node_local",219,"off")=113256
Set gtmtypes("node_local",219,"len")=4
- Set gtmtypes("node_local",219,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","mupip_extract_count")=219
- Set gtmtypes("node_local",220,"name")="node_local.saved_acc_meth"
- Set gtmtypes("node_local",220,"off")=121440
+ Set gtmtypes("node_local",219,"type")="int"
+ Set gtmtypfldindx("node_local","saved_acc_meth")=219
+ Set gtmtypes("node_local",220,"name")="node_local.saved_blk_size"
+ Set gtmtypes("node_local",220,"off")=113260
Set gtmtypes("node_local",220,"len")=4
Set gtmtypes("node_local",220,"type")="int"
- Set gtmtypfldindx("node_local","saved_acc_meth")=220
- Set gtmtypes("node_local",221,"name")="node_local.saved_blk_size"
- Set gtmtypes("node_local",221,"off")=121444
+ Set gtmtypfldindx("node_local","saved_blk_size")=220
+ Set gtmtypes("node_local",221,"name")="node_local.saved_lock_space_size"
+ Set gtmtypes("node_local",221,"off")=113264
Set gtmtypes("node_local",221,"len")=4
- Set gtmtypes("node_local",221,"type")="int"
- Set gtmtypfldindx("node_local","saved_blk_size")=221
- Set gtmtypes("node_local",222,"name")="node_local.saved_lock_space_size"
- Set gtmtypes("node_local",222,"off")=121448
+ Set gtmtypes("node_local",221,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","saved_lock_space_size")=221
+ Set gtmtypes("node_local",222,"name")="node_local.saved_jnl_buffer_size"
+ Set gtmtypes("node_local",222,"off")=113268
Set gtmtypes("node_local",222,"len")=4
- Set gtmtypes("node_local",222,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","saved_lock_space_size")=222
- Set gtmtypes("node_local",223,"name")="node_local.saved_jnl_buffer_size"
- Set gtmtypes("node_local",223,"off")=121452
- Set gtmtypes("node_local",223,"len")=4
- Set gtmtypes("node_local",223,"type")="int"
- Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=223
- Set gtmtypes("node_local",224,"name")="node_local.update_underway_tn"
- Set gtmtypes("node_local",224,"off")=121456
- Set gtmtypes("node_local",224,"len")=8
- Set gtmtypes("node_local",224,"type")="uint64_t"
- Set gtmtypfldindx("node_local","update_underway_tn")=224
- Set gtmtypes("node_local",225,"name")="node_local.lastwriterbypas_msg_issued"
- Set gtmtypes("node_local",225,"off")=121464
+ Set gtmtypes("node_local",222,"type")="int"
+ Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=222
+ Set gtmtypes("node_local",223,"name")="node_local.update_underway_tn"
+ Set gtmtypes("node_local",223,"off")=113272
+ Set gtmtypes("node_local",223,"len")=8
+ Set gtmtypes("node_local",223,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","update_underway_tn")=223
+ Set gtmtypes("node_local",224,"name")="node_local.lastwriterbypas_msg_issued"
+ Set gtmtypes("node_local",224,"off")=113280
+ Set gtmtypes("node_local",224,"len")=4
+ Set gtmtypes("node_local",224,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=224
+ Set gtmtypes("node_local",225,"name")="node_local.first_writer_seen"
+ Set gtmtypes("node_local",225,"off")=113284
Set gtmtypes("node_local",225,"len")=4
Set gtmtypes("node_local",225,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=225
- Set gtmtypes("node_local",226,"name")="node_local.first_writer_seen"
- Set gtmtypes("node_local",226,"off")=121468
+ Set gtmtypfldindx("node_local","first_writer_seen")=225
+ Set gtmtypes("node_local",226,"name")="node_local.first_nonbypas_writer_seen"
+ Set gtmtypes("node_local",226,"off")=113288
Set gtmtypes("node_local",226,"len")=4
Set gtmtypes("node_local",226,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_writer_seen")=226
- Set gtmtypes("node_local",227,"name")="node_local.first_nonbypas_writer_seen"
- Set gtmtypes("node_local",227,"off")=121472
+ Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=226
+ Set gtmtypes("node_local",227,"name")="node_local.ftok_counter_halted"
+ Set gtmtypes("node_local",227,"off")=113292
Set gtmtypes("node_local",227,"len")=4
Set gtmtypes("node_local",227,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=227
- Set gtmtypes("node_local",228,"name")="node_local.ftok_counter_halted"
- Set gtmtypes("node_local",228,"off")=121476
+ Set gtmtypfldindx("node_local","ftok_counter_halted")=227
+ Set gtmtypes("node_local",228,"name")="node_local.access_counter_halted"
+ Set gtmtypes("node_local",228,"off")=113296
Set gtmtypes("node_local",228,"len")=4
Set gtmtypes("node_local",228,"type")="boolean_t"
- Set gtmtypfldindx("node_local","ftok_counter_halted")=228
- Set gtmtypes("node_local",229,"name")="node_local.access_counter_halted"
- Set gtmtypes("node_local",229,"off")=121480
+ Set gtmtypfldindx("node_local","access_counter_halted")=228
+ Set gtmtypes("node_local",229,"name")="node_local.statsdb_created"
+ Set gtmtypes("node_local",229,"off")=113300
Set gtmtypes("node_local",229,"len")=4
Set gtmtypes("node_local",229,"type")="boolean_t"
- Set gtmtypfldindx("node_local","access_counter_halted")=229
- Set gtmtypes("node_local",230,"name")="node_local.statsdb_created"
- Set gtmtypes("node_local",230,"off")=121484
+ Set gtmtypfldindx("node_local","statsdb_created")=229
+ Set gtmtypes("node_local",230,"name")="node_local.statsdb_fname_len"
+ Set gtmtypes("node_local",230,"off")=113304
Set gtmtypes("node_local",230,"len")=4
- Set gtmtypes("node_local",230,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_created")=230
- Set gtmtypes("node_local",231,"name")="node_local.statsdb_fname_len"
- Set gtmtypes("node_local",231,"off")=121488
+ Set gtmtypes("node_local",230,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","statsdb_fname_len")=230
+ Set gtmtypes("node_local",231,"name")="node_local.statsdb_rundown_clean"
+ Set gtmtypes("node_local",231,"off")=113308
Set gtmtypes("node_local",231,"len")=4
- Set gtmtypes("node_local",231,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","statsdb_fname_len")=231
- Set gtmtypes("node_local",232,"name")="node_local.statsdb_rundown_clean"
- Set gtmtypes("node_local",232,"off")=121492
- Set gtmtypes("node_local",232,"len")=4
- Set gtmtypes("node_local",232,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_rundown_clean")=232
- Set gtmtypes("node_local",233,"name")="node_local.freeze_latch"
- Set gtmtypes("node_local",233,"off")=121496
+ Set gtmtypes("node_local",231,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","statsdb_rundown_clean")=231
+ Set gtmtypes("node_local",232,"name")="node_local.freeze_latch"
+ Set gtmtypes("node_local",232,"off")=113312
+ Set gtmtypes("node_local",232,"len")=8
+ Set gtmtypes("node_local",232,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","freeze_latch")=232
+ Set gtmtypes("node_local",233,"name")="node_local.freeze_latch.u"
+ Set gtmtypes("node_local",233,"off")=113312
Set gtmtypes("node_local",233,"len")=8
- Set gtmtypes("node_local",233,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","freeze_latch")=233
- Set gtmtypes("node_local",234,"name")="node_local.freeze_latch.u"
- Set gtmtypes("node_local",234,"off")=121496
+ Set gtmtypes("node_local",233,"type")="union"
+ Set gtmtypfldindx("node_local","freeze_latch.u")=233
+ Set gtmtypes("node_local",234,"name")="node_local.freeze_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",234,"off")=113312
Set gtmtypes("node_local",234,"len")=8
- Set gtmtypes("node_local",234,"type")="union"
- Set gtmtypfldindx("node_local","freeze_latch.u")=234
- Set gtmtypes("node_local",235,"name")="node_local.freeze_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",235,"off")=121496
+ Set gtmtypes("node_local",234,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=234
+ Set gtmtypes("node_local",235,"name")="node_local.freeze_latch.u.parts"
+ Set gtmtypes("node_local",235,"off")=113312
Set gtmtypes("node_local",235,"len")=8
- Set gtmtypes("node_local",235,"type")="uint64_t"
- Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=235
- Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u.parts"
- Set gtmtypes("node_local",236,"off")=121496
- Set gtmtypes("node_local",236,"len")=8
- Set gtmtypes("node_local",236,"type")="struct"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts")=236
- Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",237,"off")=121496
+ Set gtmtypes("node_local",235,"type")="struct"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts")=235
+ Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",236,"off")=113312
+ Set gtmtypes("node_local",236,"len")=4
+ Set gtmtypes("node_local",236,"type")="int"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=236
+ Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",237,"off")=113316
Set gtmtypes("node_local",237,"len")=4
Set gtmtypes("node_local",237,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=237
- Set gtmtypes("node_local",238,"name")="node_local.freeze_latch.u.parts.latch_word"
- Set gtmtypes("node_local",238,"off")=121500
- Set gtmtypes("node_local",238,"len")=4
- Set gtmtypes("node_local",238,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=238
- Set gtmtypes("node_local",239,"name")="node_local.wcs_buffs_freed"
- Set gtmtypes("node_local",239,"off")=121504
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=237
+ Set gtmtypes("node_local",238,"name")="node_local.wcs_buffs_freed"
+ Set gtmtypes("node_local",238,"off")=113320
+ Set gtmtypes("node_local",238,"len")=8
+ Set gtmtypes("node_local",238,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_buffs_freed")=238
+ Set gtmtypes("node_local",239,"name")="node_local.dskspace_next_fire"
+ Set gtmtypes("node_local",239,"off")=113328
Set gtmtypes("node_local",239,"len")=8
Set gtmtypes("node_local",239,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_buffs_freed")=239
- Set gtmtypes("node_local",240,"name")="node_local.dskspace_next_fire"
- Set gtmtypes("node_local",240,"off")=121512
+ Set gtmtypfldindx("node_local","dskspace_next_fire")=239
+ Set gtmtypes("node_local",240,"name")="node_local.lock_crit"
+ Set gtmtypes("node_local",240,"off")=113336
Set gtmtypes("node_local",240,"len")=8
- Set gtmtypes("node_local",240,"type")="uint64_t"
- Set gtmtypfldindx("node_local","dskspace_next_fire")=240
- Set gtmtypes("node_local",241,"name")="node_local.lock_crit"
- Set gtmtypes("node_local",241,"off")=121520
+ Set gtmtypes("node_local",240,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","lock_crit")=240
+ Set gtmtypes("node_local",241,"name")="node_local.lock_crit.u"
+ Set gtmtypes("node_local",241,"off")=113336
Set gtmtypes("node_local",241,"len")=8
- Set gtmtypes("node_local",241,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","lock_crit")=241
- Set gtmtypes("node_local",242,"name")="node_local.lock_crit.u"
- Set gtmtypes("node_local",242,"off")=121520
+ Set gtmtypes("node_local",241,"type")="union"
+ Set gtmtypfldindx("node_local","lock_crit.u")=241
+ Set gtmtypes("node_local",242,"name")="node_local.lock_crit.u.pid_imgcnt"
+ Set gtmtypes("node_local",242,"off")=113336
Set gtmtypes("node_local",242,"len")=8
- Set gtmtypes("node_local",242,"type")="union"
- Set gtmtypfldindx("node_local","lock_crit.u")=242
- Set gtmtypes("node_local",243,"name")="node_local.lock_crit.u.pid_imgcnt"
- Set gtmtypes("node_local",243,"off")=121520
+ Set gtmtypes("node_local",242,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=242
+ Set gtmtypes("node_local",243,"name")="node_local.lock_crit.u.parts"
+ Set gtmtypes("node_local",243,"off")=113336
Set gtmtypes("node_local",243,"len")=8
- Set gtmtypes("node_local",243,"type")="uint64_t"
- Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=243
- Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u.parts"
- Set gtmtypes("node_local",244,"off")=121520
- Set gtmtypes("node_local",244,"len")=8
- Set gtmtypes("node_local",244,"type")="struct"
- Set gtmtypfldindx("node_local","lock_crit.u.parts")=244
- Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.parts.latch_pid"
- Set gtmtypes("node_local",245,"off")=121520
+ Set gtmtypes("node_local",243,"type")="struct"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts")=243
+ Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u.parts.latch_pid"
+ Set gtmtypes("node_local",244,"off")=113336
+ Set gtmtypes("node_local",244,"len")=4
+ Set gtmtypes("node_local",244,"type")="int"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=244
+ Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.parts.latch_word"
+ Set gtmtypes("node_local",245,"off")=113340
Set gtmtypes("node_local",245,"len")=4
Set gtmtypes("node_local",245,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=245
- Set gtmtypes("node_local",246,"name")="node_local.lock_crit.u.parts.latch_word"
- Set gtmtypes("node_local",246,"off")=121524
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=245
+ Set gtmtypes("node_local",246,"name")="node_local.tp_hint"
+ Set gtmtypes("node_local",246,"off")=113344
Set gtmtypes("node_local",246,"len")=4
Set gtmtypes("node_local",246,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=246
- Set gtmtypes("node_local",247,"name")="node_local.tp_hint"
- Set gtmtypes("node_local",247,"off")=121528
+ Set gtmtypfldindx("node_local","tp_hint")=246
+ Set gtmtypes("node_local",247,"name")="node_local.filler_8byte_align3"
+ Set gtmtypes("node_local",247,"off")=113348
Set gtmtypes("node_local",247,"len")=4
Set gtmtypes("node_local",247,"type")="int"
- Set gtmtypfldindx("node_local","tp_hint")=247
- Set gtmtypes("node_local",248,"name")="node_local.filler_8byte_align6"
- Set gtmtypes("node_local",248,"off")=121532
- Set gtmtypes("node_local",248,"len")=4
- Set gtmtypes("node_local",248,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align6")=248
+ Set gtmtypfldindx("node_local","filler_8byte_align3")=247
;
Set gtmtypes("noisolation_element")="struct"
Set gtmtypes("noisolation_element",0)=2
@@ -27417,8 +27513,8 @@ Init
Set gtmtypfldindx("sgmm_addrs","filler")=1
;
Set gtmtypes("sgmnt_addrs")="struct"
- Set gtmtypes("sgmnt_addrs",0)=152
- Set gtmtypes("sgmnt_addrs","len")=992
+ Set gtmtypes("sgmnt_addrs",0)=155
+ Set gtmtypes("sgmnt_addrs","len")=1016
Set gtmtypes("sgmnt_addrs",1,"name")="sgmnt_addrs.hdr"
Set gtmtypes("sgmnt_addrs",1,"off")=0
Set gtmtypes("sgmnt_addrs",1,"len")=8
@@ -28181,9 +28277,24 @@ Init
Set gtmtypes("sgmnt_addrs",152,"len")=4
Set gtmtypes("sgmnt_addrs",152,"type")="boolean_t"
Set gtmtypfldindx("sgmnt_addrs","statsDB_setup_completed")=152
+ Set gtmtypes("sgmnt_addrs",153,"name")="sgmnt_addrs.gd_instinfo"
+ Set gtmtypes("sgmnt_addrs",153,"off")=992
+ Set gtmtypes("sgmnt_addrs",153,"len")=8
+ Set gtmtypes("sgmnt_addrs",153,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_instinfo")=153
+ Set gtmtypes("sgmnt_addrs",154,"name")="sgmnt_addrs.gd_ptr"
+ Set gtmtypes("sgmnt_addrs",154,"off")=1000
+ Set gtmtypes("sgmnt_addrs",154,"len")=8
+ Set gtmtypes("sgmnt_addrs",154,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_ptr")=154
+ Set gtmtypes("sgmnt_addrs",155,"name")="sgmnt_addrs.jnlpool"
+ Set gtmtypes("sgmnt_addrs",155,"off")=1008
+ Set gtmtypes("sgmnt_addrs",155,"len")=8
+ Set gtmtypes("sgmnt_addrs",155,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","jnlpool")=155
;
Set gtmtypes("sgmnt_data")="struct"
- Set gtmtypes("sgmnt_data",0)=592
+ Set gtmtypes("sgmnt_data",0)=593
Set gtmtypes("sgmnt_data","len")=8192
Set gtmtypes("sgmnt_data",1,"name")="sgmnt_data.label"
Set gtmtypes("sgmnt_data",1,"off")=0
@@ -28440,11 +28551,11 @@ Init
Set gtmtypes("sgmnt_data",51,"len")=4
Set gtmtypes("sgmnt_data",51,"type")="int"
Set gtmtypfldindx("sgmnt_data","abandoned_kills")=51
- Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.freeze_online"
+ Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.unused_freeze_online_filler"
Set gtmtypes("sgmnt_data",52,"off")=312
Set gtmtypes("sgmnt_data",52,"len")=4
Set gtmtypes("sgmnt_data",52,"type")="unsigned-int"
- Set gtmtypfldindx("sgmnt_data","freeze_online")=52
+ Set gtmtypfldindx("sgmnt_data","unused_freeze_online_filler")=52
Set gtmtypes("sgmnt_data",53,"name")="sgmnt_data.filler_320"
Set gtmtypes("sgmnt_data",53,"off")=316
Set gtmtypes("sgmnt_data",53,"len")=4
@@ -31151,16 +31262,21 @@ Init
Set gtmtypes("sgmnt_data",590,"len")=256
Set gtmtypes("sgmnt_data",590,"type")="unsigned-char"
Set gtmtypfldindx("sgmnt_data","basedb_fname")=590
- Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.read_only"
Set gtmtypes("sgmnt_data",591,"off")=6724
- Set gtmtypes("sgmnt_data",591,"len")=444
- Set gtmtypes("sgmnt_data",591,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_7k")=591
- Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_8k"
- Set gtmtypes("sgmnt_data",592,"off")=7168
- Set gtmtypes("sgmnt_data",592,"len")=1024
+ Set gtmtypes("sgmnt_data",591,"len")=4
+ Set gtmtypes("sgmnt_data",591,"type")="boolean_t"
+ Set gtmtypfldindx("sgmnt_data","read_only")=591
+ Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",592,"off")=6728
+ Set gtmtypes("sgmnt_data",592,"len")=440
Set gtmtypes("sgmnt_data",592,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_8k")=592
+ Set gtmtypfldindx("sgmnt_data","filler_7k")=592
+ Set gtmtypes("sgmnt_data",593,"name")="sgmnt_data.filler_8k"
+ Set gtmtypes("sgmnt_data",593,"off")=7168
+ Set gtmtypes("sgmnt_data",593,"len")=1024
+ Set gtmtypes("sgmnt_data",593,"type")="char"
+ Set gtmtypfldindx("sgmnt_data","filler_8k")=593
;
Set gtmtypes("shm_forw_multi_t")="struct"
Set gtmtypes("shm_forw_multi_t",0)=20
@@ -31337,7 +31453,7 @@ Init
Set gtmtypes("shm_reg_ctl_t",9,"dim")=3
;
Set gtmtypes("shm_snapshot_t")="struct"
- Set gtmtypes("shm_snapshot_t",0)=614
+ Set gtmtypes("shm_snapshot_t",0)=615
Set gtmtypes("shm_snapshot_t","len")=12376
Set gtmtypes("shm_snapshot_t",1,"name")="shm_snapshot_t.ss_info"
Set gtmtypes("shm_snapshot_t",1,"off")=0
@@ -31704,11 +31820,11 @@ Init
Set gtmtypes("shm_snapshot_t",73,"len")=4
Set gtmtypes("shm_snapshot_t",73,"type")="int"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.abandoned_kills")=73
- Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.freeze_online"
+ Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shm_snapshot_t",74,"off")=4496
Set gtmtypes("shm_snapshot_t",74,"len")=4
Set gtmtypes("shm_snapshot_t",74,"type")="unsigned-int"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.freeze_online")=74
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.unused_freeze_online_filler")=74
Set gtmtypes("shm_snapshot_t",75,"name")="shm_snapshot_t.shadow_file_header.filler_320"
Set gtmtypes("shm_snapshot_t",75,"off")=4500
Set gtmtypes("shm_snapshot_t",75,"len")=4
@@ -34415,16 +34531,21 @@ Init
Set gtmtypes("shm_snapshot_t",612,"len")=256
Set gtmtypes("shm_snapshot_t",612,"type")="unsigned-char"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.basedb_fname")=612
- Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.read_only"
Set gtmtypes("shm_snapshot_t",613,"off")=10908
- Set gtmtypes("shm_snapshot_t",613,"len")=444
- Set gtmtypes("shm_snapshot_t",613,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=613
- Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
- Set gtmtypes("shm_snapshot_t",614,"off")=11352
- Set gtmtypes("shm_snapshot_t",614,"len")=1024
+ Set gtmtypes("shm_snapshot_t",613,"len")=4
+ Set gtmtypes("shm_snapshot_t",613,"type")="boolean_t"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.read_only")=613
+ Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",614,"off")=10912
+ Set gtmtypes("shm_snapshot_t",614,"len")=440
Set gtmtypes("shm_snapshot_t",614,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=614
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=614
+ Set gtmtypes("shm_snapshot_t",615,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
+ Set gtmtypes("shm_snapshot_t",615,"off")=11352
+ Set gtmtypes("shm_snapshot_t",615,"len")=1024
+ Set gtmtypes("shm_snapshot_t",615,"type")="char"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=615
;
Set gtmtypes("shmpool_blk_hdr")="struct"
Set gtmtypes("shmpool_blk_hdr",0)=11
@@ -34486,7 +34607,7 @@ Init
Set gtmtypfldindx("shmpool_blk_hdr","image_count")=11
;
Set gtmtypes("shmpool_buff_hdr")="struct"
- Set gtmtypes("shmpool_buff_hdr",0)=621
+ Set gtmtypes("shmpool_buff_hdr",0)=622
Set gtmtypes("shmpool_buff_hdr","len")=8560
Set gtmtypes("shmpool_buff_hdr",1,"name")="shmpool_buff_hdr.shmpool_crit_latch"
Set gtmtypes("shmpool_buff_hdr",1,"off")=0
@@ -34888,11 +35009,11 @@ Init
Set gtmtypes("shmpool_buff_hdr",80,"len")=4
Set gtmtypes("shmpool_buff_hdr",80,"type")="int"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.abandoned_kills")=80
- Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.freeze_online"
+ Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shmpool_buff_hdr",81,"off")=680
Set gtmtypes("shmpool_buff_hdr",81,"len")=4
Set gtmtypes("shmpool_buff_hdr",81,"type")="unsigned-int"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.freeze_online")=81
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.unused_freeze_online_filler")=81
Set gtmtypes("shmpool_buff_hdr",82,"name")="shmpool_buff_hdr.shadow_file_header.filler_320"
Set gtmtypes("shmpool_buff_hdr",82,"off")=684
Set gtmtypes("shmpool_buff_hdr",82,"len")=4
@@ -37599,16 +37720,21 @@ Init
Set gtmtypes("shmpool_buff_hdr",619,"len")=256
Set gtmtypes("shmpool_buff_hdr",619,"type")="unsigned-char"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.basedb_fname")=619
- Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.read_only"
Set gtmtypes("shmpool_buff_hdr",620,"off")=7092
- Set gtmtypes("shmpool_buff_hdr",620,"len")=444
- Set gtmtypes("shmpool_buff_hdr",620,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=620
- Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
- Set gtmtypes("shmpool_buff_hdr",621,"off")=7536
- Set gtmtypes("shmpool_buff_hdr",621,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",620,"len")=4
+ Set gtmtypes("shmpool_buff_hdr",620,"type")="boolean_t"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.read_only")=620
+ Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",621,"off")=7096
+ Set gtmtypes("shmpool_buff_hdr",621,"len")=440
Set gtmtypes("shmpool_buff_hdr",621,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=621
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=621
+ Set gtmtypes("shmpool_buff_hdr",622,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
+ Set gtmtypes("shmpool_buff_hdr",622,"off")=7536
+ Set gtmtypes("shmpool_buff_hdr",622,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",622,"type")="char"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=622
;
Set gtmtypes("show_reply")="struct"
Set gtmtypes("show_reply",0)=2
@@ -41429,11 +41555,11 @@ Init
Set gtmtypfldindx("unique_file_id","file_id")=5
;
Set gtmtypes("unix_db_info")="struct"
- Set gtmtypes("unix_db_info",0)=168
- Set gtmtypes("unix_db_info","len")=1096
+ Set gtmtypes("unix_db_info",0)=171
+ Set gtmtypes("unix_db_info","len")=1120
Set gtmtypes("unix_db_info",1,"name")="unix_db_info.s_addrs"
Set gtmtypes("unix_db_info",1,"off")=0
- Set gtmtypes("unix_db_info",1,"len")=992
+ Set gtmtypes("unix_db_info",1,"len")=1016
Set gtmtypes("unix_db_info",1,"type")="sgmnt_addrs"
Set gtmtypfldindx("unix_db_info","s_addrs")=1
Set gtmtypes("unix_db_info",2,"name")="unix_db_info.s_addrs.hdr"
@@ -42198,81 +42324,96 @@ Init
Set gtmtypes("unix_db_info",153,"len")=4
Set gtmtypes("unix_db_info",153,"type")="boolean_t"
Set gtmtypfldindx("unix_db_info","s_addrs.statsDB_setup_completed")=153
- Set gtmtypes("unix_db_info",154,"name")="unix_db_info.fn"
+ Set gtmtypes("unix_db_info",154,"name")="unix_db_info.s_addrs.gd_instinfo"
Set gtmtypes("unix_db_info",154,"off")=992
Set gtmtypes("unix_db_info",154,"len")=8
Set gtmtypes("unix_db_info",154,"type")="addr"
- Set gtmtypfldindx("unix_db_info","fn")=154
- Set gtmtypes("unix_db_info",155,"name")="unix_db_info.fd"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_instinfo")=154
+ Set gtmtypes("unix_db_info",155,"name")="unix_db_info.s_addrs.gd_ptr"
Set gtmtypes("unix_db_info",155,"off")=1000
- Set gtmtypes("unix_db_info",155,"len")=4
- Set gtmtypes("unix_db_info",155,"type")="int"
- Set gtmtypfldindx("unix_db_info","fd")=155
- Set gtmtypes("unix_db_info",156,"name")="unix_db_info.owning_gd"
+ Set gtmtypes("unix_db_info",155,"len")=8
+ Set gtmtypes("unix_db_info",155,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_ptr")=155
+ Set gtmtypes("unix_db_info",156,"name")="unix_db_info.s_addrs.jnlpool"
Set gtmtypes("unix_db_info",156,"off")=1008
Set gtmtypes("unix_db_info",156,"len")=8
Set gtmtypes("unix_db_info",156,"type")="addr"
- Set gtmtypfldindx("unix_db_info","owning_gd")=156
- Set gtmtypes("unix_db_info",157,"name")="unix_db_info.fileid"
+ Set gtmtypfldindx("unix_db_info","s_addrs.jnlpool")=156
+ Set gtmtypes("unix_db_info",157,"name")="unix_db_info.fn"
Set gtmtypes("unix_db_info",157,"off")=1016
- Set gtmtypes("unix_db_info",157,"len")=24
- Set gtmtypes("unix_db_info",157,"type")="unix_file_id"
- Set gtmtypfldindx("unix_db_info","fileid")=157
- Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fileid.inode"
- Set gtmtypes("unix_db_info",158,"off")=1016
- Set gtmtypes("unix_db_info",158,"len")=8
- Set gtmtypes("unix_db_info",158,"type")="ino_t"
- Set gtmtypfldindx("unix_db_info","fileid.inode")=158
- Set gtmtypes("unix_db_info",159,"name")="unix_db_info.fileid.device"
- Set gtmtypes("unix_db_info",159,"off")=1024
+ Set gtmtypes("unix_db_info",157,"len")=8
+ Set gtmtypes("unix_db_info",157,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","fn")=157
+ Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fd"
+ Set gtmtypes("unix_db_info",158,"off")=1024
+ Set gtmtypes("unix_db_info",158,"len")=4
+ Set gtmtypes("unix_db_info",158,"type")="int"
+ Set gtmtypfldindx("unix_db_info","fd")=158
+ Set gtmtypes("unix_db_info",159,"name")="unix_db_info.owning_gd"
+ Set gtmtypes("unix_db_info",159,"off")=1032
Set gtmtypes("unix_db_info",159,"len")=8
- Set gtmtypes("unix_db_info",159,"type")="dev_t"
- Set gtmtypfldindx("unix_db_info","fileid.device")=159
- Set gtmtypes("unix_db_info",160,"name")="unix_db_info.fileid.st_gen"
- Set gtmtypes("unix_db_info",160,"off")=1032
- Set gtmtypes("unix_db_info",160,"len")=4
- Set gtmtypes("unix_db_info",160,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","fileid.st_gen")=160
- Set gtmtypes("unix_db_info",161,"name")="unix_db_info.semid"
+ Set gtmtypes("unix_db_info",159,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","owning_gd")=159
+ Set gtmtypes("unix_db_info",160,"name")="unix_db_info.fileid"
+ Set gtmtypes("unix_db_info",160,"off")=1040
+ Set gtmtypes("unix_db_info",160,"len")=24
+ Set gtmtypes("unix_db_info",160,"type")="unix_file_id"
+ Set gtmtypfldindx("unix_db_info","fileid")=160
+ Set gtmtypes("unix_db_info",161,"name")="unix_db_info.fileid.inode"
Set gtmtypes("unix_db_info",161,"off")=1040
- Set gtmtypes("unix_db_info",161,"len")=4
- Set gtmtypes("unix_db_info",161,"type")="int"
- Set gtmtypfldindx("unix_db_info","semid")=161
- Set gtmtypes("unix_db_info",162,"name")="unix_db_info.gt_sem_ctime"
+ Set gtmtypes("unix_db_info",161,"len")=8
+ Set gtmtypes("unix_db_info",161,"type")="ino_t"
+ Set gtmtypfldindx("unix_db_info","fileid.inode")=161
+ Set gtmtypes("unix_db_info",162,"name")="unix_db_info.fileid.device"
Set gtmtypes("unix_db_info",162,"off")=1048
Set gtmtypes("unix_db_info",162,"len")=8
- Set gtmtypes("unix_db_info",162,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=162
- Set gtmtypes("unix_db_info",163,"name")="unix_db_info.shmid"
+ Set gtmtypes("unix_db_info",162,"type")="dev_t"
+ Set gtmtypfldindx("unix_db_info","fileid.device")=162
+ Set gtmtypes("unix_db_info",163,"name")="unix_db_info.fileid.st_gen"
Set gtmtypes("unix_db_info",163,"off")=1056
Set gtmtypes("unix_db_info",163,"len")=4
- Set gtmtypes("unix_db_info",163,"type")="int"
- Set gtmtypfldindx("unix_db_info","shmid")=163
- Set gtmtypes("unix_db_info",164,"name")="unix_db_info.gt_shm_ctime"
+ Set gtmtypes("unix_db_info",163,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","fileid.st_gen")=163
+ Set gtmtypes("unix_db_info",164,"name")="unix_db_info.semid"
Set gtmtypes("unix_db_info",164,"off")=1064
- Set gtmtypes("unix_db_info",164,"len")=8
- Set gtmtypes("unix_db_info",164,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=164
- Set gtmtypes("unix_db_info",165,"name")="unix_db_info.ftok_semid"
+ Set gtmtypes("unix_db_info",164,"len")=4
+ Set gtmtypes("unix_db_info",164,"type")="int"
+ Set gtmtypfldindx("unix_db_info","semid")=164
+ Set gtmtypes("unix_db_info",165,"name")="unix_db_info.gt_sem_ctime"
Set gtmtypes("unix_db_info",165,"off")=1072
- Set gtmtypes("unix_db_info",165,"len")=4
- Set gtmtypes("unix_db_info",165,"type")="int"
- Set gtmtypfldindx("unix_db_info","ftok_semid")=165
- Set gtmtypes("unix_db_info",166,"name")="unix_db_info.key"
- Set gtmtypes("unix_db_info",166,"off")=1076
+ Set gtmtypes("unix_db_info",165,"len")=8
+ Set gtmtypes("unix_db_info",165,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=165
+ Set gtmtypes("unix_db_info",166,"name")="unix_db_info.shmid"
+ Set gtmtypes("unix_db_info",166,"off")=1080
Set gtmtypes("unix_db_info",166,"len")=4
- Set gtmtypes("unix_db_info",166,"type")="key_t"
- Set gtmtypfldindx("unix_db_info","key")=166
- Set gtmtypes("unix_db_info",167,"name")="unix_db_info.raw"
- Set gtmtypes("unix_db_info",167,"off")=1080
- Set gtmtypes("unix_db_info",167,"len")=4
- Set gtmtypes("unix_db_info",167,"type")="boolean_t"
- Set gtmtypfldindx("unix_db_info","raw")=167
- Set gtmtypes("unix_db_info",168,"name")="unix_db_info.db_fs_block_size"
- Set gtmtypes("unix_db_info",168,"off")=1084
+ Set gtmtypes("unix_db_info",166,"type")="int"
+ Set gtmtypfldindx("unix_db_info","shmid")=166
+ Set gtmtypes("unix_db_info",167,"name")="unix_db_info.gt_shm_ctime"
+ Set gtmtypes("unix_db_info",167,"off")=1088
+ Set gtmtypes("unix_db_info",167,"len")=8
+ Set gtmtypes("unix_db_info",167,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=167
+ Set gtmtypes("unix_db_info",168,"name")="unix_db_info.ftok_semid"
+ Set gtmtypes("unix_db_info",168,"off")=1096
Set gtmtypes("unix_db_info",168,"len")=4
- Set gtmtypes("unix_db_info",168,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","db_fs_block_size")=168
+ Set gtmtypes("unix_db_info",168,"type")="int"
+ Set gtmtypfldindx("unix_db_info","ftok_semid")=168
+ Set gtmtypes("unix_db_info",169,"name")="unix_db_info.key"
+ Set gtmtypes("unix_db_info",169,"off")=1100
+ Set gtmtypes("unix_db_info",169,"len")=4
+ Set gtmtypes("unix_db_info",169,"type")="key_t"
+ Set gtmtypfldindx("unix_db_info","key")=169
+ Set gtmtypes("unix_db_info",170,"name")="unix_db_info.raw"
+ Set gtmtypes("unix_db_info",170,"off")=1104
+ Set gtmtypes("unix_db_info",170,"len")=4
+ Set gtmtypes("unix_db_info",170,"type")="boolean_t"
+ Set gtmtypfldindx("unix_db_info","raw")=170
+ Set gtmtypes("unix_db_info",171,"name")="unix_db_info.db_fs_block_size"
+ Set gtmtypes("unix_db_info",171,"off")=1108
+ Set gtmtypes("unix_db_info",171,"len")=4
+ Set gtmtypes("unix_db_info",171,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","db_fs_block_size")=171
;
Set gtmtypes("unix_file_id")="struct"
Set gtmtypes("unix_file_id",0)=3
@@ -43510,6 +43651,7 @@ Init
Set gtmstructs("gd_binding_struct")="gd_binding"
Set gtmstructs("gd_gblname_struct")="gd_gblname"
Set gtmstructs("gd_id_struct")="unix_file_id"
+ Set gtmstructs("gd_inst_info_struct")="gd_inst_info"
Set gtmstructs("gd_region_struct")="gd_region"
Set gtmstructs("gd_segment_struct")="gd_segment"
Set gtmstructs("gdr_name_struct")="gdr_name"
@@ -43561,6 +43703,7 @@ Init
Set gtmstructs("jnl_private_control_struct")="jnl_private_control"
Set gtmstructs("jnl_process_vector_struct")="jnl_process_vector"
Set gtmstructs("jnlext_multi_struct")="jnlext_multi_t"
+ Set gtmstructs("jnlpool_addrs_struct")="jnlpool_addrs"
Set gtmstructs("job_parm_struct")="job_parm"
Set gtmstructs("joberr_msg_struct")="joberr_msg"
Set gtmstructs("key_value_struct")="key_cum_value"
diff --git a/sr_x86_64/GTMDefinedTypesInitRelease.m b/sr_x86_64/GTMDefinedTypesInitRelease.m
index ed16ade..895d971 100644
--- a/sr_x86_64/GTMDefinedTypesInitRelease.m
+++ b/sr_x86_64/GTMDefinedTypesInitRelease.m
@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
-; Copyright (c) 2010-2017 Fidelity National Information ;
+; Copyright (c) 2010-2018 Fidelity National Information ;
; Services, Inc. and/or its subsidiaries. All rights reserved. ;
; ;
; This source code contains the intellectual property ;
@@ -11,14 +11,14 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
-; Generated by scantypedefs.m at 16:01:40 on 2017-08-16
-; Build done with GT.M version: GT.M V6.3-001A Linux x86_64
+; Generated by scantypedefs.m at 11:23:22 on 2018-01-13
+; Build done with GT.M version: GT.M V6.3-002 Linux x86_64
;
; Environment variables during run:
-; $gtm_dist: /usr/library/V63001A/pro
-; $gtm_exe: /usr/library/V63002/pro
-; $gtm_src: /usr/library/V63002/src
-; $gtm_inc: /usr/library/V63002/inc
+; $gtm_dist: /usr/library/V63002/pro
+; $gtm_exe: /usr/library/V63003A/pro
+; $gtm_src: /usr/library/V63003A/src
+; $gtm_inc: /usr/library/V63003A/inc
;
; Note this file should not be manually invoked
;
@@ -1008,7 +1008,7 @@ Init
Set gtmtypes("cache_que_heads",39,"name")="cache_que_heads.cache_array[0].stopped"
Set gtmtypes("cache_que_heads",39,"off")=148
Set gtmtypes("cache_que_heads",39,"len")=4
- Set gtmtypes("cache_que_heads",39,"type")="unsigned-int"
+ Set gtmtypes("cache_que_heads",39,"type")="boolean_t"
Set gtmtypfldindx("cache_que_heads","cache_array[0].stopped")=39
Set gtmtypes("cache_que_heads",40,"name")="cache_que_heads.cache_array[0].rip_latch"
Set gtmtypes("cache_que_heads",40,"off")=152
@@ -1177,7 +1177,7 @@ Init
Set gtmtypes("cache_rec",20,"name")="cache_rec.stopped"
Set gtmtypes("cache_rec",20,"off")=100
Set gtmtypes("cache_rec",20,"len")=4
- Set gtmtypes("cache_rec",20,"type")="unsigned-int"
+ Set gtmtypes("cache_rec",20,"type")="boolean_t"
Set gtmtypfldindx("cache_rec","stopped")=20
Set gtmtypes("cache_rec",21,"name")="cache_rec.rip_latch"
Set gtmtypes("cache_rec",21,"off")=104
@@ -2722,8 +2722,8 @@ Init
Set gtmtypfldindx("d_mt_struct","stream")=32
;
Set gtmtypes("d_rm_struct")="struct"
- Set gtmtypes("d_rm_struct",0)=90
- Set gtmtypes("d_rm_struct","len")=480
+ Set gtmtypes("d_rm_struct",0)=91
+ Set gtmtypes("d_rm_struct","len")=488
Set gtmtypes("d_rm_struct",1,"name")="d_rm_struct.fixed"
Set gtmtypes("d_rm_struct",1,"off")=0
Set gtmtypes("d_rm_struct",1,"len")=4
@@ -3175,6 +3175,11 @@ Init
Set gtmtypes("d_rm_struct",90,"len")=8
Set gtmtypes("d_rm_struct",90,"type")="addr"
Set gtmtypfldindx("d_rm_struct","fsblock_buffer")=90
+ Set gtmtypes("d_rm_struct",91,"name")="d_rm_struct.crlastbuff"
+ Set gtmtypes("d_rm_struct",91,"off")=480
+ Set gtmtypes("d_rm_struct",91,"len")=4
+ Set gtmtypes("d_rm_struct",91,"type")="boolean_t"
+ Set gtmtypfldindx("d_rm_struct","crlastbuff")=91
;
Set gtmtypes("d_socket_struct")="struct"
Set gtmtypes("d_socket_struct",0)=19
@@ -4806,8 +4811,8 @@ Init
Set gtmtypes("gcall_args",6,"dim")=32
;
Set gtmtypes("gd_addr")="struct"
- Set gtmtypes("gd_addr",0)=20
- Set gtmtypes("gd_addr","len")=112
+ Set gtmtypes("gd_addr",0)=21
+ Set gtmtypes("gd_addr","len")=120
Set gtmtypes("gd_addr",1,"name")="gd_addr.local_locks"
Set gtmtypes("gd_addr",1,"off")=0
Set gtmtypes("gd_addr",1,"len")=8
@@ -4863,51 +4868,56 @@ Init
Set gtmtypes("gd_addr",11,"len")=8
Set gtmtypes("gd_addr",11,"type")="addr"
Set gtmtypfldindx("gd_addr","gblnames")=11
- Set gtmtypes("gd_addr",12,"name")="gd_addr.link"
+ Set gtmtypes("gd_addr",12,"name")="gd_addr.instinfo"
Set gtmtypes("gd_addr",12,"off")=64
Set gtmtypes("gd_addr",12,"len")=8
Set gtmtypes("gd_addr",12,"type")="addr"
- Set gtmtypfldindx("gd_addr","link")=12
- Set gtmtypes("gd_addr",13,"name")="gd_addr.tab_ptr"
+ Set gtmtypfldindx("gd_addr","instinfo")=12
+ Set gtmtypes("gd_addr",13,"name")="gd_addr.link"
Set gtmtypes("gd_addr",13,"off")=72
Set gtmtypes("gd_addr",13,"len")=8
Set gtmtypes("gd_addr",13,"type")="addr"
- Set gtmtypfldindx("gd_addr","tab_ptr")=13
- Set gtmtypes("gd_addr",14,"name")="gd_addr.id"
+ Set gtmtypfldindx("gd_addr","link")=13
+ Set gtmtypes("gd_addr",14,"name")="gd_addr.tab_ptr"
Set gtmtypes("gd_addr",14,"off")=80
Set gtmtypes("gd_addr",14,"len")=8
Set gtmtypes("gd_addr",14,"type")="addr"
- Set gtmtypfldindx("gd_addr","id")=14
- Set gtmtypes("gd_addr",15,"name")="gd_addr.end"
+ Set gtmtypfldindx("gd_addr","tab_ptr")=14
+ Set gtmtypes("gd_addr",15,"name")="gd_addr.id"
Set gtmtypes("gd_addr",15,"off")=88
Set gtmtypes("gd_addr",15,"len")=8
- Set gtmtypes("gd_addr",15,"type")="uintptr_t"
- Set gtmtypfldindx("gd_addr","end")=15
- Set gtmtypes("gd_addr",16,"name")="gd_addr.has_span_gbls"
+ Set gtmtypes("gd_addr",15,"type")="addr"
+ Set gtmtypfldindx("gd_addr","id")=15
+ Set gtmtypes("gd_addr",16,"name")="gd_addr.end"
Set gtmtypes("gd_addr",16,"off")=96
- Set gtmtypes("gd_addr",16,"len")=4
- Set gtmtypes("gd_addr",16,"type")="unsigned-int"
- Set gtmtypfldindx("gd_addr","has_span_gbls")=16
- Set gtmtypes("gd_addr",17,"name")="gd_addr.ygs_map_entry_changed"
- Set gtmtypes("gd_addr",17,"off")=100
- Set gtmtypes("gd_addr",17,"len")=1
- Set gtmtypes("gd_addr",17,"type")="char"
- Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=17
- Set gtmtypes("gd_addr",18,"name")="gd_addr.is_dummy_gbldir"
- Set gtmtypes("gd_addr",18,"off")=101
+ Set gtmtypes("gd_addr",16,"len")=8
+ Set gtmtypes("gd_addr",16,"type")="uintptr_t"
+ Set gtmtypfldindx("gd_addr","end")=16
+ Set gtmtypes("gd_addr",17,"name")="gd_addr.has_span_gbls"
+ Set gtmtypes("gd_addr",17,"off")=104
+ Set gtmtypes("gd_addr",17,"len")=4
+ Set gtmtypes("gd_addr",17,"type")="unsigned-int"
+ Set gtmtypfldindx("gd_addr","has_span_gbls")=17
+ Set gtmtypes("gd_addr",18,"name")="gd_addr.ygs_map_entry_changed"
+ Set gtmtypes("gd_addr",18,"off")=108
Set gtmtypes("gd_addr",18,"len")=1
Set gtmtypes("gd_addr",18,"type")="char"
- Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=18
- Set gtmtypes("gd_addr",19,"name")="gd_addr.filler"
- Set gtmtypes("gd_addr",19,"off")=102
- Set gtmtypes("gd_addr",19,"len")=2
+ Set gtmtypfldindx("gd_addr","ygs_map_entry_changed")=18
+ Set gtmtypes("gd_addr",19,"name")="gd_addr.is_dummy_gbldir"
+ Set gtmtypes("gd_addr",19,"off")=109
+ Set gtmtypes("gd_addr",19,"len")=1
Set gtmtypes("gd_addr",19,"type")="char"
- Set gtmtypfldindx("gd_addr","filler")=19
- Set gtmtypes("gd_addr",20,"name")="gd_addr.thread_gdi"
- Set gtmtypes("gd_addr",20,"off")=104
- Set gtmtypes("gd_addr",20,"len")=8
- Set gtmtypes("gd_addr",20,"type")="addr"
- Set gtmtypfldindx("gd_addr","thread_gdi")=20
+ Set gtmtypfldindx("gd_addr","is_dummy_gbldir")=19
+ Set gtmtypes("gd_addr",20,"name")="gd_addr.filler"
+ Set gtmtypes("gd_addr",20,"off")=110
+ Set gtmtypes("gd_addr",20,"len")=2
+ Set gtmtypes("gd_addr",20,"type")="char"
+ Set gtmtypfldindx("gd_addr","filler")=20
+ Set gtmtypes("gd_addr",21,"name")="gd_addr.thread_gdi"
+ Set gtmtypes("gd_addr",21,"off")=112
+ Set gtmtypes("gd_addr",21,"len")=8
+ Set gtmtypes("gd_addr",21,"type")="addr"
+ Set gtmtypfldindx("gd_addr","thread_gdi")=21
;
Set gtmtypes("gd_binding")="struct"
Set gtmtypes("gd_binding",0)=8
@@ -4972,6 +4982,15 @@ Init
Set gtmtypes("gd_gblname",3,"type")="unsigned-int"
Set gtmtypfldindx("gd_gblname","ver")=3
;
+ Set gtmtypes("gd_inst_info")="struct"
+ Set gtmtypes("gd_inst_info",0)=1
+ Set gtmtypes("gd_inst_info","len")=256
+ Set gtmtypes("gd_inst_info",1,"name")="gd_inst_info.instfilename"
+ Set gtmtypes("gd_inst_info",1,"off")=0
+ Set gtmtypes("gd_inst_info",1,"len")=256
+ Set gtmtypes("gd_inst_info",1,"type")="char"
+ Set gtmtypfldindx("gd_inst_info","instfilename")=1
+ ;
Set gtmtypes("gd_region")="struct"
Set gtmtypes("gd_region",0)=44
Set gtmtypes("gd_region","len")=424
@@ -5211,7 +5230,7 @@ Init
Set gtmtypfldindx("gd_seg_addr","addr")=2
;
Set gtmtypes("gd_segment")="struct"
- Set gtmtypes("gd_segment",0)=24
+ Set gtmtypes("gd_segment",0)=25
Set gtmtypes("gd_segment","len")=384
Set gtmtypes("gd_segment",1,"name")="gd_segment.sname_len"
Set gtmtypes("gd_segment",1,"off")=0
@@ -5328,11 +5347,16 @@ Init
Set gtmtypes("gd_segment",23,"len")=4
Set gtmtypes("gd_segment",23,"type")="boolean_t"
Set gtmtypfldindx("gd_segment","asyncio")=23
- Set gtmtypes("gd_segment",24,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",24,"name")="gd_segment.read_only"
Set gtmtypes("gd_segment",24,"off")=368
- Set gtmtypes("gd_segment",24,"len")=16
- Set gtmtypes("gd_segment",24,"type")="char"
- Set gtmtypfldindx("gd_segment","filler")=24
+ Set gtmtypes("gd_segment",24,"len")=4
+ Set gtmtypes("gd_segment",24,"type")="boolean_t"
+ Set gtmtypfldindx("gd_segment","read_only")=24
+ Set gtmtypes("gd_segment",25,"name")="gd_segment.filler"
+ Set gtmtypes("gd_segment",25,"off")=372
+ Set gtmtypes("gd_segment",25,"len")=12
+ Set gtmtypes("gd_segment",25,"type")="char"
+ Set gtmtypfldindx("gd_segment","filler")=25
;
Set gtmtypes("gdr_name")="struct"
Set gtmtypes("gdr_name",0)=10
@@ -9389,8 +9413,8 @@ Init
Set gtmtypes("integ_error_blk_list",3,"dim")=10
;
Set gtmtypes("io_desc")="struct"
- Set gtmtypes("io_desc",0)=30
- Set gtmtypes("io_desc","len")=296
+ Set gtmtypes("io_desc",0)=32
+ Set gtmtypes("io_desc","len")=320
Set gtmtypes("io_desc",1,"name")="io_desc.pair"
Set gtmtypes("io_desc",1,"off")=0
Set gtmtypes("io_desc",1,"len")=16
@@ -9467,80 +9491,90 @@ Init
Set gtmtypes("io_desc",15,"type")="int"
Set gtmtypfldindx("io_desc","state")=15
Set gtmtypes("io_desc",16,"name")="io_desc.dollar"
- Set gtmtypes("io_desc",16,"off")=68
- Set gtmtypes("io_desc",16,"len")=188
+ Set gtmtypes("io_desc",16,"off")=72
+ Set gtmtypes("io_desc",16,"len")=208
Set gtmtypes("io_desc",16,"type")="struct"
Set gtmtypfldindx("io_desc","dollar")=16
Set gtmtypes("io_desc",17,"name")="io_desc.dollar.x"
- Set gtmtypes("io_desc",17,"off")=68
+ Set gtmtypes("io_desc",17,"off")=72
Set gtmtypes("io_desc",17,"len")=4
Set gtmtypes("io_desc",17,"type")="unsigned-int"
Set gtmtypfldindx("io_desc","dollar.x")=17
Set gtmtypes("io_desc",18,"name")="io_desc.dollar.y"
- Set gtmtypes("io_desc",18,"off")=72
+ Set gtmtypes("io_desc",18,"off")=76
Set gtmtypes("io_desc",18,"len")=4
Set gtmtypes("io_desc",18,"type")="unsigned-int"
Set gtmtypfldindx("io_desc","dollar.y")=18
Set gtmtypes("io_desc",19,"name")="io_desc.dollar.zeof"
- Set gtmtypes("io_desc",19,"off")=76
+ Set gtmtypes("io_desc",19,"off")=80
Set gtmtypes("io_desc",19,"len")=2
Set gtmtypes("io_desc",19,"type")="unsigned-short"
Set gtmtypfldindx("io_desc","dollar.zeof")=19
Set gtmtypes("io_desc",20,"name")="io_desc.dollar.za"
- Set gtmtypes("io_desc",20,"off")=78
+ Set gtmtypes("io_desc",20,"off")=82
Set gtmtypes("io_desc",20,"len")=2
Set gtmtypes("io_desc",20,"type")="unsigned-short"
Set gtmtypfldindx("io_desc","dollar.za")=20
Set gtmtypes("io_desc",21,"name")="io_desc.dollar.zb"
- Set gtmtypes("io_desc",21,"off")=80
+ Set gtmtypes("io_desc",21,"off")=84
Set gtmtypes("io_desc",21,"len")=16
Set gtmtypes("io_desc",21,"type")="unsigned-char"
Set gtmtypfldindx("io_desc","dollar.zb")=21
Set gtmtypes("io_desc",22,"name")="io_desc.dollar.key"
- Set gtmtypes("io_desc",22,"off")=96
+ Set gtmtypes("io_desc",22,"off")=100
Set gtmtypes("io_desc",22,"len")=80
Set gtmtypes("io_desc",22,"type")="char"
Set gtmtypfldindx("io_desc","dollar.key")=22
Set gtmtypes("io_desc",23,"name")="io_desc.dollar.device"
- Set gtmtypes("io_desc",23,"off")=176
+ Set gtmtypes("io_desc",23,"off")=180
Set gtmtypes("io_desc",23,"len")=80
Set gtmtypes("io_desc",23,"type")="char"
Set gtmtypfldindx("io_desc","dollar.device")=23
- Set gtmtypes("io_desc",24,"name")="io_desc.esc_state"
- Set gtmtypes("io_desc",24,"off")=256
- Set gtmtypes("io_desc",24,"len")=1
- Set gtmtypes("io_desc",24,"type")="unsigned-char"
- Set gtmtypfldindx("io_desc","esc_state")=24
- Set gtmtypes("io_desc",25,"name")="io_desc.dev_sp"
- Set gtmtypes("io_desc",25,"off")=264
- Set gtmtypes("io_desc",25,"len")=8
- Set gtmtypes("io_desc",25,"type")="addr"
- Set gtmtypfldindx("io_desc","dev_sp")=25
- Set gtmtypes("io_desc",26,"name")="io_desc.disp_ptr"
- Set gtmtypes("io_desc",26,"off")=272
- Set gtmtypes("io_desc",26,"len")=8
- Set gtmtypes("io_desc",26,"type")="addr"
- Set gtmtypfldindx("io_desc","disp_ptr")=26
- Set gtmtypes("io_desc",27,"name")="io_desc.newly_created"
- Set gtmtypes("io_desc",27,"off")=280
- Set gtmtypes("io_desc",27,"len")=4
- Set gtmtypes("io_desc",27,"type")="boolean_t"
- Set gtmtypfldindx("io_desc","newly_created")=27
- Set gtmtypes("io_desc",28,"name")="io_desc.ichset"
- Set gtmtypes("io_desc",28,"off")=284
- Set gtmtypes("io_desc",28,"len")=4
- Set gtmtypes("io_desc",28,"type")="int"
- Set gtmtypfldindx("io_desc","ichset")=28
- Set gtmtypes("io_desc",29,"name")="io_desc.ochset"
- Set gtmtypes("io_desc",29,"off")=288
+ Set gtmtypes("io_desc",24,"name")="io_desc.dollar.devicebuffer"
+ Set gtmtypes("io_desc",24,"off")=264
+ Set gtmtypes("io_desc",24,"len")=8
+ Set gtmtypes("io_desc",24,"type")="addr"
+ Set gtmtypfldindx("io_desc","dollar.devicebuffer")=24
+ Set gtmtypes("io_desc",25,"name")="io_desc.dollar.devicebufferlen"
+ Set gtmtypes("io_desc",25,"off")=272
+ Set gtmtypes("io_desc",25,"len")=4
+ Set gtmtypes("io_desc",25,"type")="int"
+ Set gtmtypfldindx("io_desc","dollar.devicebufferlen")=25
+ Set gtmtypes("io_desc",26,"name")="io_desc.esc_state"
+ Set gtmtypes("io_desc",26,"off")=280
+ Set gtmtypes("io_desc",26,"len")=1
+ Set gtmtypes("io_desc",26,"type")="unsigned-char"
+ Set gtmtypfldindx("io_desc","esc_state")=26
+ Set gtmtypes("io_desc",27,"name")="io_desc.dev_sp"
+ Set gtmtypes("io_desc",27,"off")=288
+ Set gtmtypes("io_desc",27,"len")=8
+ Set gtmtypes("io_desc",27,"type")="addr"
+ Set gtmtypfldindx("io_desc","dev_sp")=27
+ Set gtmtypes("io_desc",28,"name")="io_desc.disp_ptr"
+ Set gtmtypes("io_desc",28,"off")=296
+ Set gtmtypes("io_desc",28,"len")=8
+ Set gtmtypes("io_desc",28,"type")="addr"
+ Set gtmtypfldindx("io_desc","disp_ptr")=28
+ Set gtmtypes("io_desc",29,"name")="io_desc.newly_created"
+ Set gtmtypes("io_desc",29,"off")=304
Set gtmtypes("io_desc",29,"len")=4
- Set gtmtypes("io_desc",29,"type")="int"
- Set gtmtypfldindx("io_desc","ochset")=29
- Set gtmtypes("io_desc",30,"name")="io_desc.write_filter"
- Set gtmtypes("io_desc",30,"off")=292
+ Set gtmtypes("io_desc",29,"type")="boolean_t"
+ Set gtmtypfldindx("io_desc","newly_created")=29
+ Set gtmtypes("io_desc",30,"name")="io_desc.ichset"
+ Set gtmtypes("io_desc",30,"off")=308
Set gtmtypes("io_desc",30,"len")=4
Set gtmtypes("io_desc",30,"type")="int"
- Set gtmtypfldindx("io_desc","write_filter")=30
+ Set gtmtypfldindx("io_desc","ichset")=30
+ Set gtmtypes("io_desc",31,"name")="io_desc.ochset"
+ Set gtmtypes("io_desc",31,"off")=312
+ Set gtmtypes("io_desc",31,"len")=4
+ Set gtmtypes("io_desc",31,"type")="int"
+ Set gtmtypfldindx("io_desc","ochset")=31
+ Set gtmtypes("io_desc",32,"name")="io_desc.write_filter"
+ Set gtmtypes("io_desc",32,"off")=316
+ Set gtmtypes("io_desc",32,"len")=4
+ Set gtmtypes("io_desc",32,"type")="int"
+ Set gtmtypfldindx("io_desc","write_filter")=32
;
Set gtmtypes("io_log_name")="struct"
Set gtmtypes("io_log_name",0)=4
@@ -11925,8 +11959,8 @@ Init
Set gtmtypfldindx("jnlext_multi_t","size")=7
;
Set gtmtypes("jnlpool_addrs")="struct"
- Set gtmtypes("jnlpool_addrs",0)=16
- Set gtmtypes("jnlpool_addrs","len")=96
+ Set gtmtypes("jnlpool_addrs",0)=22
+ Set gtmtypes("jnlpool_addrs","len")=136
Set gtmtypes("jnlpool_addrs",1,"name")="jnlpool_addrs.jnlpool_ctl"
Set gtmtypes("jnlpool_addrs",1,"off")=0
Set gtmtypes("jnlpool_addrs",1,"len")=8
@@ -12007,6 +12041,36 @@ Init
Set gtmtypes("jnlpool_addrs",16,"len")=4
Set gtmtypes("jnlpool_addrs",16,"type")="char"
Set gtmtypfldindx("jnlpool_addrs","jrs.filler_8byte_align")=16
+ Set gtmtypes("jnlpool_addrs",17,"name")="jnlpool_addrs.pool_init"
+ Set gtmtypes("jnlpool_addrs",17,"off")=96
+ Set gtmtypes("jnlpool_addrs",17,"len")=4
+ Set gtmtypes("jnlpool_addrs",17,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","pool_init")=17
+ Set gtmtypes("jnlpool_addrs",18,"name")="jnlpool_addrs.recv_pool"
+ Set gtmtypes("jnlpool_addrs",18,"off")=100
+ Set gtmtypes("jnlpool_addrs",18,"len")=4
+ Set gtmtypes("jnlpool_addrs",18,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","recv_pool")=18
+ Set gtmtypes("jnlpool_addrs",19,"name")="jnlpool_addrs.relaxed"
+ Set gtmtypes("jnlpool_addrs",19,"off")=104
+ Set gtmtypes("jnlpool_addrs",19,"len")=4
+ Set gtmtypes("jnlpool_addrs",19,"type")="boolean_t"
+ Set gtmtypfldindx("jnlpool_addrs","relaxed")=19
+ Set gtmtypes("jnlpool_addrs",20,"name")="jnlpool_addrs.next"
+ Set gtmtypes("jnlpool_addrs",20,"off")=112
+ Set gtmtypes("jnlpool_addrs",20,"len")=8
+ Set gtmtypes("jnlpool_addrs",20,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","next")=20
+ Set gtmtypes("jnlpool_addrs",21,"name")="jnlpool_addrs.gd_instinfo"
+ Set gtmtypes("jnlpool_addrs",21,"off")=120
+ Set gtmtypes("jnlpool_addrs",21,"len")=8
+ Set gtmtypes("jnlpool_addrs",21,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_instinfo")=21
+ Set gtmtypes("jnlpool_addrs",22,"name")="jnlpool_addrs.gd_ptr"
+ Set gtmtypes("jnlpool_addrs",22,"off")=128
+ Set gtmtypes("jnlpool_addrs",22,"len")=8
+ Set gtmtypes("jnlpool_addrs",22,"type")="addr"
+ Set gtmtypfldindx("jnlpool_addrs","gd_ptr")=22
;
Set gtmtypes("jnlpool_ctl_struct")="struct"
Set gtmtypes("jnlpool_ctl_struct",0)=72
@@ -14337,8 +14401,8 @@ Init
Set gtmtypfldindx("mliteral","v.str")=11
;
Set gtmtypes("mlk_ctldata")="struct"
- Set gtmtypes("mlk_ctldata",0)=12
- Set gtmtypes("mlk_ctldata","len")=328
+ Set gtmtypes("mlk_ctldata",0)=13
+ Set gtmtypes("mlk_ctldata","len")=80
Set gtmtypes("mlk_ctldata",1,"name")="mlk_ctldata.prcfree"
Set gtmtypes("mlk_ctldata",1,"off")=0
Set gtmtypes("mlk_ctldata",1,"len")=8
@@ -14349,57 +14413,61 @@ Init
Set gtmtypes("mlk_ctldata",2,"len")=8
Set gtmtypes("mlk_ctldata",2,"type")="intptr_t"
Set gtmtypfldindx("mlk_ctldata","blkfree")=2
- Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkroot"
+ Set gtmtypes("mlk_ctldata",3,"name")="mlk_ctldata.blkhash"
Set gtmtypes("mlk_ctldata",3,"off")=16
Set gtmtypes("mlk_ctldata",3,"len")=8
Set gtmtypes("mlk_ctldata",3,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","blkroot")=3
- Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.subbase"
+ Set gtmtypfldindx("mlk_ctldata","blkhash")=3
+ Set gtmtypes("mlk_ctldata",4,"name")="mlk_ctldata.blkroot"
Set gtmtypes("mlk_ctldata",4,"off")=24
Set gtmtypes("mlk_ctldata",4,"len")=8
Set gtmtypes("mlk_ctldata",4,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subbase")=4
- Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subfree"
+ Set gtmtypfldindx("mlk_ctldata","blkroot")=4
+ Set gtmtypes("mlk_ctldata",5,"name")="mlk_ctldata.subbase"
Set gtmtypes("mlk_ctldata",5,"off")=32
Set gtmtypes("mlk_ctldata",5,"len")=8
Set gtmtypes("mlk_ctldata",5,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subfree")=5
- Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subtop"
+ Set gtmtypfldindx("mlk_ctldata","subbase")=5
+ Set gtmtypes("mlk_ctldata",6,"name")="mlk_ctldata.subfree"
Set gtmtypes("mlk_ctldata",6,"off")=40
Set gtmtypes("mlk_ctldata",6,"len")=8
Set gtmtypes("mlk_ctldata",6,"type")="intptr_t"
- Set gtmtypfldindx("mlk_ctldata","subtop")=6
- Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.max_prccnt"
+ Set gtmtypfldindx("mlk_ctldata","subfree")=6
+ Set gtmtypes("mlk_ctldata",7,"name")="mlk_ctldata.subtop"
Set gtmtypes("mlk_ctldata",7,"off")=48
- Set gtmtypes("mlk_ctldata",7,"len")=4
- Set gtmtypes("mlk_ctldata",7,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_prccnt")=7
- Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_blkcnt"
- Set gtmtypes("mlk_ctldata",8,"off")=52
+ Set gtmtypes("mlk_ctldata",7,"len")=8
+ Set gtmtypes("mlk_ctldata",7,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_ctldata","subtop")=7
+ Set gtmtypes("mlk_ctldata",8,"name")="mlk_ctldata.max_prccnt"
+ Set gtmtypes("mlk_ctldata",8,"off")=56
Set gtmtypes("mlk_ctldata",8,"len")=4
Set gtmtypes("mlk_ctldata",8,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=8
- Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.prccnt"
- Set gtmtypes("mlk_ctldata",9,"off")=56
+ Set gtmtypfldindx("mlk_ctldata","max_prccnt")=8
+ Set gtmtypes("mlk_ctldata",9,"name")="mlk_ctldata.max_blkcnt"
+ Set gtmtypes("mlk_ctldata",9,"off")=60
Set gtmtypes("mlk_ctldata",9,"len")=4
- Set gtmtypes("mlk_ctldata",9,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","prccnt")=9
- Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.blkcnt"
- Set gtmtypes("mlk_ctldata",10,"off")=60
+ Set gtmtypes("mlk_ctldata",9,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","max_blkcnt")=9
+ Set gtmtypes("mlk_ctldata",10,"name")="mlk_ctldata.num_blkhash"
+ Set gtmtypes("mlk_ctldata",10,"off")=64
Set gtmtypes("mlk_ctldata",10,"len")=4
- Set gtmtypes("mlk_ctldata",10,"type")="int"
- Set gtmtypfldindx("mlk_ctldata","blkcnt")=10
- Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.clus_pids"
- Set gtmtypes("mlk_ctldata",11,"off")=64
- Set gtmtypes("mlk_ctldata",11,"len")=256
- Set gtmtypes("mlk_ctldata",11,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","clus_pids")=11
- Set gtmtypes("mlk_ctldata",11,"dim")=64
- Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.wakeups"
- Set gtmtypes("mlk_ctldata",12,"off")=320
+ Set gtmtypes("mlk_ctldata",10,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","num_blkhash")=10
+ Set gtmtypes("mlk_ctldata",11,"name")="mlk_ctldata.prccnt"
+ Set gtmtypes("mlk_ctldata",11,"off")=68
+ Set gtmtypes("mlk_ctldata",11,"len")=4
+ Set gtmtypes("mlk_ctldata",11,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","prccnt")=11
+ Set gtmtypes("mlk_ctldata",12,"name")="mlk_ctldata.blkcnt"
+ Set gtmtypes("mlk_ctldata",12,"off")=72
Set gtmtypes("mlk_ctldata",12,"len")=4
- Set gtmtypes("mlk_ctldata",12,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_ctldata","wakeups")=12
+ Set gtmtypes("mlk_ctldata",12,"type")="int"
+ Set gtmtypfldindx("mlk_ctldata","blkcnt")=12
+ Set gtmtypes("mlk_ctldata",13,"name")="mlk_ctldata.wakeups"
+ Set gtmtypes("mlk_ctldata",13,"off")=76
+ Set gtmtypes("mlk_ctldata",13,"len")=4
+ Set gtmtypes("mlk_ctldata",13,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_ctldata","wakeups")=13
;
Set gtmtypes("mlk_prcblk")="struct"
Set gtmtypes("mlk_prcblk",0)=4
@@ -14426,7 +14494,7 @@ Init
Set gtmtypfldindx("mlk_prcblk","filler_4byte")=4
;
Set gtmtypes("mlk_pvtblk")="struct"
- Set gtmtypes("mlk_pvtblk",0)=16
+ Set gtmtypes("mlk_pvtblk",0)=15
Set gtmtypes("mlk_pvtblk","len")=80
Set gtmtypes("mlk_pvtblk",1,"name")="mlk_pvtblk.ctlptr"
Set gtmtypes("mlk_pvtblk",1,"off")=0
@@ -14468,46 +14536,41 @@ Init
Set gtmtypes("mlk_pvtblk",8,"len")=8
Set gtmtypes("mlk_pvtblk",8,"type")="addr"
Set gtmtypfldindx("mlk_pvtblk","tp")=8
- Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.total_length"
+ Set gtmtypes("mlk_pvtblk",9,"name")="mlk_pvtblk.nref_length"
Set gtmtypes("mlk_pvtblk",9,"off")=56
Set gtmtypes("mlk_pvtblk",9,"len")=4
Set gtmtypes("mlk_pvtblk",9,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_length")=9
- Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.total_len_padded"
+ Set gtmtypfldindx("mlk_pvtblk","nref_length")=9
+ Set gtmtypes("mlk_pvtblk",10,"name")="mlk_pvtblk.subscript_cnt"
Set gtmtypes("mlk_pvtblk",10,"off")=60
- Set gtmtypes("mlk_pvtblk",10,"len")=4
- Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-int"
- Set gtmtypfldindx("mlk_pvtblk","total_len_padded")=10
- Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.subscript_cnt"
+ Set gtmtypes("mlk_pvtblk",10,"len")=2
+ Set gtmtypes("mlk_pvtblk",10,"type")="unsigned-short"
+ Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=10
+ Set gtmtypes("mlk_pvtblk",11,"name")="mlk_pvtblk.trans"
Set gtmtypes("mlk_pvtblk",11,"off")=64
- Set gtmtypes("mlk_pvtblk",11,"len")=2
- Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-short"
- Set gtmtypfldindx("mlk_pvtblk","subscript_cnt")=11
- Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.trans"
- Set gtmtypes("mlk_pvtblk",12,"off")=68
+ Set gtmtypes("mlk_pvtblk",11,"len")=1
+ Set gtmtypes("mlk_pvtblk",11,"type")="unsigned-char"
+ Set gtmtypfldindx("mlk_pvtblk","trans")=11
+ Set gtmtypes("mlk_pvtblk",12,"name")="mlk_pvtblk.translev"
+ Set gtmtypes("mlk_pvtblk",12,"off")=65
Set gtmtypes("mlk_pvtblk",12,"len")=1
Set gtmtypes("mlk_pvtblk",12,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","trans")=12
- Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.translev"
- Set gtmtypes("mlk_pvtblk",13,"off")=69
+ Set gtmtypfldindx("mlk_pvtblk","translev")=12
+ Set gtmtypes("mlk_pvtblk",13,"name")="mlk_pvtblk.old"
+ Set gtmtypes("mlk_pvtblk",13,"off")=66
Set gtmtypes("mlk_pvtblk",13,"len")=1
Set gtmtypes("mlk_pvtblk",13,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","translev")=13
- Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.old"
- Set gtmtypes("mlk_pvtblk",14,"off")=70
- Set gtmtypes("mlk_pvtblk",14,"len")=1
+ Set gtmtypfldindx("mlk_pvtblk","old")=13
+ Set gtmtypes("mlk_pvtblk",14,"name")="mlk_pvtblk.filler"
+ Set gtmtypes("mlk_pvtblk",14,"off")=67
+ Set gtmtypes("mlk_pvtblk",14,"len")=5
Set gtmtypes("mlk_pvtblk",14,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","old")=14
- Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.filler"
- Set gtmtypes("mlk_pvtblk",15,"off")=71
+ Set gtmtypfldindx("mlk_pvtblk","filler")=14
+ Set gtmtypes("mlk_pvtblk",15,"name")="mlk_pvtblk.value"
+ Set gtmtypes("mlk_pvtblk",15,"off")=72
Set gtmtypes("mlk_pvtblk",15,"len")=1
Set gtmtypes("mlk_pvtblk",15,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","filler")=15
- Set gtmtypes("mlk_pvtblk",16,"name")="mlk_pvtblk.value"
- Set gtmtypes("mlk_pvtblk",16,"off")=72
- Set gtmtypes("mlk_pvtblk",16,"len")=1
- Set gtmtypes("mlk_pvtblk",16,"type")="unsigned-char"
- Set gtmtypfldindx("mlk_pvtblk","value")=16
+ Set gtmtypfldindx("mlk_pvtblk","value")=15
;
Set gtmtypes("mlk_shrblk")="struct"
Set gtmtypes("mlk_shrblk",0)=11
@@ -14568,6 +14631,25 @@ Init
Set gtmtypes("mlk_shrblk",11,"type")="unsigned-char"
Set gtmtypfldindx("mlk_shrblk","auxnode")=11
;
+ Set gtmtypes("mlk_shrhash")="struct"
+ Set gtmtypes("mlk_shrhash",0)=3
+ Set gtmtypes("mlk_shrhash","len")=16
+ Set gtmtypes("mlk_shrhash",1,"name")="mlk_shrhash.shrblk"
+ Set gtmtypes("mlk_shrhash",1,"off")=0
+ Set gtmtypes("mlk_shrhash",1,"len")=8
+ Set gtmtypes("mlk_shrhash",1,"type")="intptr_t"
+ Set gtmtypfldindx("mlk_shrhash","shrblk")=1
+ Set gtmtypes("mlk_shrhash",2,"name")="mlk_shrhash.hash"
+ Set gtmtypes("mlk_shrhash",2,"off")=8
+ Set gtmtypes("mlk_shrhash",2,"len")=4
+ Set gtmtypes("mlk_shrhash",2,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","hash")=2
+ Set gtmtypes("mlk_shrhash",3,"name")="mlk_shrhash.usedmap"
+ Set gtmtypes("mlk_shrhash",3,"off")=12
+ Set gtmtypes("mlk_shrhash",3,"len")=4
+ Set gtmtypes("mlk_shrhash",3,"type")="unsigned-int"
+ Set gtmtypfldindx("mlk_shrhash","usedmap")=3
+ ;
Set gtmtypes("mlk_shrsub")="struct"
Set gtmtypes("mlk_shrsub",0)=3
Set gtmtypes("mlk_shrsub","len")=16
@@ -17814,8 +17896,8 @@ Init
Set gtmtypfldindx("nametabent","name")=2
;
Set gtmtypes("node_local")="struct"
- Set gtmtypes("node_local",0)=248
- Set gtmtypes("node_local","len")=121536
+ Set gtmtypes("node_local",0)=247
+ Set gtmtypes("node_local","len")=113352
Set gtmtypes("node_local",1,"name")="node_local.label"
Set gtmtypes("node_local",1,"off")=0
Set gtmtypes("node_local",1,"len")=12
@@ -18403,670 +18485,664 @@ Init
Set gtmtypes("node_local",116,"len")=256
Set gtmtypes("node_local",116,"type")="char"
Set gtmtypfldindx("node_local","statsdb_fname")=116
- Set gtmtypes("node_local",117,"name")="node_local.secshr_ops_index"
+ Set gtmtypes("node_local",117,"name")="node_local.gvstats_rec"
Set gtmtypes("node_local",117,"off")=104392
- Set gtmtypes("node_local",117,"len")=4
- Set gtmtypes("node_local",117,"type")="int"
- Set gtmtypfldindx("node_local","secshr_ops_index")=117
- Set gtmtypes("node_local",118,"name")="node_local.secshr_ops_array"
- Set gtmtypes("node_local",118,"off")=104400
- Set gtmtypes("node_local",118,"len")=8184
+ Set gtmtypes("node_local",117,"len")=472
+ Set gtmtypes("node_local",117,"type")="gvstats_rec_t"
+ Set gtmtypfldindx("node_local","gvstats_rec")=117
+ Set gtmtypes("node_local",118,"name")="node_local.gvstats_rec.n_set"
+ Set gtmtypes("node_local",118,"off")=104392
+ Set gtmtypes("node_local",118,"len")=8
Set gtmtypes("node_local",118,"type")="uint64_t"
- Set gtmtypfldindx("node_local","secshr_ops_array")=118
- Set gtmtypes("node_local",118,"dim")=1023
- Set gtmtypes("node_local",119,"name")="node_local.gvstats_rec"
- Set gtmtypes("node_local",119,"off")=112584
- Set gtmtypes("node_local",119,"len")=472
- Set gtmtypes("node_local",119,"type")="gvstats_rec_t"
- Set gtmtypfldindx("node_local","gvstats_rec")=119
- Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec.n_set"
- Set gtmtypes("node_local",120,"off")=112584
+ Set gtmtypfldindx("node_local","gvstats_rec.n_set")=118
+ Set gtmtypes("node_local",119,"name")="node_local.gvstats_rec.n_kill"
+ Set gtmtypes("node_local",119,"off")=104400
+ Set gtmtypes("node_local",119,"len")=8
+ Set gtmtypes("node_local",119,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=119
+ Set gtmtypes("node_local",120,"name")="node_local.gvstats_rec.n_get"
+ Set gtmtypes("node_local",120,"off")=104408
Set gtmtypes("node_local",120,"len")=8
Set gtmtypes("node_local",120,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_set")=120
- Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_kill"
- Set gtmtypes("node_local",121,"off")=112592
+ Set gtmtypfldindx("node_local","gvstats_rec.n_get")=120
+ Set gtmtypes("node_local",121,"name")="node_local.gvstats_rec.n_data"
+ Set gtmtypes("node_local",121,"off")=104416
Set gtmtypes("node_local",121,"len")=8
Set gtmtypes("node_local",121,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_kill")=121
- Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_get"
- Set gtmtypes("node_local",122,"off")=112600
+ Set gtmtypfldindx("node_local","gvstats_rec.n_data")=121
+ Set gtmtypes("node_local",122,"name")="node_local.gvstats_rec.n_order"
+ Set gtmtypes("node_local",122,"off")=104424
Set gtmtypes("node_local",122,"len")=8
Set gtmtypes("node_local",122,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_get")=122
- Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_data"
- Set gtmtypes("node_local",123,"off")=112608
+ Set gtmtypfldindx("node_local","gvstats_rec.n_order")=122
+ Set gtmtypes("node_local",123,"name")="node_local.gvstats_rec.n_zprev"
+ Set gtmtypes("node_local",123,"off")=104432
Set gtmtypes("node_local",123,"len")=8
Set gtmtypes("node_local",123,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_data")=123
- Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_order"
- Set gtmtypes("node_local",124,"off")=112616
+ Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=123
+ Set gtmtypes("node_local",124,"name")="node_local.gvstats_rec.n_query"
+ Set gtmtypes("node_local",124,"off")=104440
Set gtmtypes("node_local",124,"len")=8
Set gtmtypes("node_local",124,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_order")=124
- Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_zprev"
- Set gtmtypes("node_local",125,"off")=112624
+ Set gtmtypfldindx("node_local","gvstats_rec.n_query")=124
+ Set gtmtypes("node_local",125,"name")="node_local.gvstats_rec.n_lock_success"
+ Set gtmtypes("node_local",125,"off")=104448
Set gtmtypes("node_local",125,"len")=8
Set gtmtypes("node_local",125,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_zprev")=125
- Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_query"
- Set gtmtypes("node_local",126,"off")=112632
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=125
+ Set gtmtypes("node_local",126,"name")="node_local.gvstats_rec.n_lock_fail"
+ Set gtmtypes("node_local",126,"off")=104456
Set gtmtypes("node_local",126,"len")=8
Set gtmtypes("node_local",126,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_query")=126
- Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.n_lock_success"
- Set gtmtypes("node_local",127,"off")=112640
+ Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=126
+ Set gtmtypes("node_local",127,"name")="node_local.gvstats_rec.db_curr_tn"
+ Set gtmtypes("node_local",127,"off")=104464
Set gtmtypes("node_local",127,"len")=8
Set gtmtypes("node_local",127,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_success")=127
- Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_lock_fail"
- Set gtmtypes("node_local",128,"off")=112648
+ Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=127
+ Set gtmtypes("node_local",128,"name")="node_local.gvstats_rec.n_dsk_read"
+ Set gtmtypes("node_local",128,"off")=104472
Set gtmtypes("node_local",128,"len")=8
Set gtmtypes("node_local",128,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_lock_fail")=128
- Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.db_curr_tn"
- Set gtmtypes("node_local",129,"off")=112656
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=128
+ Set gtmtypes("node_local",129,"name")="node_local.gvstats_rec.n_dsk_write"
+ Set gtmtypes("node_local",129,"off")=104480
Set gtmtypes("node_local",129,"len")=8
Set gtmtypes("node_local",129,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.db_curr_tn")=129
- Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.n_dsk_read"
- Set gtmtypes("node_local",130,"off")=112664
+ Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=129
+ Set gtmtypes("node_local",130,"name")="node_local.gvstats_rec.n_nontp_readwrite"
+ Set gtmtypes("node_local",130,"off")=104488
Set gtmtypes("node_local",130,"len")=8
Set gtmtypes("node_local",130,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_read")=130
- Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_dsk_write"
- Set gtmtypes("node_local",131,"off")=112672
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=130
+ Set gtmtypes("node_local",131,"name")="node_local.gvstats_rec.n_nontp_readonly"
+ Set gtmtypes("node_local",131,"off")=104496
Set gtmtypes("node_local",131,"len")=8
Set gtmtypes("node_local",131,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_dsk_write")=131
- Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_nontp_readwrite"
- Set gtmtypes("node_local",132,"off")=112680
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=131
+ Set gtmtypes("node_local",132,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
+ Set gtmtypes("node_local",132,"off")=104504
Set gtmtypes("node_local",132,"len")=8
Set gtmtypes("node_local",132,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readwrite")=132
- Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_readonly"
- Set gtmtypes("node_local",133,"off")=112688
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=132
+ Set gtmtypes("node_local",133,"name")="node_local.gvstats_rec.n_nontp_blkread"
+ Set gtmtypes("node_local",133,"off")=104512
Set gtmtypes("node_local",133,"len")=8
Set gtmtypes("node_local",133,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_readonly")=133
- Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_blkwrite"
- Set gtmtypes("node_local",134,"off")=112696
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=133
+ Set gtmtypes("node_local",134,"name")="node_local.gvstats_rec.n_nontp_retries_0"
+ Set gtmtypes("node_local",134,"off")=104520
Set gtmtypes("node_local",134,"len")=8
Set gtmtypes("node_local",134,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkwrite")=134
- Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_blkread"
- Set gtmtypes("node_local",135,"off")=112704
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=134
+ Set gtmtypes("node_local",135,"name")="node_local.gvstats_rec.n_nontp_retries_1"
+ Set gtmtypes("node_local",135,"off")=104528
Set gtmtypes("node_local",135,"len")=8
Set gtmtypes("node_local",135,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_blkread")=135
- Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_retries_0"
- Set gtmtypes("node_local",136,"off")=112712
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=135
+ Set gtmtypes("node_local",136,"name")="node_local.gvstats_rec.n_nontp_retries_2"
+ Set gtmtypes("node_local",136,"off")=104536
Set gtmtypes("node_local",136,"len")=8
Set gtmtypes("node_local",136,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_0")=136
- Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_1"
- Set gtmtypes("node_local",137,"off")=112720
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=136
+ Set gtmtypes("node_local",137,"name")="node_local.gvstats_rec.n_nontp_retries_3"
+ Set gtmtypes("node_local",137,"off")=104544
Set gtmtypes("node_local",137,"len")=8
Set gtmtypes("node_local",137,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_1")=137
- Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_nontp_retries_2"
- Set gtmtypes("node_local",138,"off")=112728
+ Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=137
+ Set gtmtypes("node_local",138,"name")="node_local.gvstats_rec.n_tp_readwrite"
+ Set gtmtypes("node_local",138,"off")=104552
Set gtmtypes("node_local",138,"len")=8
Set gtmtypes("node_local",138,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_2")=138
- Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_nontp_retries_3"
- Set gtmtypes("node_local",139,"off")=112736
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=138
+ Set gtmtypes("node_local",139,"name")="node_local.gvstats_rec.n_tp_readonly"
+ Set gtmtypes("node_local",139,"off")=104560
Set gtmtypes("node_local",139,"len")=8
Set gtmtypes("node_local",139,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_nontp_retries_3")=139
- Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_tp_readwrite"
- Set gtmtypes("node_local",140,"off")=112744
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=139
+ Set gtmtypes("node_local",140,"name")="node_local.gvstats_rec.n_tp_rolledback"
+ Set gtmtypes("node_local",140,"off")=104568
Set gtmtypes("node_local",140,"len")=8
Set gtmtypes("node_local",140,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readwrite")=140
- Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_readonly"
- Set gtmtypes("node_local",141,"off")=112752
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=140
+ Set gtmtypes("node_local",141,"name")="node_local.gvstats_rec.n_tp_blkwrite"
+ Set gtmtypes("node_local",141,"off")=104576
Set gtmtypes("node_local",141,"len")=8
Set gtmtypes("node_local",141,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_readonly")=141
- Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_rolledback"
- Set gtmtypes("node_local",142,"off")=112760
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=141
+ Set gtmtypes("node_local",142,"name")="node_local.gvstats_rec.n_tp_blkread"
+ Set gtmtypes("node_local",142,"off")=104584
Set gtmtypes("node_local",142,"len")=8
Set gtmtypes("node_local",142,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_rolledback")=142
- Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_blkwrite"
- Set gtmtypes("node_local",143,"off")=112768
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=142
+ Set gtmtypes("node_local",143,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
+ Set gtmtypes("node_local",143,"off")=104592
Set gtmtypes("node_local",143,"len")=8
Set gtmtypes("node_local",143,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkwrite")=143
- Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_blkread"
- Set gtmtypes("node_local",144,"off")=112776
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=143
+ Set gtmtypes("node_local",144,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
+ Set gtmtypes("node_local",144,"off")=104600
Set gtmtypes("node_local",144,"len")=8
Set gtmtypes("node_local",144,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_blkread")=144
- Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_tot_retries_0"
- Set gtmtypes("node_local",145,"off")=112784
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=144
+ Set gtmtypes("node_local",145,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
+ Set gtmtypes("node_local",145,"off")=104608
Set gtmtypes("node_local",145,"len")=8
Set gtmtypes("node_local",145,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_0")=145
- Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_1"
- Set gtmtypes("node_local",146,"off")=112792
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=145
+ Set gtmtypes("node_local",146,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
+ Set gtmtypes("node_local",146,"off")=104616
Set gtmtypes("node_local",146,"len")=8
Set gtmtypes("node_local",146,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_1")=146
- Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_2"
- Set gtmtypes("node_local",147,"off")=112800
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=146
+ Set gtmtypes("node_local",147,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
+ Set gtmtypes("node_local",147,"off")=104624
Set gtmtypes("node_local",147,"len")=8
Set gtmtypes("node_local",147,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_2")=147
- Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_tot_retries_3"
- Set gtmtypes("node_local",148,"off")=112808
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=147
+ Set gtmtypes("node_local",148,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
+ Set gtmtypes("node_local",148,"off")=104632
Set gtmtypes("node_local",148,"len")=8
Set gtmtypes("node_local",148,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_3")=148
- Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_tot_retries_4"
- Set gtmtypes("node_local",149,"off")=112816
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=148
+ Set gtmtypes("node_local",149,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
+ Set gtmtypes("node_local",149,"off")=104640
Set gtmtypes("node_local",149,"len")=8
Set gtmtypes("node_local",149,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_tot_retries_4")=149
- Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_0"
- Set gtmtypes("node_local",150,"off")=112824
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=149
+ Set gtmtypes("node_local",150,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
+ Set gtmtypes("node_local",150,"off")=104648
Set gtmtypes("node_local",150,"len")=8
Set gtmtypes("node_local",150,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_0")=150
- Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_1"
- Set gtmtypes("node_local",151,"off")=112832
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=150
+ Set gtmtypes("node_local",151,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
+ Set gtmtypes("node_local",151,"off")=104656
Set gtmtypes("node_local",151,"len")=8
Set gtmtypes("node_local",151,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_1")=151
- Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_2"
- Set gtmtypes("node_local",152,"off")=112840
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=151
+ Set gtmtypes("node_local",152,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
+ Set gtmtypes("node_local",152,"off")=104664
Set gtmtypes("node_local",152,"len")=8
Set gtmtypes("node_local",152,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_2")=152
- Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_3"
- Set gtmtypes("node_local",153,"off")=112848
+ Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=152
+ Set gtmtypes("node_local",153,"name")="node_local.gvstats_rec.n_ztrigger"
+ Set gtmtypes("node_local",153,"off")=104672
Set gtmtypes("node_local",153,"len")=8
Set gtmtypes("node_local",153,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_3")=153
- Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_tp_cnflct_retries_4"
- Set gtmtypes("node_local",154,"off")=112856
+ Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=153
+ Set gtmtypes("node_local",154,"name")="node_local.gvstats_rec.n_db_flush"
+ Set gtmtypes("node_local",154,"off")=104680
Set gtmtypes("node_local",154,"len")=8
Set gtmtypes("node_local",154,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_tp_cnflct_retries_4")=154
- Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_ztrigger"
- Set gtmtypes("node_local",155,"off")=112864
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=154
+ Set gtmtypes("node_local",155,"name")="node_local.gvstats_rec.n_db_fsync"
+ Set gtmtypes("node_local",155,"off")=104688
Set gtmtypes("node_local",155,"len")=8
Set gtmtypes("node_local",155,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_ztrigger")=155
- Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_db_flush"
- Set gtmtypes("node_local",156,"off")=112872
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=155
+ Set gtmtypes("node_local",156,"name")="node_local.gvstats_rec.n_jnl_flush"
+ Set gtmtypes("node_local",156,"off")=104696
Set gtmtypes("node_local",156,"len")=8
Set gtmtypes("node_local",156,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_flush")=156
- Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_db_fsync"
- Set gtmtypes("node_local",157,"off")=112880
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=156
+ Set gtmtypes("node_local",157,"name")="node_local.gvstats_rec.n_jnl_fsync"
+ Set gtmtypes("node_local",157,"off")=104704
Set gtmtypes("node_local",157,"len")=8
Set gtmtypes("node_local",157,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_fsync")=157
- Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_jnl_flush"
- Set gtmtypes("node_local",158,"off")=112888
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=157
+ Set gtmtypes("node_local",158,"name")="node_local.gvstats_rec.n_jbuff_bytes"
+ Set gtmtypes("node_local",158,"off")=104712
Set gtmtypes("node_local",158,"len")=8
Set gtmtypes("node_local",158,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_flush")=158
- Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jnl_fsync"
- Set gtmtypes("node_local",159,"off")=112896
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=158
+ Set gtmtypes("node_local",159,"name")="node_local.gvstats_rec.n_jfile_bytes"
+ Set gtmtypes("node_local",159,"off")=104720
Set gtmtypes("node_local",159,"len")=8
Set gtmtypes("node_local",159,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_fsync")=159
- Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jbuff_bytes"
- Set gtmtypes("node_local",160,"off")=112904
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=159
+ Set gtmtypes("node_local",160,"name")="node_local.gvstats_rec.n_jfile_writes"
+ Set gtmtypes("node_local",160,"off")=104728
Set gtmtypes("node_local",160,"len")=8
Set gtmtypes("node_local",160,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jbuff_bytes")=160
- Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jfile_bytes"
- Set gtmtypes("node_local",161,"off")=112912
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=160
+ Set gtmtypes("node_local",161,"name")="node_local.gvstats_rec.n_jrec_logical"
+ Set gtmtypes("node_local",161,"off")=104736
Set gtmtypes("node_local",161,"len")=8
Set gtmtypes("node_local",161,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_bytes")=161
- Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jfile_writes"
- Set gtmtypes("node_local",162,"off")=112920
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=161
+ Set gtmtypes("node_local",162,"name")="node_local.gvstats_rec.n_jrec_pblk"
+ Set gtmtypes("node_local",162,"off")=104744
Set gtmtypes("node_local",162,"len")=8
Set gtmtypes("node_local",162,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jfile_writes")=162
- Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jrec_logical"
- Set gtmtypes("node_local",163,"off")=112928
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=162
+ Set gtmtypes("node_local",163,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
+ Set gtmtypes("node_local",163,"off")=104752
Set gtmtypes("node_local",163,"len")=8
Set gtmtypes("node_local",163,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_logical")=163
- Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_pblk"
- Set gtmtypes("node_local",164,"off")=112936
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=163
+ Set gtmtypes("node_local",164,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
+ Set gtmtypes("node_local",164,"off")=104760
Set gtmtypes("node_local",164,"len")=8
Set gtmtypes("node_local",164,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_pblk")=164
- Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_epoch_regular"
- Set gtmtypes("node_local",165,"off")=112944
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=164
+ Set gtmtypes("node_local",165,"name")="node_local.gvstats_rec.n_jrec_other"
+ Set gtmtypes("node_local",165,"off")=104768
Set gtmtypes("node_local",165,"len")=8
Set gtmtypes("node_local",165,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_regular")=165
- Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jrec_epoch_idle"
- Set gtmtypes("node_local",166,"off")=112952
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=165
+ Set gtmtypes("node_local",166,"name")="node_local.gvstats_rec.n_jnl_extends"
+ Set gtmtypes("node_local",166,"off")=104776
Set gtmtypes("node_local",166,"len")=8
Set gtmtypes("node_local",166,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_epoch_idle")=166
- Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_jrec_other"
- Set gtmtypes("node_local",167,"off")=112960
+ Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=166
+ Set gtmtypes("node_local",167,"name")="node_local.gvstats_rec.n_db_extends"
+ Set gtmtypes("node_local",167,"off")=104784
Set gtmtypes("node_local",167,"len")=8
Set gtmtypes("node_local",167,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jrec_other")=167
- Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_jnl_extends"
- Set gtmtypes("node_local",168,"off")=112968
+ Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=167
+ Set gtmtypes("node_local",168,"name")="node_local.gvstats_rec.n_crit_success"
+ Set gtmtypes("node_local",168,"off")=104792
Set gtmtypes("node_local",168,"len")=8
Set gtmtypes("node_local",168,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_jnl_extends")=168
- Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_db_extends"
- Set gtmtypes("node_local",169,"off")=112976
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=168
+ Set gtmtypes("node_local",169,"name")="node_local.gvstats_rec.n_crits_in_epch"
+ Set gtmtypes("node_local",169,"off")=104800
Set gtmtypes("node_local",169,"len")=8
Set gtmtypes("node_local",169,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_db_extends")=169
- Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.n_crit_success"
- Set gtmtypes("node_local",170,"off")=112984
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=169
+ Set gtmtypes("node_local",170,"name")="node_local.gvstats_rec.sq_crit_failed"
+ Set gtmtypes("node_local",170,"off")=104808
Set gtmtypes("node_local",170,"len")=8
Set gtmtypes("node_local",170,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_success")=170
- Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crits_in_epch"
- Set gtmtypes("node_local",171,"off")=112992
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=170
+ Set gtmtypes("node_local",171,"name")="node_local.gvstats_rec.n_crit_failed"
+ Set gtmtypes("node_local",171,"off")=104816
Set gtmtypes("node_local",171,"len")=8
Set gtmtypes("node_local",171,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crits_in_epch")=171
- Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.sq_crit_failed"
- Set gtmtypes("node_local",172,"off")=113000
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=171
+ Set gtmtypes("node_local",172,"name")="node_local.gvstats_rec.sq_crit_que_slps"
+ Set gtmtypes("node_local",172,"off")=104824
Set gtmtypes("node_local",172,"len")=8
Set gtmtypes("node_local",172,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_failed")=172
- Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.n_crit_failed"
- Set gtmtypes("node_local",173,"off")=113008
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=172
+ Set gtmtypes("node_local",173,"name")="node_local.gvstats_rec.n_crit_que_slps"
+ Set gtmtypes("node_local",173,"off")=104832
Set gtmtypes("node_local",173,"len")=8
Set gtmtypes("node_local",173,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_failed")=173
- Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.sq_crit_que_slps"
- Set gtmtypes("node_local",174,"off")=113016
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=173
+ Set gtmtypes("node_local",174,"name")="node_local.gvstats_rec.sq_crit_yields"
+ Set gtmtypes("node_local",174,"off")=104840
Set gtmtypes("node_local",174,"len")=8
Set gtmtypes("node_local",174,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_que_slps")=174
- Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.n_crit_que_slps"
- Set gtmtypes("node_local",175,"off")=113024
+ Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=174
+ Set gtmtypes("node_local",175,"name")="node_local.gvstats_rec.n_crit_yields"
+ Set gtmtypes("node_local",175,"off")=104848
Set gtmtypes("node_local",175,"len")=8
Set gtmtypes("node_local",175,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_que_slps")=175
- Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.sq_crit_yields"
- Set gtmtypes("node_local",176,"off")=113032
+ Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=175
+ Set gtmtypes("node_local",176,"name")="node_local.gvstats_rec.n_clean2dirty"
+ Set gtmtypes("node_local",176,"off")=104856
Set gtmtypes("node_local",176,"len")=8
Set gtmtypes("node_local",176,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.sq_crit_yields")=176
- Set gtmtypes("node_local",177,"name")="node_local.gvstats_rec.n_crit_yields"
- Set gtmtypes("node_local",177,"off")=113040
+ Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=176
+ Set gtmtypes("node_local",177,"name")="node_local.last_wcsflu_tn"
+ Set gtmtypes("node_local",177,"off")=104864
Set gtmtypes("node_local",177,"len")=8
Set gtmtypes("node_local",177,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_crit_yields")=177
- Set gtmtypes("node_local",178,"name")="node_local.gvstats_rec.n_clean2dirty"
- Set gtmtypes("node_local",178,"off")=113048
+ Set gtmtypfldindx("node_local","last_wcsflu_tn")=177
+ Set gtmtypes("node_local",178,"name")="node_local.last_wcs_recover_tn"
+ Set gtmtypes("node_local",178,"off")=104872
Set gtmtypes("node_local",178,"len")=8
Set gtmtypes("node_local",178,"type")="uint64_t"
- Set gtmtypfldindx("node_local","gvstats_rec.n_clean2dirty")=178
- Set gtmtypes("node_local",179,"name")="node_local.last_wcsflu_tn"
- Set gtmtypes("node_local",179,"off")=113056
+ Set gtmtypfldindx("node_local","last_wcs_recover_tn")=178
+ Set gtmtypes("node_local",179,"name")="node_local.encrypt_glo_buff_off"
+ Set gtmtypes("node_local",179,"off")=104880
Set gtmtypes("node_local",179,"len")=8
- Set gtmtypes("node_local",179,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcsflu_tn")=179
- Set gtmtypes("node_local",180,"name")="node_local.last_wcs_recover_tn"
- Set gtmtypes("node_local",180,"off")=113064
+ Set gtmtypes("node_local",179,"type")="intptr_t"
+ Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=179
+ Set gtmtypes("node_local",180,"name")="node_local.snapshot_crit_latch"
+ Set gtmtypes("node_local",180,"off")=104888
Set gtmtypes("node_local",180,"len")=8
- Set gtmtypes("node_local",180,"type")="uint64_t"
- Set gtmtypfldindx("node_local","last_wcs_recover_tn")=180
- Set gtmtypes("node_local",181,"name")="node_local.encrypt_glo_buff_off"
- Set gtmtypes("node_local",181,"off")=113072
+ Set gtmtypes("node_local",180,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch")=180
+ Set gtmtypes("node_local",181,"name")="node_local.snapshot_crit_latch.u"
+ Set gtmtypes("node_local",181,"off")=104888
Set gtmtypes("node_local",181,"len")=8
- Set gtmtypes("node_local",181,"type")="intptr_t"
- Set gtmtypfldindx("node_local","encrypt_glo_buff_off")=181
- Set gtmtypes("node_local",182,"name")="node_local.snapshot_crit_latch"
- Set gtmtypes("node_local",182,"off")=113080
+ Set gtmtypes("node_local",181,"type")="union"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=181
+ Set gtmtypes("node_local",182,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",182,"off")=104888
Set gtmtypes("node_local",182,"len")=8
- Set gtmtypes("node_local",182,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch")=182
- Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch.u"
- Set gtmtypes("node_local",183,"off")=113080
+ Set gtmtypes("node_local",182,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=182
+ Set gtmtypes("node_local",183,"name")="node_local.snapshot_crit_latch.u.parts"
+ Set gtmtypes("node_local",183,"off")=104888
Set gtmtypes("node_local",183,"len")=8
- Set gtmtypes("node_local",183,"type")="union"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u")=183
- Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",184,"off")=113080
- Set gtmtypes("node_local",184,"len")=8
- Set gtmtypes("node_local",184,"type")="uint64_t"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.pid_imgcnt")=184
- Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.parts"
- Set gtmtypes("node_local",185,"off")=113080
- Set gtmtypes("node_local",185,"len")=8
- Set gtmtypes("node_local",185,"type")="struct"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=185
- Set gtmtypes("node_local",186,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",186,"off")=113080
- Set gtmtypes("node_local",186,"len")=4
- Set gtmtypes("node_local",186,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=186
- Set gtmtypes("node_local",187,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
- Set gtmtypes("node_local",187,"off")=113084
+ Set gtmtypes("node_local",183,"type")="struct"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts")=183
+ Set gtmtypes("node_local",184,"name")="node_local.snapshot_crit_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",184,"off")=104888
+ Set gtmtypes("node_local",184,"len")=4
+ Set gtmtypes("node_local",184,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_pid")=184
+ Set gtmtypes("node_local",185,"name")="node_local.snapshot_crit_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",185,"off")=104892
+ Set gtmtypes("node_local",185,"len")=4
+ Set gtmtypes("node_local",185,"type")="int"
+ Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=185
+ Set gtmtypes("node_local",186,"name")="node_local.ss_shmid"
+ Set gtmtypes("node_local",186,"off")=104896
+ Set gtmtypes("node_local",186,"len")=8
+ Set gtmtypes("node_local",186,"type")="long"
+ Set gtmtypfldindx("node_local","ss_shmid")=186
+ Set gtmtypes("node_local",187,"name")="node_local.ss_shmcycle"
+ Set gtmtypes("node_local",187,"off")=104904
Set gtmtypes("node_local",187,"len")=4
- Set gtmtypes("node_local",187,"type")="int"
- Set gtmtypfldindx("node_local","snapshot_crit_latch.u.parts.latch_word")=187
- Set gtmtypes("node_local",188,"name")="node_local.ss_shmid"
- Set gtmtypes("node_local",188,"off")=113088
- Set gtmtypes("node_local",188,"len")=8
- Set gtmtypes("node_local",188,"type")="long"
- Set gtmtypfldindx("node_local","ss_shmid")=188
- Set gtmtypes("node_local",189,"name")="node_local.ss_shmcycle"
- Set gtmtypes("node_local",189,"off")=113096
+ Set gtmtypes("node_local",187,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ss_shmcycle")=187
+ Set gtmtypes("node_local",188,"name")="node_local.snapshot_in_prog"
+ Set gtmtypes("node_local",188,"off")=104908
+ Set gtmtypes("node_local",188,"len")=4
+ Set gtmtypes("node_local",188,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","snapshot_in_prog")=188
+ Set gtmtypes("node_local",189,"name")="node_local.num_snapshots_in_effect"
+ Set gtmtypes("node_local",189,"off")=104912
Set gtmtypes("node_local",189,"len")=4
Set gtmtypes("node_local",189,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ss_shmcycle")=189
- Set gtmtypes("node_local",190,"name")="node_local.snapshot_in_prog"
- Set gtmtypes("node_local",190,"off")=113100
+ Set gtmtypfldindx("node_local","num_snapshots_in_effect")=189
+ Set gtmtypes("node_local",190,"name")="node_local.wbox_test_seq_num"
+ Set gtmtypes("node_local",190,"off")=104916
Set gtmtypes("node_local",190,"len")=4
- Set gtmtypes("node_local",190,"type")="boolean_t"
- Set gtmtypfldindx("node_local","snapshot_in_prog")=190
- Set gtmtypes("node_local",191,"name")="node_local.num_snapshots_in_effect"
- Set gtmtypes("node_local",191,"off")=113104
+ Set gtmtypes("node_local",190,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wbox_test_seq_num")=190
+ Set gtmtypes("node_local",191,"name")="node_local.freeze_online"
+ Set gtmtypes("node_local",191,"off")=104920
Set gtmtypes("node_local",191,"len")=4
Set gtmtypes("node_local",191,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","num_snapshots_in_effect")=191
- Set gtmtypes("node_local",192,"name")="node_local.wbox_test_seq_num"
- Set gtmtypes("node_local",192,"off")=113108
- Set gtmtypes("node_local",192,"len")=4
+ Set gtmtypfldindx("node_local","freeze_online")=191
+ Set gtmtypes("node_local",192,"name")="node_local.kip_pid_array"
+ Set gtmtypes("node_local",192,"off")=104924
+ Set gtmtypes("node_local",192,"len")=32
Set gtmtypes("node_local",192,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wbox_test_seq_num")=192
- Set gtmtypes("node_local",193,"name")="node_local.kip_pid_array"
- Set gtmtypes("node_local",193,"off")=113112
- Set gtmtypes("node_local",193,"len")=32
- Set gtmtypes("node_local",193,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","kip_pid_array")=193
- Set gtmtypes("node_local",193,"dim")=8
- Set gtmtypes("node_local",194,"name")="node_local.sec_size"
- Set gtmtypes("node_local",194,"off")=113144
- Set gtmtypes("node_local",194,"len")=8
- Set gtmtypes("node_local",194,"type")="uint64_t"
- Set gtmtypfldindx("node_local","sec_size")=194
- Set gtmtypes("node_local",195,"name")="node_local.jnlpool_shmid"
- Set gtmtypes("node_local",195,"off")=113152
+ Set gtmtypfldindx("node_local","kip_pid_array")=192
+ Set gtmtypes("node_local",192,"dim")=8
+ Set gtmtypes("node_local",193,"name")="node_local.sec_size"
+ Set gtmtypes("node_local",193,"off")=104960
+ Set gtmtypes("node_local",193,"len")=8
+ Set gtmtypes("node_local",193,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","sec_size")=193
+ Set gtmtypes("node_local",194,"name")="node_local.jnlpool_shmid"
+ Set gtmtypes("node_local",194,"off")=104968
+ Set gtmtypes("node_local",194,"len")=4
+ Set gtmtypes("node_local",194,"type")="int"
+ Set gtmtypfldindx("node_local","jnlpool_shmid")=194
+ Set gtmtypes("node_local",195,"name")="node_local.lockspacefull_logged"
+ Set gtmtypes("node_local",195,"off")=104972
Set gtmtypes("node_local",195,"len")=4
- Set gtmtypes("node_local",195,"type")="int"
- Set gtmtypfldindx("node_local","jnlpool_shmid")=195
- Set gtmtypes("node_local",196,"name")="node_local.lockspacefull_logged"
- Set gtmtypes("node_local",196,"off")=113156
+ Set gtmtypes("node_local",195,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lockspacefull_logged")=195
+ Set gtmtypes("node_local",196,"name")="node_local.trunc_pid"
+ Set gtmtypes("node_local",196,"off")=104976
Set gtmtypes("node_local",196,"len")=4
- Set gtmtypes("node_local",196,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lockspacefull_logged")=196
- Set gtmtypes("node_local",197,"name")="node_local.trunc_pid"
- Set gtmtypes("node_local",197,"off")=113160
+ Set gtmtypes("node_local",196,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","trunc_pid")=196
+ Set gtmtypes("node_local",197,"name")="node_local.highest_lbm_with_busy_blk"
+ Set gtmtypes("node_local",197,"off")=104980
Set gtmtypes("node_local",197,"len")=4
- Set gtmtypes("node_local",197,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","trunc_pid")=197
- Set gtmtypes("node_local",198,"name")="node_local.highest_lbm_with_busy_blk"
- Set gtmtypes("node_local",198,"off")=113164
- Set gtmtypes("node_local",198,"len")=4
- Set gtmtypes("node_local",198,"type")="int"
- Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=198
- Set gtmtypes("node_local",199,"name")="node_local.ftok_ops_array"
- Set gtmtypes("node_local",199,"off")=113168
- Set gtmtypes("node_local",199,"len")=8192
- Set gtmtypes("node_local",199,"type")="ftokhist"
- Set gtmtypfldindx("node_local","ftok_ops_array")=199
- Set gtmtypes("node_local",199,"dim")=512
- Set gtmtypes("node_local",200,"name")="node_local.ftok_ops_array[0].ftok_oper"
- Set gtmtypes("node_local",200,"off")=113168
+ Set gtmtypes("node_local",197,"type")="int"
+ Set gtmtypfldindx("node_local","highest_lbm_with_busy_blk")=197
+ Set gtmtypes("node_local",198,"name")="node_local.ftok_ops_array"
+ Set gtmtypes("node_local",198,"off")=104984
+ Set gtmtypes("node_local",198,"len")=8192
+ Set gtmtypes("node_local",198,"type")="ftokhist"
+ Set gtmtypfldindx("node_local","ftok_ops_array")=198
+ Set gtmtypes("node_local",198,"dim")=512
+ Set gtmtypes("node_local",199,"name")="node_local.ftok_ops_array[0].ftok_oper"
+ Set gtmtypes("node_local",199,"off")=104984
+ Set gtmtypes("node_local",199,"len")=4
+ Set gtmtypes("node_local",199,"type")="int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=199
+ Set gtmtypes("node_local",200,"name")="node_local.ftok_ops_array[0].process_id"
+ Set gtmtypes("node_local",200,"off")=104988
Set gtmtypes("node_local",200,"len")=4
- Set gtmtypes("node_local",200,"type")="int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].ftok_oper")=200
- Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array[0].process_id"
- Set gtmtypes("node_local",201,"off")=113172
- Set gtmtypes("node_local",201,"len")=4
- Set gtmtypes("node_local",201,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=201
- Set gtmtypes("node_local",202,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypes("node_local",200,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].process_id")=200
+ Set gtmtypes("node_local",201,"name")="node_local.ftok_ops_array[0].cr_tn"
+ Set gtmtypes("node_local",201,"off")=104992
+ Set gtmtypes("node_local",201,"len")=8
+ Set gtmtypes("node_local",201,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=201
+ Set gtmtypes("node_local",202,"name")="node_local.root_search_cycle"
Set gtmtypes("node_local",202,"off")=113176
- Set gtmtypes("node_local",202,"len")=8
- Set gtmtypes("node_local",202,"type")="uint64_t"
- Set gtmtypfldindx("node_local","ftok_ops_array[0].cr_tn")=202
- Set gtmtypes("node_local",203,"name")="node_local.root_search_cycle"
- Set gtmtypes("node_local",203,"off")=121360
+ Set gtmtypes("node_local",202,"len")=4
+ Set gtmtypes("node_local",202,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","root_search_cycle")=202
+ Set gtmtypes("node_local",203,"name")="node_local.onln_rlbk_cycle"
+ Set gtmtypes("node_local",203,"off")=113180
Set gtmtypes("node_local",203,"len")=4
Set gtmtypes("node_local",203,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","root_search_cycle")=203
- Set gtmtypes("node_local",204,"name")="node_local.onln_rlbk_cycle"
- Set gtmtypes("node_local",204,"off")=121364
+ Set gtmtypfldindx("node_local","onln_rlbk_cycle")=203
+ Set gtmtypes("node_local",204,"name")="node_local.db_onln_rlbkd_cycle"
+ Set gtmtypes("node_local",204,"off")=113184
Set gtmtypes("node_local",204,"len")=4
Set gtmtypes("node_local",204,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_cycle")=204
- Set gtmtypes("node_local",205,"name")="node_local.db_onln_rlbkd_cycle"
- Set gtmtypes("node_local",205,"off")=121368
+ Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=204
+ Set gtmtypes("node_local",205,"name")="node_local.onln_rlbk_pid"
+ Set gtmtypes("node_local",205,"off")=113188
Set gtmtypes("node_local",205,"len")=4
Set gtmtypes("node_local",205,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","db_onln_rlbkd_cycle")=205
- Set gtmtypes("node_local",206,"name")="node_local.onln_rlbk_pid"
- Set gtmtypes("node_local",206,"off")=121372
+ Set gtmtypfldindx("node_local","onln_rlbk_pid")=205
+ Set gtmtypes("node_local",206,"name")="node_local.dbrndwn_ftok_skip"
+ Set gtmtypes("node_local",206,"off")=113192
Set gtmtypes("node_local",206,"len")=4
Set gtmtypes("node_local",206,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","onln_rlbk_pid")=206
- Set gtmtypes("node_local",207,"name")="node_local.dbrndwn_ftok_skip"
- Set gtmtypes("node_local",207,"off")=121376
+ Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=206
+ Set gtmtypes("node_local",207,"name")="node_local.dbrndwn_access_skip"
+ Set gtmtypes("node_local",207,"off")=113196
Set gtmtypes("node_local",207,"len")=4
Set gtmtypes("node_local",207,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_ftok_skip")=207
- Set gtmtypes("node_local",208,"name")="node_local.dbrndwn_access_skip"
- Set gtmtypes("node_local",208,"off")=121380
+ Set gtmtypfldindx("node_local","dbrndwn_access_skip")=207
+ Set gtmtypes("node_local",208,"name")="node_local.fastinteg_in_prog"
+ Set gtmtypes("node_local",208,"off")=113200
Set gtmtypes("node_local",208,"len")=4
- Set gtmtypes("node_local",208,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","dbrndwn_access_skip")=208
- Set gtmtypes("node_local",209,"name")="node_local.fastinteg_in_prog"
- Set gtmtypes("node_local",209,"off")=121384
+ Set gtmtypes("node_local",208,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fastinteg_in_prog")=208
+ Set gtmtypes("node_local",209,"name")="node_local.wtstart_errcnt"
+ Set gtmtypes("node_local",209,"off")=113204
Set gtmtypes("node_local",209,"len")=4
- Set gtmtypes("node_local",209,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fastinteg_in_prog")=209
- Set gtmtypes("node_local",210,"name")="node_local.wtstart_errcnt"
- Set gtmtypes("node_local",210,"off")=121388
+ Set gtmtypes("node_local",209,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wtstart_errcnt")=209
+ Set gtmtypes("node_local",210,"name")="node_local.fake_db_enospc"
+ Set gtmtypes("node_local",210,"off")=113208
Set gtmtypes("node_local",210,"len")=4
- Set gtmtypes("node_local",210,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wtstart_errcnt")=210
- Set gtmtypes("node_local",211,"name")="node_local.fake_db_enospc"
- Set gtmtypes("node_local",211,"off")=121392
+ Set gtmtypes("node_local",210,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","fake_db_enospc")=210
+ Set gtmtypes("node_local",211,"name")="node_local.fake_jnl_enospc"
+ Set gtmtypes("node_local",211,"off")=113212
Set gtmtypes("node_local",211,"len")=4
Set gtmtypes("node_local",211,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_db_enospc")=211
- Set gtmtypes("node_local",212,"name")="node_local.fake_jnl_enospc"
- Set gtmtypes("node_local",212,"off")=121396
+ Set gtmtypfldindx("node_local","fake_jnl_enospc")=211
+ Set gtmtypes("node_local",212,"name")="node_local.doing_epoch"
+ Set gtmtypes("node_local",212,"off")=113216
Set gtmtypes("node_local",212,"len")=4
Set gtmtypes("node_local",212,"type")="boolean_t"
- Set gtmtypfldindx("node_local","fake_jnl_enospc")=212
- Set gtmtypes("node_local",213,"name")="node_local.doing_epoch"
- Set gtmtypes("node_local",213,"off")=121400
+ Set gtmtypfldindx("node_local","doing_epoch")=212
+ Set gtmtypes("node_local",213,"name")="node_local.epoch_taper_start_dbuffs"
+ Set gtmtypes("node_local",213,"off")=113220
Set gtmtypes("node_local",213,"len")=4
- Set gtmtypes("node_local",213,"type")="boolean_t"
- Set gtmtypfldindx("node_local","doing_epoch")=213
- Set gtmtypes("node_local",214,"name")="node_local.epoch_taper_start_dbuffs"
- Set gtmtypes("node_local",214,"off")=121404
+ Set gtmtypes("node_local",213,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=213
+ Set gtmtypes("node_local",214,"name")="node_local.epoch_taper_need_fsync"
+ Set gtmtypes("node_local",214,"off")=113224
Set gtmtypes("node_local",214,"len")=4
- Set gtmtypes("node_local",214,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","epoch_taper_start_dbuffs")=214
- Set gtmtypes("node_local",215,"name")="node_local.epoch_taper_need_fsync"
- Set gtmtypes("node_local",215,"off")=121408
- Set gtmtypes("node_local",215,"len")=4
- Set gtmtypes("node_local",215,"type")="boolean_t"
- Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=215
- Set gtmtypes("node_local",216,"name")="node_local.wt_pid_array"
- Set gtmtypes("node_local",216,"off")=121412
- Set gtmtypes("node_local",216,"len")=16
+ Set gtmtypes("node_local",214,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","epoch_taper_need_fsync")=214
+ Set gtmtypes("node_local",215,"name")="node_local.wt_pid_array"
+ Set gtmtypes("node_local",215,"off")=113228
+ Set gtmtypes("node_local",215,"len")=16
+ Set gtmtypes("node_local",215,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","wt_pid_array")=215
+ Set gtmtypes("node_local",215,"dim")=4
+ Set gtmtypes("node_local",216,"name")="node_local.reorg_encrypt_pid"
+ Set gtmtypes("node_local",216,"off")=113244
+ Set gtmtypes("node_local",216,"len")=4
Set gtmtypes("node_local",216,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","wt_pid_array")=216
- Set gtmtypes("node_local",216,"dim")=4
- Set gtmtypes("node_local",217,"name")="node_local.reorg_encrypt_pid"
- Set gtmtypes("node_local",217,"off")=121428
+ Set gtmtypfldindx("node_local","reorg_encrypt_pid")=216
+ Set gtmtypes("node_local",217,"name")="node_local.reorg_encrypt_cycle"
+ Set gtmtypes("node_local",217,"off")=113248
Set gtmtypes("node_local",217,"len")=4
Set gtmtypes("node_local",217,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_pid")=217
- Set gtmtypes("node_local",218,"name")="node_local.reorg_encrypt_cycle"
- Set gtmtypes("node_local",218,"off")=121432
+ Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=217
+ Set gtmtypes("node_local",218,"name")="node_local.mupip_extract_count"
+ Set gtmtypes("node_local",218,"off")=113252
Set gtmtypes("node_local",218,"len")=4
Set gtmtypes("node_local",218,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","reorg_encrypt_cycle")=218
- Set gtmtypes("node_local",219,"name")="node_local.mupip_extract_count"
- Set gtmtypes("node_local",219,"off")=121436
+ Set gtmtypfldindx("node_local","mupip_extract_count")=218
+ Set gtmtypes("node_local",219,"name")="node_local.saved_acc_meth"
+ Set gtmtypes("node_local",219,"off")=113256
Set gtmtypes("node_local",219,"len")=4
- Set gtmtypes("node_local",219,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","mupip_extract_count")=219
- Set gtmtypes("node_local",220,"name")="node_local.saved_acc_meth"
- Set gtmtypes("node_local",220,"off")=121440
+ Set gtmtypes("node_local",219,"type")="int"
+ Set gtmtypfldindx("node_local","saved_acc_meth")=219
+ Set gtmtypes("node_local",220,"name")="node_local.saved_blk_size"
+ Set gtmtypes("node_local",220,"off")=113260
Set gtmtypes("node_local",220,"len")=4
Set gtmtypes("node_local",220,"type")="int"
- Set gtmtypfldindx("node_local","saved_acc_meth")=220
- Set gtmtypes("node_local",221,"name")="node_local.saved_blk_size"
- Set gtmtypes("node_local",221,"off")=121444
+ Set gtmtypfldindx("node_local","saved_blk_size")=220
+ Set gtmtypes("node_local",221,"name")="node_local.saved_lock_space_size"
+ Set gtmtypes("node_local",221,"off")=113264
Set gtmtypes("node_local",221,"len")=4
- Set gtmtypes("node_local",221,"type")="int"
- Set gtmtypfldindx("node_local","saved_blk_size")=221
- Set gtmtypes("node_local",222,"name")="node_local.saved_lock_space_size"
- Set gtmtypes("node_local",222,"off")=121448
+ Set gtmtypes("node_local",221,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","saved_lock_space_size")=221
+ Set gtmtypes("node_local",222,"name")="node_local.saved_jnl_buffer_size"
+ Set gtmtypes("node_local",222,"off")=113268
Set gtmtypes("node_local",222,"len")=4
- Set gtmtypes("node_local",222,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","saved_lock_space_size")=222
- Set gtmtypes("node_local",223,"name")="node_local.saved_jnl_buffer_size"
- Set gtmtypes("node_local",223,"off")=121452
- Set gtmtypes("node_local",223,"len")=4
- Set gtmtypes("node_local",223,"type")="int"
- Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=223
- Set gtmtypes("node_local",224,"name")="node_local.update_underway_tn"
- Set gtmtypes("node_local",224,"off")=121456
- Set gtmtypes("node_local",224,"len")=8
- Set gtmtypes("node_local",224,"type")="uint64_t"
- Set gtmtypfldindx("node_local","update_underway_tn")=224
- Set gtmtypes("node_local",225,"name")="node_local.lastwriterbypas_msg_issued"
- Set gtmtypes("node_local",225,"off")=121464
+ Set gtmtypes("node_local",222,"type")="int"
+ Set gtmtypfldindx("node_local","saved_jnl_buffer_size")=222
+ Set gtmtypes("node_local",223,"name")="node_local.update_underway_tn"
+ Set gtmtypes("node_local",223,"off")=113272
+ Set gtmtypes("node_local",223,"len")=8
+ Set gtmtypes("node_local",223,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","update_underway_tn")=223
+ Set gtmtypes("node_local",224,"name")="node_local.lastwriterbypas_msg_issued"
+ Set gtmtypes("node_local",224,"off")=113280
+ Set gtmtypes("node_local",224,"len")=4
+ Set gtmtypes("node_local",224,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=224
+ Set gtmtypes("node_local",225,"name")="node_local.first_writer_seen"
+ Set gtmtypes("node_local",225,"off")=113284
Set gtmtypes("node_local",225,"len")=4
Set gtmtypes("node_local",225,"type")="boolean_t"
- Set gtmtypfldindx("node_local","lastwriterbypas_msg_issued")=225
- Set gtmtypes("node_local",226,"name")="node_local.first_writer_seen"
- Set gtmtypes("node_local",226,"off")=121468
+ Set gtmtypfldindx("node_local","first_writer_seen")=225
+ Set gtmtypes("node_local",226,"name")="node_local.first_nonbypas_writer_seen"
+ Set gtmtypes("node_local",226,"off")=113288
Set gtmtypes("node_local",226,"len")=4
Set gtmtypes("node_local",226,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_writer_seen")=226
- Set gtmtypes("node_local",227,"name")="node_local.first_nonbypas_writer_seen"
- Set gtmtypes("node_local",227,"off")=121472
+ Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=226
+ Set gtmtypes("node_local",227,"name")="node_local.ftok_counter_halted"
+ Set gtmtypes("node_local",227,"off")=113292
Set gtmtypes("node_local",227,"len")=4
Set gtmtypes("node_local",227,"type")="boolean_t"
- Set gtmtypfldindx("node_local","first_nonbypas_writer_seen")=227
- Set gtmtypes("node_local",228,"name")="node_local.ftok_counter_halted"
- Set gtmtypes("node_local",228,"off")=121476
+ Set gtmtypfldindx("node_local","ftok_counter_halted")=227
+ Set gtmtypes("node_local",228,"name")="node_local.access_counter_halted"
+ Set gtmtypes("node_local",228,"off")=113296
Set gtmtypes("node_local",228,"len")=4
Set gtmtypes("node_local",228,"type")="boolean_t"
- Set gtmtypfldindx("node_local","ftok_counter_halted")=228
- Set gtmtypes("node_local",229,"name")="node_local.access_counter_halted"
- Set gtmtypes("node_local",229,"off")=121480
+ Set gtmtypfldindx("node_local","access_counter_halted")=228
+ Set gtmtypes("node_local",229,"name")="node_local.statsdb_created"
+ Set gtmtypes("node_local",229,"off")=113300
Set gtmtypes("node_local",229,"len")=4
Set gtmtypes("node_local",229,"type")="boolean_t"
- Set gtmtypfldindx("node_local","access_counter_halted")=229
- Set gtmtypes("node_local",230,"name")="node_local.statsdb_created"
- Set gtmtypes("node_local",230,"off")=121484
+ Set gtmtypfldindx("node_local","statsdb_created")=229
+ Set gtmtypes("node_local",230,"name")="node_local.statsdb_fname_len"
+ Set gtmtypes("node_local",230,"off")=113304
Set gtmtypes("node_local",230,"len")=4
- Set gtmtypes("node_local",230,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_created")=230
- Set gtmtypes("node_local",231,"name")="node_local.statsdb_fname_len"
- Set gtmtypes("node_local",231,"off")=121488
+ Set gtmtypes("node_local",230,"type")="unsigned-int"
+ Set gtmtypfldindx("node_local","statsdb_fname_len")=230
+ Set gtmtypes("node_local",231,"name")="node_local.statsdb_rundown_clean"
+ Set gtmtypes("node_local",231,"off")=113308
Set gtmtypes("node_local",231,"len")=4
- Set gtmtypes("node_local",231,"type")="unsigned-int"
- Set gtmtypfldindx("node_local","statsdb_fname_len")=231
- Set gtmtypes("node_local",232,"name")="node_local.statsdb_rundown_clean"
- Set gtmtypes("node_local",232,"off")=121492
- Set gtmtypes("node_local",232,"len")=4
- Set gtmtypes("node_local",232,"type")="boolean_t"
- Set gtmtypfldindx("node_local","statsdb_rundown_clean")=232
- Set gtmtypes("node_local",233,"name")="node_local.freeze_latch"
- Set gtmtypes("node_local",233,"off")=121496
+ Set gtmtypes("node_local",231,"type")="boolean_t"
+ Set gtmtypfldindx("node_local","statsdb_rundown_clean")=231
+ Set gtmtypes("node_local",232,"name")="node_local.freeze_latch"
+ Set gtmtypes("node_local",232,"off")=113312
+ Set gtmtypes("node_local",232,"len")=8
+ Set gtmtypes("node_local",232,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","freeze_latch")=232
+ Set gtmtypes("node_local",233,"name")="node_local.freeze_latch.u"
+ Set gtmtypes("node_local",233,"off")=113312
Set gtmtypes("node_local",233,"len")=8
- Set gtmtypes("node_local",233,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","freeze_latch")=233
- Set gtmtypes("node_local",234,"name")="node_local.freeze_latch.u"
- Set gtmtypes("node_local",234,"off")=121496
+ Set gtmtypes("node_local",233,"type")="union"
+ Set gtmtypfldindx("node_local","freeze_latch.u")=233
+ Set gtmtypes("node_local",234,"name")="node_local.freeze_latch.u.pid_imgcnt"
+ Set gtmtypes("node_local",234,"off")=113312
Set gtmtypes("node_local",234,"len")=8
- Set gtmtypes("node_local",234,"type")="union"
- Set gtmtypfldindx("node_local","freeze_latch.u")=234
- Set gtmtypes("node_local",235,"name")="node_local.freeze_latch.u.pid_imgcnt"
- Set gtmtypes("node_local",235,"off")=121496
+ Set gtmtypes("node_local",234,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=234
+ Set gtmtypes("node_local",235,"name")="node_local.freeze_latch.u.parts"
+ Set gtmtypes("node_local",235,"off")=113312
Set gtmtypes("node_local",235,"len")=8
- Set gtmtypes("node_local",235,"type")="uint64_t"
- Set gtmtypfldindx("node_local","freeze_latch.u.pid_imgcnt")=235
- Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u.parts"
- Set gtmtypes("node_local",236,"off")=121496
- Set gtmtypes("node_local",236,"len")=8
- Set gtmtypes("node_local",236,"type")="struct"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts")=236
- Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.parts.latch_pid"
- Set gtmtypes("node_local",237,"off")=121496
+ Set gtmtypes("node_local",235,"type")="struct"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts")=235
+ Set gtmtypes("node_local",236,"name")="node_local.freeze_latch.u.parts.latch_pid"
+ Set gtmtypes("node_local",236,"off")=113312
+ Set gtmtypes("node_local",236,"len")=4
+ Set gtmtypes("node_local",236,"type")="int"
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=236
+ Set gtmtypes("node_local",237,"name")="node_local.freeze_latch.u.parts.latch_word"
+ Set gtmtypes("node_local",237,"off")=113316
Set gtmtypes("node_local",237,"len")=4
Set gtmtypes("node_local",237,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_pid")=237
- Set gtmtypes("node_local",238,"name")="node_local.freeze_latch.u.parts.latch_word"
- Set gtmtypes("node_local",238,"off")=121500
- Set gtmtypes("node_local",238,"len")=4
- Set gtmtypes("node_local",238,"type")="int"
- Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=238
- Set gtmtypes("node_local",239,"name")="node_local.wcs_buffs_freed"
- Set gtmtypes("node_local",239,"off")=121504
+ Set gtmtypfldindx("node_local","freeze_latch.u.parts.latch_word")=237
+ Set gtmtypes("node_local",238,"name")="node_local.wcs_buffs_freed"
+ Set gtmtypes("node_local",238,"off")=113320
+ Set gtmtypes("node_local",238,"len")=8
+ Set gtmtypes("node_local",238,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","wcs_buffs_freed")=238
+ Set gtmtypes("node_local",239,"name")="node_local.dskspace_next_fire"
+ Set gtmtypes("node_local",239,"off")=113328
Set gtmtypes("node_local",239,"len")=8
Set gtmtypes("node_local",239,"type")="uint64_t"
- Set gtmtypfldindx("node_local","wcs_buffs_freed")=239
- Set gtmtypes("node_local",240,"name")="node_local.dskspace_next_fire"
- Set gtmtypes("node_local",240,"off")=121512
+ Set gtmtypfldindx("node_local","dskspace_next_fire")=239
+ Set gtmtypes("node_local",240,"name")="node_local.lock_crit"
+ Set gtmtypes("node_local",240,"off")=113336
Set gtmtypes("node_local",240,"len")=8
- Set gtmtypes("node_local",240,"type")="uint64_t"
- Set gtmtypfldindx("node_local","dskspace_next_fire")=240
- Set gtmtypes("node_local",241,"name")="node_local.lock_crit"
- Set gtmtypes("node_local",241,"off")=121520
+ Set gtmtypes("node_local",240,"type")="global_latch_t"
+ Set gtmtypfldindx("node_local","lock_crit")=240
+ Set gtmtypes("node_local",241,"name")="node_local.lock_crit.u"
+ Set gtmtypes("node_local",241,"off")=113336
Set gtmtypes("node_local",241,"len")=8
- Set gtmtypes("node_local",241,"type")="global_latch_t"
- Set gtmtypfldindx("node_local","lock_crit")=241
- Set gtmtypes("node_local",242,"name")="node_local.lock_crit.u"
- Set gtmtypes("node_local",242,"off")=121520
+ Set gtmtypes("node_local",241,"type")="union"
+ Set gtmtypfldindx("node_local","lock_crit.u")=241
+ Set gtmtypes("node_local",242,"name")="node_local.lock_crit.u.pid_imgcnt"
+ Set gtmtypes("node_local",242,"off")=113336
Set gtmtypes("node_local",242,"len")=8
- Set gtmtypes("node_local",242,"type")="union"
- Set gtmtypfldindx("node_local","lock_crit.u")=242
- Set gtmtypes("node_local",243,"name")="node_local.lock_crit.u.pid_imgcnt"
- Set gtmtypes("node_local",243,"off")=121520
+ Set gtmtypes("node_local",242,"type")="uint64_t"
+ Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=242
+ Set gtmtypes("node_local",243,"name")="node_local.lock_crit.u.parts"
+ Set gtmtypes("node_local",243,"off")=113336
Set gtmtypes("node_local",243,"len")=8
- Set gtmtypes("node_local",243,"type")="uint64_t"
- Set gtmtypfldindx("node_local","lock_crit.u.pid_imgcnt")=243
- Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u.parts"
- Set gtmtypes("node_local",244,"off")=121520
- Set gtmtypes("node_local",244,"len")=8
- Set gtmtypes("node_local",244,"type")="struct"
- Set gtmtypfldindx("node_local","lock_crit.u.parts")=244
- Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.parts.latch_pid"
- Set gtmtypes("node_local",245,"off")=121520
+ Set gtmtypes("node_local",243,"type")="struct"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts")=243
+ Set gtmtypes("node_local",244,"name")="node_local.lock_crit.u.parts.latch_pid"
+ Set gtmtypes("node_local",244,"off")=113336
+ Set gtmtypes("node_local",244,"len")=4
+ Set gtmtypes("node_local",244,"type")="int"
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=244
+ Set gtmtypes("node_local",245,"name")="node_local.lock_crit.u.parts.latch_word"
+ Set gtmtypes("node_local",245,"off")=113340
Set gtmtypes("node_local",245,"len")=4
Set gtmtypes("node_local",245,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_pid")=245
- Set gtmtypes("node_local",246,"name")="node_local.lock_crit.u.parts.latch_word"
- Set gtmtypes("node_local",246,"off")=121524
+ Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=245
+ Set gtmtypes("node_local",246,"name")="node_local.tp_hint"
+ Set gtmtypes("node_local",246,"off")=113344
Set gtmtypes("node_local",246,"len")=4
Set gtmtypes("node_local",246,"type")="int"
- Set gtmtypfldindx("node_local","lock_crit.u.parts.latch_word")=246
- Set gtmtypes("node_local",247,"name")="node_local.tp_hint"
- Set gtmtypes("node_local",247,"off")=121528
+ Set gtmtypfldindx("node_local","tp_hint")=246
+ Set gtmtypes("node_local",247,"name")="node_local.filler_8byte_align3"
+ Set gtmtypes("node_local",247,"off")=113348
Set gtmtypes("node_local",247,"len")=4
Set gtmtypes("node_local",247,"type")="int"
- Set gtmtypfldindx("node_local","tp_hint")=247
- Set gtmtypes("node_local",248,"name")="node_local.filler_8byte_align6"
- Set gtmtypes("node_local",248,"off")=121532
- Set gtmtypes("node_local",248,"len")=4
- Set gtmtypes("node_local",248,"type")="int"
- Set gtmtypfldindx("node_local","filler_8byte_align6")=248
+ Set gtmtypfldindx("node_local","filler_8byte_align3")=247
;
Set gtmtypes("noisolation_element")="struct"
Set gtmtypes("noisolation_element",0)=2
@@ -27212,8 +27288,8 @@ Init
Set gtmtypfldindx("sgmm_addrs","filler")=1
;
Set gtmtypes("sgmnt_addrs")="struct"
- Set gtmtypes("sgmnt_addrs",0)=152
- Set gtmtypes("sgmnt_addrs","len")=992
+ Set gtmtypes("sgmnt_addrs",0)=155
+ Set gtmtypes("sgmnt_addrs","len")=1016
Set gtmtypes("sgmnt_addrs",1,"name")="sgmnt_addrs.hdr"
Set gtmtypes("sgmnt_addrs",1,"off")=0
Set gtmtypes("sgmnt_addrs",1,"len")=8
@@ -27976,9 +28052,24 @@ Init
Set gtmtypes("sgmnt_addrs",152,"len")=4
Set gtmtypes("sgmnt_addrs",152,"type")="boolean_t"
Set gtmtypfldindx("sgmnt_addrs","statsDB_setup_completed")=152
+ Set gtmtypes("sgmnt_addrs",153,"name")="sgmnt_addrs.gd_instinfo"
+ Set gtmtypes("sgmnt_addrs",153,"off")=992
+ Set gtmtypes("sgmnt_addrs",153,"len")=8
+ Set gtmtypes("sgmnt_addrs",153,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_instinfo")=153
+ Set gtmtypes("sgmnt_addrs",154,"name")="sgmnt_addrs.gd_ptr"
+ Set gtmtypes("sgmnt_addrs",154,"off")=1000
+ Set gtmtypes("sgmnt_addrs",154,"len")=8
+ Set gtmtypes("sgmnt_addrs",154,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","gd_ptr")=154
+ Set gtmtypes("sgmnt_addrs",155,"name")="sgmnt_addrs.jnlpool"
+ Set gtmtypes("sgmnt_addrs",155,"off")=1008
+ Set gtmtypes("sgmnt_addrs",155,"len")=8
+ Set gtmtypes("sgmnt_addrs",155,"type")="addr"
+ Set gtmtypfldindx("sgmnt_addrs","jnlpool")=155
;
Set gtmtypes("sgmnt_data")="struct"
- Set gtmtypes("sgmnt_data",0)=592
+ Set gtmtypes("sgmnt_data",0)=593
Set gtmtypes("sgmnt_data","len")=8192
Set gtmtypes("sgmnt_data",1,"name")="sgmnt_data.label"
Set gtmtypes("sgmnt_data",1,"off")=0
@@ -28235,11 +28326,11 @@ Init
Set gtmtypes("sgmnt_data",51,"len")=4
Set gtmtypes("sgmnt_data",51,"type")="int"
Set gtmtypfldindx("sgmnt_data","abandoned_kills")=51
- Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.freeze_online"
+ Set gtmtypes("sgmnt_data",52,"name")="sgmnt_data.unused_freeze_online_filler"
Set gtmtypes("sgmnt_data",52,"off")=312
Set gtmtypes("sgmnt_data",52,"len")=4
Set gtmtypes("sgmnt_data",52,"type")="unsigned-int"
- Set gtmtypfldindx("sgmnt_data","freeze_online")=52
+ Set gtmtypfldindx("sgmnt_data","unused_freeze_online_filler")=52
Set gtmtypes("sgmnt_data",53,"name")="sgmnt_data.filler_320"
Set gtmtypes("sgmnt_data",53,"off")=316
Set gtmtypes("sgmnt_data",53,"len")=4
@@ -30946,16 +31037,21 @@ Init
Set gtmtypes("sgmnt_data",590,"len")=256
Set gtmtypes("sgmnt_data",590,"type")="unsigned-char"
Set gtmtypfldindx("sgmnt_data","basedb_fname")=590
- Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",591,"name")="sgmnt_data.read_only"
Set gtmtypes("sgmnt_data",591,"off")=6724
- Set gtmtypes("sgmnt_data",591,"len")=444
- Set gtmtypes("sgmnt_data",591,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_7k")=591
- Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_8k"
- Set gtmtypes("sgmnt_data",592,"off")=7168
- Set gtmtypes("sgmnt_data",592,"len")=1024
+ Set gtmtypes("sgmnt_data",591,"len")=4
+ Set gtmtypes("sgmnt_data",591,"type")="boolean_t"
+ Set gtmtypfldindx("sgmnt_data","read_only")=591
+ Set gtmtypes("sgmnt_data",592,"name")="sgmnt_data.filler_7k"
+ Set gtmtypes("sgmnt_data",592,"off")=6728
+ Set gtmtypes("sgmnt_data",592,"len")=440
Set gtmtypes("sgmnt_data",592,"type")="char"
- Set gtmtypfldindx("sgmnt_data","filler_8k")=592
+ Set gtmtypfldindx("sgmnt_data","filler_7k")=592
+ Set gtmtypes("sgmnt_data",593,"name")="sgmnt_data.filler_8k"
+ Set gtmtypes("sgmnt_data",593,"off")=7168
+ Set gtmtypes("sgmnt_data",593,"len")=1024
+ Set gtmtypes("sgmnt_data",593,"type")="char"
+ Set gtmtypfldindx("sgmnt_data","filler_8k")=593
;
Set gtmtypes("shm_forw_multi_t")="struct"
Set gtmtypes("shm_forw_multi_t",0)=20
@@ -31132,7 +31228,7 @@ Init
Set gtmtypes("shm_reg_ctl_t",9,"dim")=3
;
Set gtmtypes("shm_snapshot_t")="struct"
- Set gtmtypes("shm_snapshot_t",0)=614
+ Set gtmtypes("shm_snapshot_t",0)=615
Set gtmtypes("shm_snapshot_t","len")=12376
Set gtmtypes("shm_snapshot_t",1,"name")="shm_snapshot_t.ss_info"
Set gtmtypes("shm_snapshot_t",1,"off")=0
@@ -31499,11 +31595,11 @@ Init
Set gtmtypes("shm_snapshot_t",73,"len")=4
Set gtmtypes("shm_snapshot_t",73,"type")="int"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.abandoned_kills")=73
- Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.freeze_online"
+ Set gtmtypes("shm_snapshot_t",74,"name")="shm_snapshot_t.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shm_snapshot_t",74,"off")=4496
Set gtmtypes("shm_snapshot_t",74,"len")=4
Set gtmtypes("shm_snapshot_t",74,"type")="unsigned-int"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.freeze_online")=74
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.unused_freeze_online_filler")=74
Set gtmtypes("shm_snapshot_t",75,"name")="shm_snapshot_t.shadow_file_header.filler_320"
Set gtmtypes("shm_snapshot_t",75,"off")=4500
Set gtmtypes("shm_snapshot_t",75,"len")=4
@@ -34210,16 +34306,21 @@ Init
Set gtmtypes("shm_snapshot_t",612,"len")=256
Set gtmtypes("shm_snapshot_t",612,"type")="unsigned-char"
Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.basedb_fname")=612
- Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",613,"name")="shm_snapshot_t.shadow_file_header.read_only"
Set gtmtypes("shm_snapshot_t",613,"off")=10908
- Set gtmtypes("shm_snapshot_t",613,"len")=444
- Set gtmtypes("shm_snapshot_t",613,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=613
- Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
- Set gtmtypes("shm_snapshot_t",614,"off")=11352
- Set gtmtypes("shm_snapshot_t",614,"len")=1024
+ Set gtmtypes("shm_snapshot_t",613,"len")=4
+ Set gtmtypes("shm_snapshot_t",613,"type")="boolean_t"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.read_only")=613
+ Set gtmtypes("shm_snapshot_t",614,"name")="shm_snapshot_t.shadow_file_header.filler_7k"
+ Set gtmtypes("shm_snapshot_t",614,"off")=10912
+ Set gtmtypes("shm_snapshot_t",614,"len")=440
Set gtmtypes("shm_snapshot_t",614,"type")="char"
- Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=614
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_7k")=614
+ Set gtmtypes("shm_snapshot_t",615,"name")="shm_snapshot_t.shadow_file_header.filler_8k"
+ Set gtmtypes("shm_snapshot_t",615,"off")=11352
+ Set gtmtypes("shm_snapshot_t",615,"len")=1024
+ Set gtmtypes("shm_snapshot_t",615,"type")="char"
+ Set gtmtypfldindx("shm_snapshot_t","shadow_file_header.filler_8k")=615
;
Set gtmtypes("shmpool_blk_hdr")="struct"
Set gtmtypes("shmpool_blk_hdr",0)=11
@@ -34281,7 +34382,7 @@ Init
Set gtmtypfldindx("shmpool_blk_hdr","image_count")=11
;
Set gtmtypes("shmpool_buff_hdr")="struct"
- Set gtmtypes("shmpool_buff_hdr",0)=621
+ Set gtmtypes("shmpool_buff_hdr",0)=622
Set gtmtypes("shmpool_buff_hdr","len")=8560
Set gtmtypes("shmpool_buff_hdr",1,"name")="shmpool_buff_hdr.shmpool_crit_latch"
Set gtmtypes("shmpool_buff_hdr",1,"off")=0
@@ -34683,11 +34784,11 @@ Init
Set gtmtypes("shmpool_buff_hdr",80,"len")=4
Set gtmtypes("shmpool_buff_hdr",80,"type")="int"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.abandoned_kills")=80
- Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.freeze_online"
+ Set gtmtypes("shmpool_buff_hdr",81,"name")="shmpool_buff_hdr.shadow_file_header.unused_freeze_online_filler"
Set gtmtypes("shmpool_buff_hdr",81,"off")=680
Set gtmtypes("shmpool_buff_hdr",81,"len")=4
Set gtmtypes("shmpool_buff_hdr",81,"type")="unsigned-int"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.freeze_online")=81
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.unused_freeze_online_filler")=81
Set gtmtypes("shmpool_buff_hdr",82,"name")="shmpool_buff_hdr.shadow_file_header.filler_320"
Set gtmtypes("shmpool_buff_hdr",82,"off")=684
Set gtmtypes("shmpool_buff_hdr",82,"len")=4
@@ -37394,16 +37495,21 @@ Init
Set gtmtypes("shmpool_buff_hdr",619,"len")=256
Set gtmtypes("shmpool_buff_hdr",619,"type")="unsigned-char"
Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.basedb_fname")=619
- Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",620,"name")="shmpool_buff_hdr.shadow_file_header.read_only"
Set gtmtypes("shmpool_buff_hdr",620,"off")=7092
- Set gtmtypes("shmpool_buff_hdr",620,"len")=444
- Set gtmtypes("shmpool_buff_hdr",620,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=620
- Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
- Set gtmtypes("shmpool_buff_hdr",621,"off")=7536
- Set gtmtypes("shmpool_buff_hdr",621,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",620,"len")=4
+ Set gtmtypes("shmpool_buff_hdr",620,"type")="boolean_t"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.read_only")=620
+ Set gtmtypes("shmpool_buff_hdr",621,"name")="shmpool_buff_hdr.shadow_file_header.filler_7k"
+ Set gtmtypes("shmpool_buff_hdr",621,"off")=7096
+ Set gtmtypes("shmpool_buff_hdr",621,"len")=440
Set gtmtypes("shmpool_buff_hdr",621,"type")="char"
- Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=621
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_7k")=621
+ Set gtmtypes("shmpool_buff_hdr",622,"name")="shmpool_buff_hdr.shadow_file_header.filler_8k"
+ Set gtmtypes("shmpool_buff_hdr",622,"off")=7536
+ Set gtmtypes("shmpool_buff_hdr",622,"len")=1024
+ Set gtmtypes("shmpool_buff_hdr",622,"type")="char"
+ Set gtmtypfldindx("shmpool_buff_hdr","shadow_file_header.filler_8k")=622
;
Set gtmtypes("show_reply")="struct"
Set gtmtypes("show_reply",0)=2
@@ -41165,11 +41271,11 @@ Init
Set gtmtypfldindx("unique_file_id","file_id")=5
;
Set gtmtypes("unix_db_info")="struct"
- Set gtmtypes("unix_db_info",0)=168
- Set gtmtypes("unix_db_info","len")=1096
+ Set gtmtypes("unix_db_info",0)=171
+ Set gtmtypes("unix_db_info","len")=1120
Set gtmtypes("unix_db_info",1,"name")="unix_db_info.s_addrs"
Set gtmtypes("unix_db_info",1,"off")=0
- Set gtmtypes("unix_db_info",1,"len")=992
+ Set gtmtypes("unix_db_info",1,"len")=1016
Set gtmtypes("unix_db_info",1,"type")="sgmnt_addrs"
Set gtmtypfldindx("unix_db_info","s_addrs")=1
Set gtmtypes("unix_db_info",2,"name")="unix_db_info.s_addrs.hdr"
@@ -41934,81 +42040,96 @@ Init
Set gtmtypes("unix_db_info",153,"len")=4
Set gtmtypes("unix_db_info",153,"type")="boolean_t"
Set gtmtypfldindx("unix_db_info","s_addrs.statsDB_setup_completed")=153
- Set gtmtypes("unix_db_info",154,"name")="unix_db_info.fn"
+ Set gtmtypes("unix_db_info",154,"name")="unix_db_info.s_addrs.gd_instinfo"
Set gtmtypes("unix_db_info",154,"off")=992
Set gtmtypes("unix_db_info",154,"len")=8
Set gtmtypes("unix_db_info",154,"type")="addr"
- Set gtmtypfldindx("unix_db_info","fn")=154
- Set gtmtypes("unix_db_info",155,"name")="unix_db_info.fd"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_instinfo")=154
+ Set gtmtypes("unix_db_info",155,"name")="unix_db_info.s_addrs.gd_ptr"
Set gtmtypes("unix_db_info",155,"off")=1000
- Set gtmtypes("unix_db_info",155,"len")=4
- Set gtmtypes("unix_db_info",155,"type")="int"
- Set gtmtypfldindx("unix_db_info","fd")=155
- Set gtmtypes("unix_db_info",156,"name")="unix_db_info.owning_gd"
+ Set gtmtypes("unix_db_info",155,"len")=8
+ Set gtmtypes("unix_db_info",155,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","s_addrs.gd_ptr")=155
+ Set gtmtypes("unix_db_info",156,"name")="unix_db_info.s_addrs.jnlpool"
Set gtmtypes("unix_db_info",156,"off")=1008
Set gtmtypes("unix_db_info",156,"len")=8
Set gtmtypes("unix_db_info",156,"type")="addr"
- Set gtmtypfldindx("unix_db_info","owning_gd")=156
- Set gtmtypes("unix_db_info",157,"name")="unix_db_info.fileid"
+ Set gtmtypfldindx("unix_db_info","s_addrs.jnlpool")=156
+ Set gtmtypes("unix_db_info",157,"name")="unix_db_info.fn"
Set gtmtypes("unix_db_info",157,"off")=1016
- Set gtmtypes("unix_db_info",157,"len")=24
- Set gtmtypes("unix_db_info",157,"type")="unix_file_id"
- Set gtmtypfldindx("unix_db_info","fileid")=157
- Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fileid.inode"
- Set gtmtypes("unix_db_info",158,"off")=1016
- Set gtmtypes("unix_db_info",158,"len")=8
- Set gtmtypes("unix_db_info",158,"type")="ino_t"
- Set gtmtypfldindx("unix_db_info","fileid.inode")=158
- Set gtmtypes("unix_db_info",159,"name")="unix_db_info.fileid.device"
- Set gtmtypes("unix_db_info",159,"off")=1024
+ Set gtmtypes("unix_db_info",157,"len")=8
+ Set gtmtypes("unix_db_info",157,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","fn")=157
+ Set gtmtypes("unix_db_info",158,"name")="unix_db_info.fd"
+ Set gtmtypes("unix_db_info",158,"off")=1024
+ Set gtmtypes("unix_db_info",158,"len")=4
+ Set gtmtypes("unix_db_info",158,"type")="int"
+ Set gtmtypfldindx("unix_db_info","fd")=158
+ Set gtmtypes("unix_db_info",159,"name")="unix_db_info.owning_gd"
+ Set gtmtypes("unix_db_info",159,"off")=1032
Set gtmtypes("unix_db_info",159,"len")=8
- Set gtmtypes("unix_db_info",159,"type")="dev_t"
- Set gtmtypfldindx("unix_db_info","fileid.device")=159
- Set gtmtypes("unix_db_info",160,"name")="unix_db_info.fileid.st_gen"
- Set gtmtypes("unix_db_info",160,"off")=1032
- Set gtmtypes("unix_db_info",160,"len")=4
- Set gtmtypes("unix_db_info",160,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","fileid.st_gen")=160
- Set gtmtypes("unix_db_info",161,"name")="unix_db_info.semid"
+ Set gtmtypes("unix_db_info",159,"type")="addr"
+ Set gtmtypfldindx("unix_db_info","owning_gd")=159
+ Set gtmtypes("unix_db_info",160,"name")="unix_db_info.fileid"
+ Set gtmtypes("unix_db_info",160,"off")=1040
+ Set gtmtypes("unix_db_info",160,"len")=24
+ Set gtmtypes("unix_db_info",160,"type")="unix_file_id"
+ Set gtmtypfldindx("unix_db_info","fileid")=160
+ Set gtmtypes("unix_db_info",161,"name")="unix_db_info.fileid.inode"
Set gtmtypes("unix_db_info",161,"off")=1040
- Set gtmtypes("unix_db_info",161,"len")=4
- Set gtmtypes("unix_db_info",161,"type")="int"
- Set gtmtypfldindx("unix_db_info","semid")=161
- Set gtmtypes("unix_db_info",162,"name")="unix_db_info.gt_sem_ctime"
+ Set gtmtypes("unix_db_info",161,"len")=8
+ Set gtmtypes("unix_db_info",161,"type")="ino_t"
+ Set gtmtypfldindx("unix_db_info","fileid.inode")=161
+ Set gtmtypes("unix_db_info",162,"name")="unix_db_info.fileid.device"
Set gtmtypes("unix_db_info",162,"off")=1048
Set gtmtypes("unix_db_info",162,"len")=8
- Set gtmtypes("unix_db_info",162,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=162
- Set gtmtypes("unix_db_info",163,"name")="unix_db_info.shmid"
+ Set gtmtypes("unix_db_info",162,"type")="dev_t"
+ Set gtmtypfldindx("unix_db_info","fileid.device")=162
+ Set gtmtypes("unix_db_info",163,"name")="unix_db_info.fileid.st_gen"
Set gtmtypes("unix_db_info",163,"off")=1056
Set gtmtypes("unix_db_info",163,"len")=4
- Set gtmtypes("unix_db_info",163,"type")="int"
- Set gtmtypfldindx("unix_db_info","shmid")=163
- Set gtmtypes("unix_db_info",164,"name")="unix_db_info.gt_shm_ctime"
+ Set gtmtypes("unix_db_info",163,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","fileid.st_gen")=163
+ Set gtmtypes("unix_db_info",164,"name")="unix_db_info.semid"
Set gtmtypes("unix_db_info",164,"off")=1064
- Set gtmtypes("unix_db_info",164,"len")=8
- Set gtmtypes("unix_db_info",164,"type")="time_t"
- Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=164
- Set gtmtypes("unix_db_info",165,"name")="unix_db_info.ftok_semid"
+ Set gtmtypes("unix_db_info",164,"len")=4
+ Set gtmtypes("unix_db_info",164,"type")="int"
+ Set gtmtypfldindx("unix_db_info","semid")=164
+ Set gtmtypes("unix_db_info",165,"name")="unix_db_info.gt_sem_ctime"
Set gtmtypes("unix_db_info",165,"off")=1072
- Set gtmtypes("unix_db_info",165,"len")=4
- Set gtmtypes("unix_db_info",165,"type")="int"
- Set gtmtypfldindx("unix_db_info","ftok_semid")=165
- Set gtmtypes("unix_db_info",166,"name")="unix_db_info.key"
- Set gtmtypes("unix_db_info",166,"off")=1076
+ Set gtmtypes("unix_db_info",165,"len")=8
+ Set gtmtypes("unix_db_info",165,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_sem_ctime")=165
+ Set gtmtypes("unix_db_info",166,"name")="unix_db_info.shmid"
+ Set gtmtypes("unix_db_info",166,"off")=1080
Set gtmtypes("unix_db_info",166,"len")=4
- Set gtmtypes("unix_db_info",166,"type")="key_t"
- Set gtmtypfldindx("unix_db_info","key")=166
- Set gtmtypes("unix_db_info",167,"name")="unix_db_info.raw"
- Set gtmtypes("unix_db_info",167,"off")=1080
- Set gtmtypes("unix_db_info",167,"len")=4
- Set gtmtypes("unix_db_info",167,"type")="boolean_t"
- Set gtmtypfldindx("unix_db_info","raw")=167
- Set gtmtypes("unix_db_info",168,"name")="unix_db_info.db_fs_block_size"
- Set gtmtypes("unix_db_info",168,"off")=1084
+ Set gtmtypes("unix_db_info",166,"type")="int"
+ Set gtmtypfldindx("unix_db_info","shmid")=166
+ Set gtmtypes("unix_db_info",167,"name")="unix_db_info.gt_shm_ctime"
+ Set gtmtypes("unix_db_info",167,"off")=1088
+ Set gtmtypes("unix_db_info",167,"len")=8
+ Set gtmtypes("unix_db_info",167,"type")="time_t"
+ Set gtmtypfldindx("unix_db_info","gt_shm_ctime")=167
+ Set gtmtypes("unix_db_info",168,"name")="unix_db_info.ftok_semid"
+ Set gtmtypes("unix_db_info",168,"off")=1096
Set gtmtypes("unix_db_info",168,"len")=4
- Set gtmtypes("unix_db_info",168,"type")="unsigned-int"
- Set gtmtypfldindx("unix_db_info","db_fs_block_size")=168
+ Set gtmtypes("unix_db_info",168,"type")="int"
+ Set gtmtypfldindx("unix_db_info","ftok_semid")=168
+ Set gtmtypes("unix_db_info",169,"name")="unix_db_info.key"
+ Set gtmtypes("unix_db_info",169,"off")=1100
+ Set gtmtypes("unix_db_info",169,"len")=4
+ Set gtmtypes("unix_db_info",169,"type")="key_t"
+ Set gtmtypfldindx("unix_db_info","key")=169
+ Set gtmtypes("unix_db_info",170,"name")="unix_db_info.raw"
+ Set gtmtypes("unix_db_info",170,"off")=1104
+ Set gtmtypes("unix_db_info",170,"len")=4
+ Set gtmtypes("unix_db_info",170,"type")="boolean_t"
+ Set gtmtypfldindx("unix_db_info","raw")=170
+ Set gtmtypes("unix_db_info",171,"name")="unix_db_info.db_fs_block_size"
+ Set gtmtypes("unix_db_info",171,"off")=1108
+ Set gtmtypes("unix_db_info",171,"len")=4
+ Set gtmtypes("unix_db_info",171,"type")="unsigned-int"
+ Set gtmtypfldindx("unix_db_info","db_fs_block_size")=171
;
Set gtmtypes("unix_file_id")="struct"
Set gtmtypes("unix_file_id",0)=3
@@ -43246,6 +43367,7 @@ Init
Set gtmstructs("gd_binding_struct")="gd_binding"
Set gtmstructs("gd_gblname_struct")="gd_gblname"
Set gtmstructs("gd_id_struct")="unix_file_id"
+ Set gtmstructs("gd_inst_info_struct")="gd_inst_info"
Set gtmstructs("gd_region_struct")="gd_region"
Set gtmstructs("gd_segment_struct")="gd_segment"
Set gtmstructs("gdr_name_struct")="gdr_name"
@@ -43297,6 +43419,7 @@ Init
Set gtmstructs("jnl_private_control_struct")="jnl_private_control"
Set gtmstructs("jnl_process_vector_struct")="jnl_process_vector"
Set gtmstructs("jnlext_multi_struct")="jnlext_multi_t"
+ Set gtmstructs("jnlpool_addrs_struct")="jnlpool_addrs"
Set gtmstructs("job_parm_struct")="job_parm"
Set gtmstructs("joberr_msg_struct")="joberr_msg"
Set gtmstructs("key_value_struct")="key_cum_value"
diff --git a/sr_x86_64/cmerrors_ctl.c b/sr_x86_64/cmerrors_ctl.c
index 3d09df6..11fb5d8 100644
--- a/sr_x86_64/cmerrors_ctl.c
+++ b/sr_x86_64/cmerrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
diff --git a/sr_x86_64/cmierrors_ctl.c b/sr_x86_64/cmierrors_ctl.c
index 4ff26bf..75c8f04 100644
--- a/sr_x86_64/cmierrors_ctl.c
+++ b/sr_x86_64/cmierrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
diff --git a/sr_x86_64/gdeerrors_ctl.c b/sr_x86_64/gdeerrors_ctl.c
index a7a8ef2..eed1b5f 100644
--- a/sr_x86_64/gdeerrors_ctl.c
+++ b/sr_x86_64/gdeerrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -73,7 +73,7 @@ LITDEF err_msg gdeerrors[] = {
{ "KEYFORBLK", "But block size !AD and reserved bytes !AD limit key size to !AD", 6 },
{ "STRMISSQUOTE", "Missing double-quote at end of string specification !AD", 2 },
{ "GBLNAMEIS", "in gblname !AD", 2 },
- { "NAMSUBSEMPTY", "Subscript #!UL is empty in name specification", 3 },
+ { "NAMSUBSEMPTY", "Subscript #!UL is empty in name specification", 1 },
{ "NAMSUBSBAD", "Subscript #!UL with value !AD in name specification is an invalid number or string", 3 },
{ "NAMNUMSUBSOFLOW", "Subscript #!UL with value !AD in name specification has a numeric overflow", 3 },
{ "NAMNUMSUBNOTEXACT", "Subscript #!UL with value !AD in name specification is not an exact GT.M number", 3 },
@@ -94,7 +94,7 @@ LITDEF err_msg gdeerrors[] = {
{ "NAMRANGEORDER", "Range in name specification !AD specifies out-of-order subscripts using collation sequence #!UL", 3 },
{ "NAMRANGEOVERLAP", "Range in name specifications !AD and !AD overlap using collation sequence #!UL", 5 },
{ "NAMGVSUBOFLOW", "Subscripted name !AD...!AD is too long to represent in the database using collation value #!UL", 5 },
- { "GBLNAMCOLLRANGE", "Collation sequence #!UL is out of range (0 thru 255)", 3 },
+ { "GBLNAMCOLLRANGE", "Collation sequence #!UL is out of range (0 thru 255)", 1 },
{ "STDNULLCOLLREQ", "Region !AD needs Standard Null Collation enabled because global !AD spans through it", 4 },
{ "GBLNAMCOLLVER", "Global directory indicates GBLNAME !AD has collation sequence #!UL with a version #!UL but shared library reports different version #!UL", 5 },
{ "GDEASYNCIONOMM", "!AD segment has ASYNCIO turned on. Cannot support MM access method.", 2 },
diff --git a/sr_x86_64/merrors_ansi.h b/sr_x86_64/merrors_ansi.h
index 9b6ba07..204c51d 100644
--- a/sr_x86_64/merrors_ansi.h
+++ b/sr_x86_64/merrors_ansi.h
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -1148,7 +1148,7 @@ const static readonly int error_ansi[] = {
0, /* CRYPTDLNOOPEN */
0, /* CRYPTNOV4 */
0, /* CRYPTNOMM */
- 0, /* UNUSEDMSG1319 */
+ 0, /* READONLYNOBG */
0, /* CRYPTKEYFETCHFAILED */
0, /* CRYPTKEYFETCHFAILEDNF */
0, /* CRYPTHASHGENFAILED */
@@ -1206,7 +1206,7 @@ const static readonly int error_ansi[] = {
0, /* MUUSERLBK */
0, /* SETINSETTRIGONLY */
0, /* DZTRIGINTRIG */
- 0, /* UNUSEDMSG1377 */
+ 0, /* LSINSERTED */
0, /* BOOLSIDEFFECT */
0, /* DBBADUPGRDSTATE */
0, /* WRITEWAITPID */
@@ -1218,7 +1218,7 @@ const static readonly int error_ansi[] = {
0, /* JNLORDBFLU */
0, /* ZCCLNUPRTNMISNG */
0, /* ZCINVALIDKEYWORD */
- 0, /* UNUSEDMSG1389 */
+ 0, /* REPLMULTINSTUPDATE */
0, /* DBSHMNAMEDIFF */
0, /* SHMREMOVED */
0, /* DEVICEWRITEONLY */
@@ -1498,4 +1498,8 @@ const static readonly int error_ansi[] = {
0, /* JNLBUFFPHS2SALVAGE */
0, /* JNLPOOLPHS2SALVAGE */
0, /* MURNDWNARGLESS */
+ 0, /* DBFREEZEON */
+ 0, /* DBFREEZEOFF */
+ 0, /* STPCRIT */
+ 0, /* STPOFLOW */
};
diff --git a/sr_x86_64/merrors_ctl.c b/sr_x86_64/merrors_ctl.c
index e9fb7da..74a9179 100644
--- a/sr_x86_64/merrors_ctl.c
+++ b/sr_x86_64/merrors_ctl.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -155,7 +155,7 @@ LITDEF err_msg merrors[] = {
{ "NOTPRINCIO", "Output currently directed to device !AD", 2 },
{ "NOTTOEOFONPUT", "Not positioned to EOF on write (sequential organization only)", 0 },
{ "NOZBRK", "No zbreak at that location", 0 },
- { "NULSUBSC", "Null subscripts are not allowed for region: !AD", 2 },
+ { "NULSUBSC", "!AD Null subscripts are not allowed for current region", 2 },
{ "NUMOFLOW", "Numeric overflow", 0 },
{ "PARFILSPC", "Parameter: !AD file specification: !AD", 4 },
{ "PATCLASS", "Illegal character class for pattern code", 0 },
@@ -584,7 +584,7 @@ LITDEF err_msg merrors[] = {
{ "MUTEXERR", "Mutual Exclusion subsystem failure", 0 },
{ "JNLVSIZE", "Journal File !AD has incorrect virtual_filesize !UL. Allocation : !UL, Extension : !UL, Filesize : !UL, File system block size : !UL", 7 },
{ "MUTEXLCKALERT", "Mutual Exclusion subsystem ALERT - lock attempt threshold crossed for region !AD. Process !UL is in crit cycle !UL.", 4 },
- { "MUTEXFRCDTERM", "Mutual Exclusion subsystem detected forced termination of process !UL. Crit salvaged from region !AD.", 3 },
+ { "MUTEXFRCDTERM", "Mutual Exclusion subsystem detected forced termination of process !UL. Crit salvaged from database file !AD.", 3 },
{ "GTMSECSHR", "!UL : Error during gtmsecshr operation", 1 },
{ "GTMSECSHRSRVFID", "!AD: !UL - Attempt to service request failed.!/ client id: !UL, mesg type: !UL, mesg data: !UL", 6 },
{ "GTMSECSHRSRVFIL", "!AD: !UL - Attempt to service request failed.!/ client id: !UL, mesg type: !UL!/file: !AD", 7 },
@@ -1150,7 +1150,7 @@ LITDEF err_msg merrors[] = {
{ "CRYPTDLNOOPEN", "Could not load encryption library while opening encrypted file !AD. !AD", 4 },
{ "CRYPTNOV4", "!AD is an encrypted database. Cannot downgrade(to V4) with Encryption option enabled.", 2 },
{ "CRYPTNOMM", "!AD is an encrypted database. Cannot support MM access method.", 2 },
- { "UNUSEDMSG1319", "Last used in V6.2-002A", 0 },
+ { "READONLYNOBG", "Read-only cannot be enabled on non-MM databases", 0 },
{ "CRYPTKEYFETCHFAILED", "Could not retrieve encryption key corresponding to file !AD. !AD", 4 },
{ "CRYPTKEYFETCHFAILEDNF", "Could not retrieve encryption key during !AD operation key. !AD", 4 },
{ "CRYPTHASHGENFAILED", "Could not generate cryptographic hash for symmetric key corresponding to file !AD. !AD", 4 },
@@ -1191,7 +1191,7 @@ LITDEF err_msg merrors[] = {
{ "ZTRIGINVACT", "Missing or invalid parameter in position !UL given to $ZTRIGGER()", 1 },
{ "INDRCOMPFAIL", "Compilation of indirection failed", 0 },
{ "QUITALSINV", "QUIT * return when the extrinsic was not invoked with SET *", 0 },
- { "PROCTERM", "!AD process termination due to !AD (return code !UL) from !AD", 7 },
+ { "PROCTERM", "!AD process termination due to !AZ (return code !UL) from !AD", 6 },
{ "SRCLNNTDSP", "Source lines exceeding !UL character width are not displayed", 1 },
{ "ARROWNTDSP", "Unable to display ^----- due to length of source line", 0 },
{ "TRIGDEFBAD", "Trigger initialization failed for global ^!AD. Error while processing ^#t(\"!AD\",!AD)", 6 },
@@ -1208,7 +1208,7 @@ LITDEF err_msg merrors[] = {
{ "MUUSERLBK", "Abnormal shutdown of replication-enabled database !AD detected", 2 },
{ "SETINSETTRIGONLY", "ISV !AD can only be modified in a 'SET' type trigger", 2 },
{ "DZTRIGINTRIG", "$ZTRIGGER() is not allowed inside trigger context. Trigger name: !AD", 2 },
- { "UNUSEDMSG1377", "SECNODZTRIGINTP : Last used in V6.2-000", 0 },
+ { "LSINSERTED", "Line !UL, source module !AD exceeds maximum source line length; line seperator inserted, terminating scope of any prior IF, ELSE, or FOR", 3 },
{ "BOOLSIDEFFECT", "Extrinsic ($$), External call ($&) or $INCREMENT() with potential side effects in Boolean expression", 0 },
{ "DBBADUPGRDSTATE", "Correcting conflicting values for fields describing database version upgrade state in the file header for region !AD (!AD) - make fresh backups with new journal files immediately.", 4 },
{ "WRITEWAITPID", "PID !UL waited !UL minute(s) for PID !UL to finish writing block 0x!XL in database file !AD", 6 },
@@ -1220,7 +1220,7 @@ LITDEF err_msg merrors[] = {
{ "JNLORDBFLU", "Error flushing database blocks to !AD. See related messages in the operator log", 2 },
{ "ZCCLNUPRTNMISNG", "External call: Cleanup routine name missing. Cannot continue", 0 },
{ "ZCINVALIDKEYWORD", "External call: Invalid keyword found. Cannot continue", 0 },
- { "UNUSEDMSG1389", "REPLNOMULTILINETRG : Last used in V6.2-000", 0 },
+ { "REPLMULTINSTUPDATE", "Previous updates in the current transaction are to !AD so updates to !AD (in !AD) not allowed", 6 },
{ "DBSHMNAMEDIFF", "Database file !AD points to shared memory (id = !UL) which points to a different database file !AZ", 4 },
{ "SHMREMOVED", "Removed Shared Memory id !UL corresponding to file !AD", 3 },
{ "DEVICEWRITEONLY", "Cannot read from a write-only device", 0 },
@@ -1461,7 +1461,7 @@ LITDEF err_msg merrors[] = {
{ "DBBLKSIZEALIGN", "Database file !AD has AIO=ON and block_size=!UL which is not a multiple of filesystem block size !UL", 4 },
{ "ASYNCIONOMM", "Database file !AD!AD cannot !AD", 6 },
{ "RESYNCSEQLOW", "MUPIP JOURNAL -ROLLBACK -FORWARD -RESYNC=!@ZQ [0x!16 at XQ] requested is lower than !@ZQ [0x!16 at XQ] which is the starting sequence number of the instance", 4 },
- { "DBNULCOL", "NULL collation representation for record !UL in block !UL is !AD which differs from the database file header settings of !AD", 6 },
+ { "DBNULCOL", "!AD NULL collation representation differs from the database file header setting", 2 },
{ "UTF16ENDIAN", "The device previously set UTF-16 endianness to !AD and cannot change to !AD", 4 },
{ "OFRZACTIVE", "Region !AD has an Online Freeze", 2 },
{ "OFRZAUTOREL", "Online Freeze automatically released for region !AD", 2 },
@@ -1470,8 +1470,8 @@ LITDEF err_msg merrors[] = {
{ "OFRZNOTHELD", "Online Freeze had been automatically released for at least one region", 0 },
{ "AIOBUFSTUCK", "Waited !UL minutes for PID: !UL to finish AIO disk write of block: !UL [0x!XL] aio_error=!UL", 5 },
{ "DBDUPNULCOL", "Discarding !AD=!AD key due to duplicate null collation record", 4 },
- { "CHANGELOGINTERVAL", "!AD Server now logging to !AD with a !UL second interval", 5 },
- { "DBNONUMSUBS", "!AD key contains a numeric form of subscript in a global defined to collate all subscripts as strings", 2 },
+ { "CHANGELOGINTERVAL", "!AD Server is now logging to !AD every !UL transactions", 5 },
+ { "DBNONUMSUBS", "!AD Key contains a numeric form of subscript in a global defined to collate all subscripts as strings", 2 },
{ "AUTODBCREFAIL", "Automatic creation of database file !AD associated with region !AD failed; see associated messages for details", 4 },
{ "RNDWNSTATSDBFAIL", "Rundown of statistics database region !AD (DB !AD) failed at/in !AD with following error: !AD", 8 },
{ "STATSDBNOTSUPP", "Attempted operation is not supported on statistics database file !AD", 2 },
@@ -1500,6 +1500,10 @@ LITDEF err_msg merrors[] = {
{ "JNLBUFFPHS2SALVAGE", "Salvaged journal records from process !UL for database file !AD at transaction number [0x!16 at XQ] and journal-sequence-number/unique-token [0x!16 at XQ] with journal file starting offset [0x!XL] and length [0x!XL]", 7 },
{ "JNLPOOLPHS2SALVAGE", "Salvaged journal records from process !UL for replication instance file !AD at journal sequence number [0x!16 at XQ] with journal pool starting offset [0x!16 at XQ] and length [0x!XL]", 6 },
{ "MURNDWNARGLESS", "Argumentless MUPIP RUNDOWN started with process id !UL by userid !UL from directory !AD", 4 },
+ { "DBFREEZEON", "Region !AD is FROZEN (!AZOVERRIDE !AZONLINE !AZAUTOREL)", 5 },
+ { "DBFREEZEOFF", "Region !AD is UNFROZEN (!AZOVERRIDE !AZAUTOREL)", 4 },
+ { "STPCRIT", "String pool space critical", 0 },
+ { "STPOFLOW", "String pool space overflow", 0 },
};
LITDEF int ERR_ACK = 150372361;
@@ -1693,7 +1697,7 @@ LITDEF int ERR_UNIMPLOP = 150373858;
LITDEF int ERR_VAREXPECTED = 150373866;
LITDEF int ERR_VARRECBLKSZ = 150373874;
LITDEF int ERR_MAXARGCNT = 150373882;
-LITDEF int ERR_GTMSECSHRSEMGET = 150373890;
+LITDEF int ERR_GTMSECSHRSEMGET = 150373892;
LITDEF int ERR_VIEWARGCNT = 150373898;
LITDEF int ERR_GTMSECSHRDMNSTARTED = 150373907;
LITDEF int ERR_ZATTACHERR = 150373914;
@@ -1764,12 +1768,12 @@ LITDEF int ERR_QUITARGUSE = 150374426;
LITDEF int ERR_NAMEEXPECTED = 150374434;
LITDEF int ERR_FALLINTOFLST = 150374442;
LITDEF int ERR_NOTEXTRINSIC = 150374450;
-LITDEF int ERR_GTMSECSHRREMSEMFAIL = 150374458;
+LITDEF int ERR_GTMSECSHRREMSEMFAIL = 150374456;
LITDEF int ERR_FMLLSTMISSING = 150374466;
LITDEF int ERR_ACTLSTTOOLONG = 150374474;
LITDEF int ERR_ACTOFFSET = 150374482;
LITDEF int ERR_MAXACTARG = 150374490;
-LITDEF int ERR_GTMSECSHRREMSEM = 150374498;
+LITDEF int ERR_GTMSECSHRREMSEM = 150374499;
LITDEF int ERR_JNLTMQUAL2 = 150374506;
LITDEF int ERR_GDINVALID = 150374514;
LITDEF int ERR_ASSERT = 150374524;
@@ -1913,7 +1917,7 @@ LITDEF int ERR_LDGOQFMT = 150375618;
LITDEF int ERR_BEGINST = 150375627;
LITDEF int ERR_INVMVXSZ = 150375636;
LITDEF int ERR_JNLWRTNOWWRTR = 150375642;
-LITDEF int ERR_GTMSECSHRSHMCONCPROC = 150375650;
+LITDEF int ERR_GTMSECSHRSHMCONCPROC = 150375648;
LITDEF int ERR_JNLINVALLOC = 150375656;
LITDEF int ERR_JNLINVEXT = 150375664;
LITDEF int ERR_MUPCLIERR = 150375674;
@@ -2084,7 +2088,7 @@ LITDEF int ERR_INVCTLMNE = 150376986;
LITDEF int ERR_SOCKLISTEN = 150376994;
LITDEF int ERR_LQLENGTHNA = 150377002;
LITDEF int ERR_ADDRTOOLONG = 150377010;
-LITDEF int ERR_GTMSECSHRGETSEMFAIL = 150377018;
+LITDEF int ERR_GTMSECSHRGETSEMFAIL = 150377016;
LITDEF int ERR_CPBEYALLOC = 150377026;
LITDEF int ERR_DBRDONLY = 150377034;
LITDEF int ERR_DUPTN = 150377040;
@@ -2212,11 +2216,11 @@ LITDEF int ERR_GTMSECSHRTMOUT = 150378011;
LITDEF int ERR_GTMSECSHRRECVF = 150378018;
LITDEF int ERR_GTMSECSHRSENDF = 150378026;
LITDEF int ERR_SIZENOTVALID8 = 150378034;
-LITDEF int ERR_GTMSECSHROPCMP = 150378040;
+LITDEF int ERR_GTMSECSHROPCMP = 150378044;
LITDEF int ERR_GTMSECSHRSUIDF = 150378048;
LITDEF int ERR_GTMSECSHRSGIDF = 150378056;
LITDEF int ERR_GTMSECSHRSSIDF = 150378064;
-LITDEF int ERR_GTMSECSHRFORKF = 150378074;
+LITDEF int ERR_GTMSECSHRFORKF = 150378076;
LITDEF int ERR_DBFSYNCERR = 150378082;
LITDEF int ERR_SECONDAHEAD = 150378090;
LITDEF int ERR_SCNDDBNOUPD = 150378098;
@@ -2639,7 +2643,7 @@ LITDEF int ERR_CRYPTOPFAILED = 150381426;
LITDEF int ERR_CRYPTDLNOOPEN = 150381434;
LITDEF int ERR_CRYPTNOV4 = 150381442;
LITDEF int ERR_CRYPTNOMM = 150381450;
-LITDEF int ERR_UNUSEDMSG1319 = 150381458;
+LITDEF int ERR_READONLYNOBG = 150381458;
LITDEF int ERR_CRYPTKEYFETCHFAILED = 150381466;
LITDEF int ERR_CRYPTKEYFETCHFAILEDNF = 150381474;
LITDEF int ERR_CRYPTHASHGENFAILED = 150381482;
@@ -2697,7 +2701,7 @@ LITDEF int ERR_GVZTRIGFAIL = 150381890;
LITDEF int ERR_MUUSERLBK = 150381898;
LITDEF int ERR_SETINSETTRIGONLY = 150381906;
LITDEF int ERR_DZTRIGINTRIG = 150381914;
-LITDEF int ERR_UNUSEDMSG1377 = 150381922;
+LITDEF int ERR_LSINSERTED = 150381920;
LITDEF int ERR_BOOLSIDEFFECT = 150381928;
LITDEF int ERR_DBBADUPGRDSTATE = 150381936;
LITDEF int ERR_WRITEWAITPID = 150381946;
@@ -2709,7 +2713,7 @@ LITDEF int ERR_GTMSECSHRCHDIRF = 150381986;
LITDEF int ERR_JNLORDBFLU = 150381994;
LITDEF int ERR_ZCCLNUPRTNMISNG = 150382002;
LITDEF int ERR_ZCINVALIDKEYWORD = 150382010;
-LITDEF int ERR_UNUSEDMSG1389 = 150382018;
+LITDEF int ERR_REPLMULTINSTUPDATE = 150382018;
LITDEF int ERR_DBSHMNAMEDIFF = 150382026;
LITDEF int ERR_SHMREMOVED = 150382035;
LITDEF int ERR_DEVICEWRITEONLY = 150382042;
@@ -2804,9 +2808,9 @@ LITDEF int ERR_DBSPANCHUNKORD = 150382746;
LITDEF int ERR_DBDATAMX = 150382754;
LITDEF int ERR_DBIOERR = 150382762;
LITDEF int ERR_INITORRESUME = 150382770;
-LITDEF int ERR_GTMSECSHRNOARG0 = 150382778;
-LITDEF int ERR_GTMSECSHRISNOT = 150382786;
-LITDEF int ERR_GTMSECSHRBADDIR = 150382794;
+LITDEF int ERR_GTMSECSHRNOARG0 = 150382780;
+LITDEF int ERR_GTMSECSHRISNOT = 150382788;
+LITDEF int ERR_GTMSECSHRBADDIR = 150382796;
LITDEF int ERR_JNLBUFFREGUPD = 150382800;
LITDEF int ERR_JNLBUFFDBUPD = 150382808;
LITDEF int ERR_LOCKINCR2HIGH = 150382818;
@@ -2989,9 +2993,13 @@ LITDEF int ERR_MUCREFILERR = 150384226;
LITDEF int ERR_JNLBUFFPHS2SALVAGE = 150384235;
LITDEF int ERR_JNLPOOLPHS2SALVAGE = 150384243;
LITDEF int ERR_MURNDWNARGLESS = 150384251;
+LITDEF int ERR_DBFREEZEON = 150384259;
+LITDEF int ERR_DBFREEZEOFF = 150384267;
+LITDEF int ERR_STPCRIT = 150384274;
+LITDEF int ERR_STPOFLOW = 150384284;
GBLDEF err_ctl merrors_ctl = {
246,
"GTM",
&merrors[0],
- 1487};
+ 1491};
diff --git a/sr_x86_64/ttt.c b/sr_x86_64/ttt.c
index a52c933..eaa5cdf 100644
--- a/sr_x86_64/ttt.c
+++ b/sr_x86_64/ttt.c
@@ -1,6 +1,6 @@
/****************************************************************
* *
- * Copyright (c) 2001-2017 Fidelity National Information *
+ * Copyright (c) 2001-2018 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* This source code contains the intellectual property *
@@ -14,711 +14,710 @@
#include "vxi.h"
#include "vxt.h"
#include "xfer_enum.h"
-LITDEF short ttt[4391] = {
+LITDEF short ttt[4387] = {
-/* 0 */ 0,0,0,0,332,3623,3096,577,
-/* 8 */ 2420,3081,3111,2092,428,3573,2213,3199,
-/* 16 */ 2296,2284,3806,3843,2257,2266,2338,2278,
-/* 24 */ 2329,2308,2236,783,798,810,822,864,
-/* 32 */ 882,903,932,962,977,992,1010,1169,
-/* 40 */ 1082,1115,1148,1226,1277,1646,1679,1694,
-/* 48 */ 1724,1790,1820,1844,1907,1928,1946,3638,
-/* 56 */ 3660,0,0,0,0,592,0,530,
-/* 64 */ 0,2078,0,3185,0,0,0,0,
-/* 72 */ 0,0,364,440,2398,2404,2829,2856,
-/* 80 */ 2874,2977,2915,2906,2992,3712,3796,3132,
-/* 88 */ 0,3164,3265,3228,3213,3243,3587,3441,
-/* 96 */ 3718,3730,3745,3769,3778,3763,3754,3474,
-/* 104 */ 3839,3852,3874,3911,3923,3944,3968,4034,
-/* 112 */ 0,0,3025,2380,3317,4340,671,4343,
-/* 120 */ 725,2886,3283,544,553,4346,2483,2580,
-/* 128 */ 2470,497,2506,2600,2245,2538,2610,4349,
-/* 136 */ 2365,2356,4353,1295,4354,360,356,3465,
-/* 144 */ 452,4358,4361,4364,3150,4367,4370,4373,
-/* 152 */ 4376,4379,4382,3609,0,3001,2669,2647,
-/* 160 */ 1607,2638,2416,2227,2952,2113,750,2942,
-/* 168 */ 0,0,2435,3787,3815,1520,3739,2518,
-/* 176 */ 2106,562,3935,1892,2347,1211,347,3269,
-/* 184 */ 634,703,615,681,3899,1130,3867,3125,
-/* 192 */ 2374,3016,3139,653,1022,2956,4385,2590,
-/* 200 */ 3986,4004,4019,521,2971,3261,2039,4061,
-/* 208 */ 4046,1313,3601,606,1709,1778,2553,4388,
-/* 216 */ 3672,2626,759,840,3300,3827,3696,3682,
-/* 224 */ 3689,3678,735,917,2493,1064,2457,1052,
-/* 232 */ 2317,1037,1097,2565,1490,1433,1418,1472,
-/* 240 */ 1388,1400,1445,1373,1457,1505,0,3559,
-/* 248 */ 0,941,950,3420,1919,3399,2444,2528,
-/* 256 */ 3051,3057,3069,3037,1250,1262,1184,1196,
-/* 264 */ 1238,3650,1754,1958,0,1325,1532,1628,
-/* 272 */ 3493,1661,1739,1766,1877,1856,3535,1802,
-/* 280 */ 3514,2003,1544,1559,2066,4076,1985,3327,
-/* 288 */ 3339,3351,3363,2865,2880,1595,461,1340,
-/* 296 */ 2021,662,3375,3387,4055,4067,0,0,
-/* 304 */ 0,0,3890,4091,4102,4114,4123,4137,
-/* 312 */ 4150,4160,4177,4189,4198,4210,4222,4234,
-/* 320 */ 4249,4261,4270,4282,4298,1973,4319,4331,
-/* 328 */ 0,1577,1352,0,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,
-/* 336 */ VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,
-/* 344 */ VXT_XFER,SIZEOF(char *) * (short int)xf_add,VXT_END,
-/* 347 */ VXT_IREPL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_bindparm,
-/* 355 */ VXT_END,
-/* 356 */ VXI_INCL,VXT_VAL,1,VXT_END,
-/* 360 */ VXI_CLRL,VXT_VAL,0,VXT_END,
-/* 364 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_break,VXT_END,
-/* 368 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callb,VXI_BRB,VXT_JMP,
-/* 376 */ 1,VXT_END,
-/* 378 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_calll,VXI_JMP,VXT_JMP,
-/* 386 */ 1,VXT_END,
-/* 388 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callw,VXI_BRW,VXT_JMP,
-/* 396 */ 1,VXT_END,
-/* 398 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callspb,VXI_BRB,VXT_JMP,
-/* 406 */ 1,VXT_END,
-/* 408 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callspl,VXI_JMP,VXT_JMP,
-/* 416 */ 1,VXT_END,
-/* 418 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callspw,VXI_BRW,VXT_JMP,
-/* 426 */ 1,VXT_END,
-/* 428 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
-/* 436 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_cat,VXT_END,
-/* 440 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 448 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_close,VXT_END,
-/* 452 */ VXI_BICB2,VXT_LIT,1,VXT_REG,0x5A,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_dt_false,
-/* 460 */ VXT_END,
-/* 461 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_clralsvars,
-/* 469 */ VXT_END,
-/* 470 */ VXI_TSTL,VXT_VAL,1,VXT_END,
-/* 474 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mval2bool,
-/* 482 */ VXT_END,
-/* 483 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mval2mint,
-/* 491 */ VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,VXT_END,
-/* 497 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 505 */ SIZEOF(char *) * (short int)xf_commarg,VXT_END,
-/* 507 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVL,VXT_VAL,1,
-/* 515 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mint2mval,VXT_END,
-/* 521 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mval2num,
-/* 529 */ VXT_END,
-/* 530 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 538 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_contain,VXT_END,
-/* 544 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_currhd,VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,
-/* 552 */ VXT_END,
-/* 553 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_currtn,
-/* 561 */ VXT_END,
-/* 562 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 570 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_cvtparm,VXT_END,
-/* 577 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 585 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_div,VXT_END,
-/* 592 */ VXI_MOVAB,VXT_VAL,2,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,1,
-/* 600 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_equ,VXT_END,
-/* 606 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_equnul,
-/* 614 */ VXT_END,
-/* 615 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 623 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_LIT,0,VXI_JSB,
-/* 631 */ VXT_XFER,SIZEOF(char *) * (short int)xf_exfun,VXT_END,
-/* 634 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 642 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_JSB,
-/* 650 */ VXT_XFER,SIZEOF(char *) * (short int)xf_exfun,VXT_END,
-/* 653 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_exfunret,
-/* 661 */ VXT_END,
-/* 662 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_exfunretals,
-/* 670 */ VXT_END,
-/* 671 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 679 */ SIZEOF(char *) * (short int)xf_extcall,VXT_END,
-/* 681 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 689 */ 3,VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,
-/* 697 */ VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_extexfun,VXT_END,
-/* 703 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 711 */ 3,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,
-/* 719 */ VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_extexfun,VXT_END,
-/* 725 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 733 */ SIZEOF(char *) * (short int)xf_extjmp,VXT_END,
-/* 735 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 743 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_exp,VXT_END,
-/* 750 */ VXT_IREPL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fetch,
-/* 758 */ VXT_END,
-/* 759 */ VXT_IREPAB,VXT_VAL,6,VXI_PUSHL,VXT_VAL,5,VXI_PUSHL,VXT_VAL,
-/* 767 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,
-/* 775 */ VXT_LIT,0,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnfgncal,VXT_END,
-/* 783 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 791 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnascii,VXT_END,
-/* 798 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
-/* 806 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnchar,VXT_END,
-/* 810 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 818 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fndata,VXT_END,
-/* 822 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 830 */ 2,VXI_PUSHL,VXT_VAL,3,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 838 */ SIZEOF(char *) * (short int)xf_fnextract,VXT_END,
-/* 840 */ VXT_IREPAB,VXT_VAL,6,VXI_PUSHL,VXT_VAL,5,VXI_PUSHL,VXT_VAL,
-/* 848 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 856 */ VXT_VAL,0,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnfgncal,VXT_END,
-/* 864 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 872 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 880 */ SIZEOF(char *) * (short int)xf_fnfind,VXT_END,
-/* 882 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 890 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 898 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnfnumber,VXT_END,
-/* 903 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,0,
-/* 911 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_fnget,VXT_END,
-/* 917 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 925 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnget2,VXT_END,
-/* 932 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fngvget,
-/* 940 */ VXT_END,
-/* 941 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fngvget1,
-/* 949 */ VXT_END,
-/* 950 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 958 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnget1,VXT_END,
-/* 962 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 970 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnincr,VXT_END,
-/* 977 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 985 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnj2,VXT_END,
-/* 992 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1000 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1008 */ SIZEOF(char *) * (short int)xf_fnj3,VXT_END,
-/* 1010 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1018 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlength,VXT_END,
-/* 1022 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1030 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlvname,VXT_END,
-/* 1037 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,
-/* 1045 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlvnameo2,VXT_END,
-/* 1052 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1060 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlvprvname,VXT_END,
-/* 1064 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 1072 */ 3,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,2,VXT_XFER,
-/* 1080 */ SIZEOF(char *) * (short int)xf_fnname,VXT_END,
-/* 1082 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1090 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnnext,VXT_END,
-/* 1097 */ VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,
-/* 1105 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1113 */ SIZEOF(char *) * (short int)xf_fno2,VXT_END,
-/* 1115 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1123 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnorder,VXT_END,
-/* 1130 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1138 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1146 */ SIZEOF(char *) * (short int)xf_fnp1,VXT_END,
-/* 1148 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 1156 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 1164 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnpiece,VXT_END,
-/* 1169 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1177 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnpopulation,VXT_END,
-/* 1184 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1192 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnqlength,VXT_END,
-/* 1196 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1204 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnqsubscript,VXT_END,
-/* 1211 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1219 */ 0,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnquery,VXT_END,
-/* 1226 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1234 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnrandom,VXT_END,
-/* 1238 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1246 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnreverse,VXT_END,
-/* 1250 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1258 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnstack1,VXT_END,
-/* 1262 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 1270 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnstack2,VXT_END,
-/* 1277 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1285 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1293 */ SIZEOF(char *) * (short int)xf_fntext,VXT_END,
-/* 1295 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 1303 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1311 */ SIZEOF(char *) * (short int)xf_fntranslate,VXT_END,
-/* 1313 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
-/* 1321 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnview,VXT_END,
-/* 1325 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 1333 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzascii,VXT_END,
-/* 1340 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1348 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzahandle,VXT_END,
-/* 1352 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 1360 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 1368 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzatransform,VXT_END,
-/* 1373 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 1381 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitand,VXT_END,
-/* 1388 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 1396 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitcoun,VXT_END,
-/* 1400 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1408 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1416 */ SIZEOF(char *) * (short int)xf_fnzbitfind,VXT_END,
-/* 1418 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 1426 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitget,VXT_END,
-/* 1433 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 1441 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitlen,VXT_END,
-/* 1445 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 1453 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitnot,VXT_END,
-/* 1457 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 1465 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitor,VXT_END,
-/* 1472 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1480 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1488 */ SIZEOF(char *) * (short int)xf_fnzbitset,VXT_END,
-/* 1490 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 1498 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitstr,VXT_END,
-/* 1505 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 1513 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitxor,VXT_END,
-/* 1520 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
-/* 1528 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzcall,VXT_END,
-/* 1532 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
-/* 1540 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzchar,VXT_END,
-/* 1544 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1552 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzconvert2,VXT_END,
-/* 1559 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 1567 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1575 */ SIZEOF(char *) * (short int)xf_fnzconvert3,VXT_END,
-/* 1577 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1585 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1593 */ SIZEOF(char *) * (short int)xf_fnzcollate,VXT_END,
-/* 1595 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1603 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzdata,VXT_END,
-/* 1607 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
-/* 1615 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 1623 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzdate,VXT_END,
-/* 1628 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 1636 */ 2,VXI_PUSHL,VXT_VAL,3,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1644 */ SIZEOF(char *) * (short int)xf_fnzextract,VXT_END,
-/* 1646 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1654 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzfile,VXT_END,
-/* 1661 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 1669 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1677 */ SIZEOF(char *) * (short int)xf_fnzfind,VXT_END,
-/* 1679 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1687 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetdvi,VXT_END,
-/* 1694 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 1702 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetjpi,VXT_END,
-/* 1709 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 1717 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetlki,VXT_END,
-/* 1724 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1732 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetsyi,VXT_END,
-/* 1739 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1747 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzj2,VXT_END,
-/* 1754 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1762 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzjobexam,VXT_END,
-/* 1766 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1774 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzlength,VXT_END,
-/* 1778 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1786 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzlkid,VXT_END,
-/* 1790 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1798 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzm,VXT_END,
-/* 1802 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1810 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1818 */ SIZEOF(char *) * (short int)xf_fnzp1,VXT_END,
-/* 1820 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,
-/* 1828 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 1836 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzparse,VXT_END,
-/* 1844 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1852 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpid,VXT_END,
-/* 1856 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 1864 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 1872 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpiece,VXT_END,
-/* 1877 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1885 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpopulation,VXT_END,
-/* 1892 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 1900 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzprevious,VXT_END,
-/* 1907 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1915 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpriv,VXT_END,
-/* 1919 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzqgblmod,
-/* 1927 */ VXT_END,
-/* 1928 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1936 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 1944 */ SIZEOF(char *) * (short int)xf_fnzsearch,VXT_END,
-/* 1946 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 1954 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsetprv,VXT_END,
-/* 1958 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 1966 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsigproc,VXT_END,
-/* 1973 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
-/* 1981 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsocket,VXT_END,
-/* 1985 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 1993 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 2001 */ SIZEOF(char *) * (short int)xf_fnzsubstr,VXT_END,
-/* 2003 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 2011 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 2019 */ SIZEOF(char *) * (short int)xf_fnztranslate,VXT_END,
-/* 2021 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 2029 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
-/* 2037 */ SIZEOF(char *) * (short int)xf_fnztrigger,VXT_END,
-/* 2039 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,6,VXI_PUSHAB,VXT_VAL,
-/* 2047 */ 5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,
-/* 2055 */ VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,7,
-/* 2063 */ VXT_XFER,SIZEOF(char *) * (short int)xf_fnztrnlnm,VXT_END,
-/* 2066 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 2074 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwidth,VXT_END,
-/* 2078 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 2086 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_follow,VXT_END,
-/* 2092 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,1,
-/* 2100 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forcenum,VXT_END,
-/* 2106 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forchk1,VXT_END,
-/* 2113 */ VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2121 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forinit,VXT_END,
-/* 2126 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forlcldob,VXI_BRB,VXT_JMP,
-/* 2134 */ 1,VXT_END,
-/* 2136 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forlcldol,VXI_JMP,VXT_JMP,
-/* 2144 */ 1,VXT_END,
-/* 2146 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forlcldow,VXI_BRW,VXT_JMP,
-/* 2154 */ 1,VXT_END,
-/* 2156 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_JMP,1,VXI_PUSHAB,VXT_VAL,
-/* 2164 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,
-/* 2172 */ VXT_XFER,SIZEOF(char *) * (short int)xf_forloop,VXT_END,
-/* 2175 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_JMP,1,VXI_PUSHAB,VXT_VAL,
-/* 2183 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,
-/* 2191 */ VXT_XFER,SIZEOF(char *) * (short int)xf_forloop,VXT_END,
-/* 2194 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_JMP,1,VXI_PUSHAB,VXT_VAL,
-/* 2202 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,
-/* 2210 */ VXT_XFER,SIZEOF(char *) * (short int)xf_forloop,VXT_END,
-/* 2213 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_getindx,
-/* 2221 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 2227 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_gettruth,
-/* 2235 */ VXT_END,
-/* 2236 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvdata,
-/* 2244 */ VXT_END,
-/* 2245 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 2253 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvextnam,VXT_END,
-/* 2257 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvget,
-/* 2265 */ VXT_END,
-/* 2266 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 2274 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_gvincr,VXT_END,
-/* 2278 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_gvkill,VXT_END,
-/* 2284 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 2292 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvnaked,VXT_END,
-/* 2296 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 2304 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvname,VXT_END,
-/* 2308 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvnext,
-/* 2316 */ VXT_END,
-/* 2317 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 2325 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_gvo2,VXT_END,
-/* 2329 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvorder,
-/* 2337 */ VXT_END,
-/* 2338 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvput,
-/* 2346 */ VXT_END,
-/* 2347 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvquery,
-/* 2355 */ VXT_END,
-/* 2356 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvrectarg,
-/* 2364 */ VXT_END,
-/* 2365 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvsavtarg,
-/* 2373 */ VXT_END,
-/* 2374 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_gvzwithdraw,VXT_END,
-/* 2380 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 2388 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,
-/* 2396 */ SIZEOF(char *) * (short int)xf_gvzwrite,VXT_END,
-/* 2398 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_halt,VXT_END,
-/* 2404 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 2412 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_hang,VXT_END,
-/* 2416 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_hardret,VXT_END,
-/* 2420 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2428 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_idiv,VXT_END,
-/* 2435 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_igetsrc,
-/* 2443 */ VXT_END,
-/* 2444 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2452 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_inddevparms,VXT_END,
-/* 2457 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2465 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname,VXT_END,
-/* 2470 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2478 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfun,VXT_END,
-/* 2483 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2491 */ SIZEOF(char *) * (short int)xf_indglvn,VXT_END,
-/* 2493 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 2501 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indincr,VXT_END,
-/* 2506 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvadr,VXI_MOVL,VXT_REG,
-/* 2514 */ 0x50,VXT_ADDR,0,VXT_END,
-/* 2518 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2526 */ SIZEOF(char *) * (short int)xf_indlvarg,VXT_END,
-/* 2528 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,
-/* 2536 */ SIZEOF(char *) * (short int)xf_indmerge,VXT_END,
-/* 2538 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2546 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indname,VXT_END,
-/* 2553 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvnamadr,VXI_MOVL,VXT_REG,
-/* 2561 */ 0x50,VXT_ADDR,0,VXT_END,
-/* 2565 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 2573 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indo2,VXT_END,
-/* 2580 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2588 */ SIZEOF(char *) * (short int)xf_indpat,VXT_END,
-/* 2590 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2598 */ SIZEOF(char *) * (short int)xf_indrzshow,VXT_END,
-/* 2600 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2608 */ SIZEOF(char *) * (short int)xf_indset,VXT_END,
-/* 2610 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 2618 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indtext,VXT_END,
-/* 2626 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 2634 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_iocontrol,VXT_END,
-/* 2638 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_iretmvad,
-/* 2646 */ VXT_END,
-/* 2647 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2655 */ SIZEOF(char *) * (short int)xf_iretmval,VXT_END,
-/* 2657 */ VXI_BRB,VXT_JMP,1,VXT_END,
-/* 2661 */ VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2665 */ VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2669 */ VXI_JMP,VXT_VAL,1,VXT_END,
-/* 2673 */ VXI_BEQL,VXT_JMP,1,VXT_END,
-/* 2677 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2684 */ VXI_BNEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2691 */ VXI_BGEQ,VXT_JMP,1,VXT_END,
-/* 2695 */ VXI_BLSS,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2702 */ VXI_BLSS,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2709 */ VXI_BGTR,VXT_JMP,1,VXT_END,
-/* 2713 */ VXI_BLEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2720 */ VXI_BLEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2727 */ VXI_BLEQ,VXT_JMP,1,VXT_END,
-/* 2731 */ VXI_BGTR,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2738 */ VXI_BGTR,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2745 */ VXI_BLSS,VXT_JMP,1,VXT_END,
-/* 2749 */ VXI_BGEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2756 */ VXI_BGEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2763 */ VXI_BNEQ,VXT_JMP,1,VXT_END,
-/* 2767 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
-/* 2774 */ VXI_BEQL,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
-/* 2781 */ VXI_BLBC,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
-/* 2787 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
-/* 2795 */ VXT_END,
-/* 2796 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
-/* 2804 */ VXT_END,
-/* 2805 */ VXI_BLBS,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
-/* 2811 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
-/* 2819 */ VXT_END,
-/* 2820 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
-/* 2828 */ VXT_END,
-/* 2829 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,7,VXI_PUSHAB,VXT_VAL,
-/* 2837 */ 6,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,
-/* 2845 */ VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,
-/* 2853 */ VXT_XFER,SIZEOF(char *) * (short int)xf_job,VXT_END,
-/* 2856 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_kill,
-/* 2864 */ VXT_END,
-/* 2865 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_killalias,
-/* 2873 */ VXT_END,
-/* 2874 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killall,VXT_END,
-/* 2880 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killaliasall,VXT_END,
-/* 2886 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 2894 */ 3,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_labaddr,VXI_MOVL,VXT_REG,
-/* 2902 */ 0x50,VXT_VAL,0,VXT_END,
-/* 2906 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckdecr,
-/* 2914 */ VXT_END,
-/* 2915 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckincr,
-/* 2923 */ VXT_END,
-/* 2924 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
-/* 2930 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
-/* 2936 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
-/* 2942 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 2950 */ SIZEOF(char *) * (short int)xf_linefetch,VXT_END,
-/* 2952 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_linestart,VXT_END,
-/* 2956 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 2964 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
-/* 2971 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_lkinit,VXT_END,
-/* 2977 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 2985 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
-/* 2992 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lock,
-/* 3000 */ VXT_END,
-/* 3001 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3009 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvpatwrite,VXT_END,
-/* 3016 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwithdraw,
-/* 3024 */ VXT_END,
-/* 3025 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 3033 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwrite,VXT_END,
-/* 3037 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_m_srchindx,
-/* 3045 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 3051 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_merge,VXT_END,
-/* 3057 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3065 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
-/* 3069 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3077 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
-/* 3081 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3089 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_flt_mod,VXT_END,
-/* 3096 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3104 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_mul,VXT_END,
-/* 3111 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,1,
-/* 3119 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_neg,VXT_END,
-/* 3125 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newintrinsic,VXT_END,
-/* 3132 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newvar,VXT_END,
-/* 3139 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_nullexp,VXI_MOVL,VXT_REG,0x50,
-/* 3147 */ VXT_ADDR,0,VXT_END,
-/* 3150 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 3158 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_numcmp,VXT_END,
-/* 3164 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
-/* 3172 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3180 */ VXT_LIT,4,VXT_XFER,SIZEOF(char *) * (short int)xf_open,VXT_END,
-/* 3185 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 3193 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_pattern,VXT_END,
-/* 3199 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_putindx,
-/* 3207 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 3213 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 3221 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_rdone,VXT_END,
-/* 3228 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 3236 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_read,VXT_END,
-/* 3243 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
-/* 3251 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,3,VXT_XFER,
-/* 3259 */ SIZEOF(char *) * (short int)xf_readfl,VXT_END,
-/* 3261 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_END,
-/* 3265 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_ret,VXT_END,
-/* 3269 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVL,VXT_VAL,2,
-/* 3277 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_retarg,VXT_END,
-/* 3283 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3291 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,
-/* 3299 */ VXT_END,
-/* 3300 */ VXI_PUSHL,VXT_LIT,-1,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3308 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,
-/* 3316 */ VXT_END,
-/* 3317 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 3325 */ SIZEOF(char *) * (short int)xf_rterror,VXT_END,
-/* 3327 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3335 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setals2als,VXT_END,
-/* 3339 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3347 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsin2alsct,VXT_END,
-/* 3351 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3359 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsctin2als,VXT_END,
-/* 3363 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3371 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsct2alsct,VXT_END,
-/* 3375 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3383 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2als,VXT_END,
-/* 3387 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
-/* 3395 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2alsct,VXT_END,
-/* 3399 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3407 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3415 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setextract,VXT_END,
-/* 3420 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3428 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3436 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setp1,VXT_END,
-/* 3441 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3449 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 3457 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setpiece,VXT_END,
-/* 3465 */ VXI_BISB2,VXT_LIT,1,VXT_REG,0x5A,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_dt_true,
-/* 3473 */ VXT_END,
-/* 3474 */ VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3482 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,3,VXI_JSB,
-/* 3490 */ VXT_XFER,SIZEOF(char *) * (short int)xf_setzbrk,VXT_END,
-/* 3493 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3501 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3509 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzextract,VXT_END,
-/* 3514 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3522 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 3530 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzp1,VXT_END,
-/* 3535 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 3543 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 3551 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setzpiece,VXT_END,
-/* 3559 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
-/* 3567 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sorts_after,VXT_END,
-/* 3573 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_srchindx,
-/* 3581 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 3587 */ VXI_MOVAB,VXT_VAL,2,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,1,
-/* 3595 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
-/* 3601 */ VXI_MOVC3,VXT_LIT,16,VXT_VAL,2,VXT_VAL,1,VXT_END,
-/* 3609 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,0,
-/* 3617 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
-/* 3623 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3631 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_sub,VXT_END,
-/* 3638 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3646 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svget,VXT_END,
-/* 3650 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 3658 */ SIZEOF(char *) * (short int)xf_psvput,VXT_END,
-/* 3660 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3668 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svput,VXT_END,
-/* 3672 */ VXI_MOVL,VXT_REG,0x50,VXT_REG,0x5A,VXT_END,
-/* 3678 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tcommit,VXT_END,
-/* 3682 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trollback,VXT_END,
-/* 3689 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trestart,VXT_END,
-/* 3696 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
-/* 3704 */ 2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tstart,VXT_END,
-/* 3712 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_unlock,VXT_END,
-/* 3718 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3726 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_use,VXT_END,
-/* 3730 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_view,
-/* 3738 */ VXT_END,
-/* 3739 */ VXI_CMPL,VXT_VAL,1,VXT_VAL,2,VXT_END,
-/* 3745 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_write,
-/* 3753 */ VXT_END,
-/* 3754 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wteol,
-/* 3762 */ VXT_END,
-/* 3763 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_wtff,VXT_END,
-/* 3769 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wtone,
-/* 3777 */ VXT_END,
-/* 3778 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wttab,
-/* 3786 */ VXT_END,
-/* 3787 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_xkill,
-/* 3795 */ VXT_END,
-/* 3796 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 3804 */ SIZEOF(char *) * (short int)xf_xnew,VXT_END,
-/* 3806 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zallocate,
-/* 3814 */ VXT_END,
-/* 3815 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3823 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zattach,VXT_END,
-/* 3827 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3835 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zcompile,VXT_END,
-/* 3839 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
-/* 3843 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zdeallocate,
-/* 3851 */ VXT_END,
-/* 3852 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 3860 */ 1,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_zedit,VXT_END,
-/* 3867 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zg1,VXT_END,
-/* 3874 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHL,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
-/* 3882 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zgoto,VXT_END,
-/* 3890 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zhalt,
-/* 3898 */ VXT_END,
-/* 3899 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3907 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zhelp,VXT_END,
-/* 3911 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 3919 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zlink,VXT_END,
-/* 3923 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 3931 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zmess,VXT_END,
-/* 3935 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zprevious,
-/* 3943 */ VXT_END,
-/* 3944 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,
-/* 3952 */ 4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
-/* 3960 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_zprint,VXT_END,
-/* 3968 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,
-/* 3976 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
-/* 3984 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
-/* 3986 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
-/* 3994 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
-/* 4002 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
-/* 4004 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4012 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
-/* 4019 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4027 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
-/* 4034 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4042 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zsystem,VXT_END,
-/* 4046 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_ztcommit,
-/* 4054 */ VXT_END,
-/* 4055 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztrigger,VXT_END,
-/* 4061 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztstart,VXT_END,
-/* 4067 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zwritesvn,
-/* 4075 */ VXT_END,
-/* 4076 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
-/* 4084 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwrite,VXT_END,
-/* 4091 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_igetdst,VXI_MOVL,VXT_REG,0x50,
-/* 4099 */ VXT_ADDR,0,VXT_END,
-/* 4102 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4110 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget1,VXT_END,
-/* 4114 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnpop,
-/* 4122 */ VXT_END,
-/* 4123 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnslot,
-/* 4131 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
-/* 4137 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
-/* 4145 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indsavglvn,VXT_END,
-/* 4150 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
-/* 4158 */ SIZEOF(char *) * (short int)xf_indsavlvn,VXT_END,
-/* 4160 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4168 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshlvn,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
-/* 4176 */ VXT_END,
-/* 4177 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
-/* 4185 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_savgvn,VXT_END,
-/* 4189 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_savlvn,
-/* 4197 */ VXT_END,
-/* 4198 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4206 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_shareslot,VXT_END,
-/* 4210 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4218 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_stoglvn,VXT_END,
-/* 4222 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4230 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshgvn,VXT_END,
-/* 4234 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
-/* 4242 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname2,VXT_END,
-/* 4249 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 4257 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget2,VXT_END,
-/* 4261 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_indmerge2,
-/* 4269 */ VXT_END,
-/* 4270 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
-/* 4278 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_litc,VXT_END,
-/* 4282 */ VXI_MOVC3,VXT_LIT,16,VXT_VAL,2,VXT_VAL,1,VXI_PUSHAB,
-/* 4290 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_stolitc,VXT_END,
-/* 4298 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
-/* 4306 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
-/* 4314 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpeek,VXT_END,
-/* 4319 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
-/* 4327 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsyslog,VXT_END,
-/* 4331 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zrupdate,
-/* 4339 */ VXT_END,
-/* 4340 */ 368,388,378,2657,2665,2661,2924,2936,
-/* 4348 */ 2930,0,0,0,507,483,474,0,
-/* 4356 */ 0,470,2156,2194,2175,2805,2820,2811,
-/* 4364 */ 2781,2796,2787,2673,2684,2677,2763,2774,
-/* 4372 */ 2767,2709,2720,2713,2727,2738,2731,2745,
-/* 4380 */ 2756,2749,2691,2702,2695,2126,2146,2136,
-/* 4388 */ 398,418,408};
+/* 0 */ 0,0,0,0,331,3616,3089,576,
+/* 8 */ 2413,3074,3104,2091,427,3566,2212,3192,
+/* 16 */ 2295,2283,3799,3836,2256,2265,2337,2277,
+/* 24 */ 2328,2307,2235,782,797,809,821,863,
+/* 32 */ 881,902,931,961,976,991,1009,1168,
+/* 40 */ 1081,1114,1147,1225,1276,1645,1678,1693,
+/* 48 */ 1723,1789,1819,1843,1906,1927,1945,3631,
+/* 56 */ 3653,0,0,0,0,591,0,529,
+/* 64 */ 0,2077,0,3178,0,0,0,0,
+/* 72 */ 0,0,363,439,2397,2822,2849,2867,
+/* 80 */ 2970,2908,2899,2985,3705,3789,3125,0,
+/* 88 */ 3157,3258,3221,3206,3236,3580,3434,3711,
+/* 96 */ 3723,3738,3762,3771,3756,3747,3467,3832,
+/* 104 */ 3845,3867,3907,3919,3940,3964,4030,0,
+/* 112 */ 0,3018,2379,3310,4336,670,4339,724,
+/* 120 */ 2879,3276,543,552,4342,2476,2573,2463,
+/* 128 */ 496,2499,2593,2244,2531,2603,4345,2364,
+/* 136 */ 2355,4349,1294,4350,359,355,3458,451,
+/* 144 */ 4354,4357,4360,3143,4363,4366,4369,4372,
+/* 152 */ 4375,4378,3602,0,2994,2662,2640,1606,
+/* 160 */ 2631,2409,2226,2945,2112,749,2935,0,
+/* 168 */ 0,2428,3780,3808,1519,3732,2511,2105,
+/* 176 */ 561,3931,1891,2346,1210,346,3262,633,
+/* 184 */ 702,614,680,3895,1129,3860,3118,2373,
+/* 192 */ 3009,3132,652,1021,2949,4381,2583,3982,
+/* 200 */ 4000,4015,520,2964,3254,2038,4057,4042,
+/* 208 */ 1312,3594,605,1708,1777,2546,4384,3665,
+/* 216 */ 2619,758,839,3293,3820,3689,3675,3682,
+/* 224 */ 3671,734,916,2486,1063,2450,1051,2316,
+/* 232 */ 1036,1096,2558,1489,1432,1417,1471,1387,
+/* 240 */ 1399,1444,1372,1456,1504,0,3552,0,
+/* 248 */ 940,949,3413,1918,3392,2437,2521,3044,
+/* 256 */ 3050,3062,3030,1249,1261,1183,1195,1237,
+/* 264 */ 3643,1753,1957,0,1324,1531,1627,3486,
+/* 272 */ 1660,1738,1765,1876,1855,3528,1801,3507,
+/* 280 */ 2002,1543,1558,2065,4072,1984,3320,3332,
+/* 288 */ 3344,3356,2858,2873,1594,460,1339,2020,
+/* 296 */ 661,3368,3380,4051,4063,0,0,0,
+/* 304 */ 0,3883,4087,4098,4110,4119,4133,4146,
+/* 312 */ 4156,4173,4185,4194,4206,4218,4230,4245,
+/* 320 */ 4257,4266,4278,4294,1972,4315,4327,0,
+/* 328 */ 1576,1351,0,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,
+/* 336 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 344 */ SIZEOF(char *) * (short int)xf_add,VXT_END,
+/* 346 */ VXT_IREPL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_bindparm,
+/* 354 */ VXT_END,
+/* 355 */ VXI_INCL,VXT_VAL,1,VXT_END,
+/* 359 */ VXI_CLRL,VXT_VAL,0,VXT_END,
+/* 363 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_break,VXT_END,
+/* 367 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callb,VXI_BRB,VXT_JMP,
+/* 375 */ 1,VXT_END,
+/* 377 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_calll,VXI_JMP,VXT_JMP,
+/* 385 */ 1,VXT_END,
+/* 387 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callw,VXI_BRW,VXT_JMP,
+/* 395 */ 1,VXT_END,
+/* 397 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callspb,VXI_BRB,VXT_JMP,
+/* 405 */ 1,VXT_END,
+/* 407 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callspl,VXI_JMP,VXT_JMP,
+/* 415 */ 1,VXT_END,
+/* 417 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_callspw,VXI_BRW,VXT_JMP,
+/* 425 */ 1,VXT_END,
+/* 427 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
+/* 435 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_cat,VXT_END,
+/* 439 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 447 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_close,VXT_END,
+/* 451 */ VXI_BICB2,VXT_LIT,1,VXT_REG,0x5A,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_dt_false,
+/* 459 */ VXT_END,
+/* 460 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_clralsvars,
+/* 468 */ VXT_END,
+/* 469 */ VXI_TSTL,VXT_VAL,1,VXT_END,
+/* 473 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mval2bool,
+/* 481 */ VXT_END,
+/* 482 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mval2mint,
+/* 490 */ VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,VXT_END,
+/* 496 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 504 */ SIZEOF(char *) * (short int)xf_commarg,VXT_END,
+/* 506 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVL,VXT_VAL,1,
+/* 514 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mint2mval,VXT_END,
+/* 520 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_mval2num,
+/* 528 */ VXT_END,
+/* 529 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 537 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_contain,VXT_END,
+/* 543 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_currhd,VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,
+/* 551 */ VXT_END,
+/* 552 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_currtn,
+/* 560 */ VXT_END,
+/* 561 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 569 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_cvtparm,VXT_END,
+/* 576 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 584 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_div,VXT_END,
+/* 591 */ VXI_MOVAB,VXT_VAL,2,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,1,
+/* 599 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_equ,VXT_END,
+/* 605 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_equnul,
+/* 613 */ VXT_END,
+/* 614 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 622 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_LIT,0,VXI_JSB,
+/* 630 */ VXT_XFER,SIZEOF(char *) * (short int)xf_exfun,VXT_END,
+/* 633 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 641 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_JSB,
+/* 649 */ VXT_XFER,SIZEOF(char *) * (short int)xf_exfun,VXT_END,
+/* 652 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_exfunret,
+/* 660 */ VXT_END,
+/* 661 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_exfunretals,
+/* 669 */ VXT_END,
+/* 670 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 678 */ SIZEOF(char *) * (short int)xf_extcall,VXT_END,
+/* 680 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 688 */ 3,VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,
+/* 696 */ VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_extexfun,VXT_END,
+/* 702 */ VXT_IREPAB,VXT_VAL,5,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 710 */ 3,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,
+/* 718 */ VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_extexfun,VXT_END,
+/* 724 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 732 */ SIZEOF(char *) * (short int)xf_extjmp,VXT_END,
+/* 734 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 742 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_exp,VXT_END,
+/* 749 */ VXT_IREPL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fetch,
+/* 757 */ VXT_END,
+/* 758 */ VXT_IREPAB,VXT_VAL,6,VXI_PUSHL,VXT_VAL,5,VXI_PUSHL,VXT_VAL,
+/* 766 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,
+/* 774 */ VXT_LIT,0,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnfgncal,VXT_END,
+/* 782 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 790 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnascii,VXT_END,
+/* 797 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
+/* 805 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnchar,VXT_END,
+/* 809 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 817 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fndata,VXT_END,
+/* 821 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 829 */ 2,VXI_PUSHL,VXT_VAL,3,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 837 */ SIZEOF(char *) * (short int)xf_fnextract,VXT_END,
+/* 839 */ VXT_IREPAB,VXT_VAL,6,VXI_PUSHL,VXT_VAL,5,VXI_PUSHL,VXT_VAL,
+/* 847 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 855 */ VXT_VAL,0,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnfgncal,VXT_END,
+/* 863 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 871 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 879 */ SIZEOF(char *) * (short int)xf_fnfind,VXT_END,
+/* 881 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 889 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 897 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnfnumber,VXT_END,
+/* 902 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,0,
+/* 910 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_fnget,VXT_END,
+/* 916 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 924 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnget2,VXT_END,
+/* 931 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fngvget,
+/* 939 */ VXT_END,
+/* 940 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fngvget1,
+/* 948 */ VXT_END,
+/* 949 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 957 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnget1,VXT_END,
+/* 961 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 969 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnincr,VXT_END,
+/* 976 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 984 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnj2,VXT_END,
+/* 991 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 999 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1007 */ SIZEOF(char *) * (short int)xf_fnj3,VXT_END,
+/* 1009 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1017 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlength,VXT_END,
+/* 1021 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1029 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlvname,VXT_END,
+/* 1036 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,
+/* 1044 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlvnameo2,VXT_END,
+/* 1051 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1059 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnlvprvname,VXT_END,
+/* 1063 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 1071 */ 3,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,2,VXT_XFER,
+/* 1079 */ SIZEOF(char *) * (short int)xf_fnname,VXT_END,
+/* 1081 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1089 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnnext,VXT_END,
+/* 1096 */ VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,
+/* 1104 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1112 */ SIZEOF(char *) * (short int)xf_fno2,VXT_END,
+/* 1114 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1122 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnorder,VXT_END,
+/* 1129 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 1137 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1145 */ SIZEOF(char *) * (short int)xf_fnp1,VXT_END,
+/* 1147 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 1155 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 1163 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnpiece,VXT_END,
+/* 1168 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1176 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnpopulation,VXT_END,
+/* 1183 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1191 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnqlength,VXT_END,
+/* 1195 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1203 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnqsubscript,VXT_END,
+/* 1210 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1218 */ 0,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnquery,VXT_END,
+/* 1225 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1233 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnrandom,VXT_END,
+/* 1237 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1245 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnreverse,VXT_END,
+/* 1249 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1257 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnstack1,VXT_END,
+/* 1261 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 1269 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnstack2,VXT_END,
+/* 1276 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 1284 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1292 */ SIZEOF(char *) * (short int)xf_fntext,VXT_END,
+/* 1294 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 1302 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1310 */ SIZEOF(char *) * (short int)xf_fntranslate,VXT_END,
+/* 1312 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
+/* 1320 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnview,VXT_END,
+/* 1324 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 1332 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzascii,VXT_END,
+/* 1339 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1347 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzahandle,VXT_END,
+/* 1351 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 1359 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 1367 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzatransform,VXT_END,
+/* 1372 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 1380 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitand,VXT_END,
+/* 1387 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 1395 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitcoun,VXT_END,
+/* 1399 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1407 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1415 */ SIZEOF(char *) * (short int)xf_fnzbitfind,VXT_END,
+/* 1417 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 1425 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitget,VXT_END,
+/* 1432 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 1440 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitlen,VXT_END,
+/* 1444 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 1452 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitnot,VXT_END,
+/* 1456 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 1464 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitor,VXT_END,
+/* 1471 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1479 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1487 */ SIZEOF(char *) * (short int)xf_fnzbitset,VXT_END,
+/* 1489 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 1497 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitstr,VXT_END,
+/* 1504 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 1512 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzbitxor,VXT_END,
+/* 1519 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
+/* 1527 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzcall,VXT_END,
+/* 1531 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
+/* 1539 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzchar,VXT_END,
+/* 1543 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1551 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzconvert2,VXT_END,
+/* 1558 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 1566 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1574 */ SIZEOF(char *) * (short int)xf_fnzconvert3,VXT_END,
+/* 1576 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 1584 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1592 */ SIZEOF(char *) * (short int)xf_fnzcollate,VXT_END,
+/* 1594 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1602 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzdata,VXT_END,
+/* 1606 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
+/* 1614 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 1622 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzdate,VXT_END,
+/* 1627 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 1635 */ 2,VXI_PUSHL,VXT_VAL,3,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1643 */ SIZEOF(char *) * (short int)xf_fnzextract,VXT_END,
+/* 1645 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1653 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzfile,VXT_END,
+/* 1660 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 1668 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1676 */ SIZEOF(char *) * (short int)xf_fnzfind,VXT_END,
+/* 1678 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1686 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetdvi,VXT_END,
+/* 1693 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 1701 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetjpi,VXT_END,
+/* 1708 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 1716 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetlki,VXT_END,
+/* 1723 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1731 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fngetsyi,VXT_END,
+/* 1738 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1746 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzj2,VXT_END,
+/* 1753 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1761 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzjobexam,VXT_END,
+/* 1765 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1773 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzlength,VXT_END,
+/* 1777 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1785 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzlkid,VXT_END,
+/* 1789 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1797 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzm,VXT_END,
+/* 1801 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 1809 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1817 */ SIZEOF(char *) * (short int)xf_fnzp1,VXT_END,
+/* 1819 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,
+/* 1827 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 1835 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzparse,VXT_END,
+/* 1843 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1851 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpid,VXT_END,
+/* 1855 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 1863 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 1871 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpiece,VXT_END,
+/* 1876 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1884 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpopulation,VXT_END,
+/* 1891 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 1899 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzprevious,VXT_END,
+/* 1906 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1914 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpriv,VXT_END,
+/* 1918 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzqgblmod,
+/* 1926 */ VXT_END,
+/* 1927 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 1935 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 1943 */ SIZEOF(char *) * (short int)xf_fnzsearch,VXT_END,
+/* 1945 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 1953 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsetprv,VXT_END,
+/* 1957 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 1965 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsigproc,VXT_END,
+/* 1972 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_VAL,
+/* 1980 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsocket,VXT_END,
+/* 1984 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 1992 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 2000 */ SIZEOF(char *) * (short int)xf_fnzsubstr,VXT_END,
+/* 2002 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 2010 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 2018 */ SIZEOF(char *) * (short int)xf_fnztranslate,VXT_END,
+/* 2020 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 2028 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,4,VXT_XFER,
+/* 2036 */ SIZEOF(char *) * (short int)xf_fnztrigger,VXT_END,
+/* 2038 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,6,VXI_PUSHAB,VXT_VAL,
+/* 2046 */ 5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,
+/* 2054 */ VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,7,
+/* 2062 */ VXT_XFER,SIZEOF(char *) * (short int)xf_fnztrnlnm,VXT_END,
+/* 2065 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 2073 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwidth,VXT_END,
+/* 2077 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 2085 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_follow,VXT_END,
+/* 2091 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,1,
+/* 2099 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forcenum,VXT_END,
+/* 2105 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forchk1,VXT_END,
+/* 2112 */ VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2120 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forinit,VXT_END,
+/* 2125 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forlcldob,VXI_BRB,VXT_JMP,
+/* 2133 */ 1,VXT_END,
+/* 2135 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forlcldol,VXI_JMP,VXT_JMP,
+/* 2143 */ 1,VXT_END,
+/* 2145 */ VXI_PUSHL,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_forlcldow,VXI_BRW,VXT_JMP,
+/* 2153 */ 1,VXT_END,
+/* 2155 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_JMP,1,VXI_PUSHAB,VXT_VAL,
+/* 2163 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,
+/* 2171 */ VXT_XFER,SIZEOF(char *) * (short int)xf_forloop,VXT_END,
+/* 2174 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_JMP,1,VXI_PUSHAB,VXT_VAL,
+/* 2182 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,
+/* 2190 */ VXT_XFER,SIZEOF(char *) * (short int)xf_forloop,VXT_END,
+/* 2193 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_JMP,1,VXI_PUSHAB,VXT_VAL,
+/* 2201 */ 4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,
+/* 2209 */ VXT_XFER,SIZEOF(char *) * (short int)xf_forloop,VXT_END,
+/* 2212 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_getindx,
+/* 2220 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 2226 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_gettruth,
+/* 2234 */ VXT_END,
+/* 2235 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvdata,
+/* 2243 */ VXT_END,
+/* 2244 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 2252 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvextnam,VXT_END,
+/* 2256 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvget,
+/* 2264 */ VXT_END,
+/* 2265 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 2273 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_gvincr,VXT_END,
+/* 2277 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_gvkill,VXT_END,
+/* 2283 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 2291 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvnaked,VXT_END,
+/* 2295 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 2303 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvname,VXT_END,
+/* 2307 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvnext,
+/* 2315 */ VXT_END,
+/* 2316 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 2324 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_gvo2,VXT_END,
+/* 2328 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvorder,
+/* 2336 */ VXT_END,
+/* 2337 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvput,
+/* 2345 */ VXT_END,
+/* 2346 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvquery,
+/* 2354 */ VXT_END,
+/* 2355 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvrectarg,
+/* 2363 */ VXT_END,
+/* 2364 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_gvsavtarg,
+/* 2372 */ VXT_END,
+/* 2373 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_gvzwithdraw,VXT_END,
+/* 2379 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 2387 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,
+/* 2395 */ SIZEOF(char *) * (short int)xf_gvzwrite,VXT_END,
+/* 2397 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 2405 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_hang,VXT_END,
+/* 2409 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_hardret,VXT_END,
+/* 2413 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2421 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_idiv,VXT_END,
+/* 2428 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_igetsrc,
+/* 2436 */ VXT_END,
+/* 2437 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2445 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_inddevparms,VXT_END,
+/* 2450 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2458 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname,VXT_END,
+/* 2463 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2471 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indfun,VXT_END,
+/* 2476 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2484 */ SIZEOF(char *) * (short int)xf_indglvn,VXT_END,
+/* 2486 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 2494 */ 0,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indincr,VXT_END,
+/* 2499 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvadr,VXI_MOVL,VXT_REG,
+/* 2507 */ 0x50,VXT_ADDR,0,VXT_END,
+/* 2511 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2519 */ SIZEOF(char *) * (short int)xf_indlvarg,VXT_END,
+/* 2521 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,
+/* 2529 */ SIZEOF(char *) * (short int)xf_indmerge,VXT_END,
+/* 2531 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2539 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indname,VXT_END,
+/* 2546 */ VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indlvnamadr,VXI_MOVL,VXT_REG,
+/* 2554 */ 0x50,VXT_ADDR,0,VXT_END,
+/* 2558 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 2566 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indo2,VXT_END,
+/* 2573 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2581 */ SIZEOF(char *) * (short int)xf_indpat,VXT_END,
+/* 2583 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2591 */ SIZEOF(char *) * (short int)xf_indrzshow,VXT_END,
+/* 2593 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2601 */ SIZEOF(char *) * (short int)xf_indset,VXT_END,
+/* 2603 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 2611 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indtext,VXT_END,
+/* 2619 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 2627 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_iocontrol,VXT_END,
+/* 2631 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_iretmvad,
+/* 2639 */ VXT_END,
+/* 2640 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2648 */ SIZEOF(char *) * (short int)xf_iretmval,VXT_END,
+/* 2650 */ VXI_BRB,VXT_JMP,1,VXT_END,
+/* 2654 */ VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2658 */ VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2662 */ VXI_JMP,VXT_VAL,1,VXT_END,
+/* 2666 */ VXI_BEQL,VXT_JMP,1,VXT_END,
+/* 2670 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2677 */ VXI_BNEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2684 */ VXI_BGEQ,VXT_JMP,1,VXT_END,
+/* 2688 */ VXI_BLSS,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2695 */ VXI_BLSS,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2702 */ VXI_BGTR,VXT_JMP,1,VXT_END,
+/* 2706 */ VXI_BLEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2713 */ VXI_BLEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2720 */ VXI_BLEQ,VXT_JMP,1,VXT_END,
+/* 2724 */ VXI_BGTR,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2731 */ VXI_BGTR,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2738 */ VXI_BLSS,VXT_JMP,1,VXT_END,
+/* 2742 */ VXI_BGEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2749 */ VXI_BGEQ,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2756 */ VXI_BNEQ,VXT_JMP,1,VXT_END,
+/* 2760 */ VXI_BNEQ,VXT_LIT,6,VXI_JMP,VXT_JMP,1,VXT_END,
+/* 2767 */ VXI_BEQL,VXT_LIT,3,VXI_BRW,VXT_JMP,1,VXT_END,
+/* 2774 */ VXI_BLBC,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
+/* 2780 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
+/* 2788 */ VXT_END,
+/* 2789 */ VXI_BLBS,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
+/* 2797 */ VXT_END,
+/* 2798 */ VXI_BLBS,VXT_REG,0x5A,VXT_JMP,1,VXT_END,
+/* 2804 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,6,VXI_JMP,VXT_JMP,1,
+/* 2812 */ VXT_END,
+/* 2813 */ VXI_BLBC,VXT_REG,0x5A,VXT_LIT,3,VXI_BRW,VXT_JMP,1,
+/* 2821 */ VXT_END,
+/* 2822 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,7,VXI_PUSHAB,VXT_VAL,
+/* 2830 */ 6,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,
+/* 2838 */ VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,
+/* 2846 */ VXT_XFER,SIZEOF(char *) * (short int)xf_job,VXT_END,
+/* 2849 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_kill,
+/* 2857 */ VXT_END,
+/* 2858 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_killalias,
+/* 2866 */ VXT_END,
+/* 2867 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killall,VXT_END,
+/* 2873 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_killaliasall,VXT_END,
+/* 2879 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 2887 */ 3,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_labaddr,VXI_MOVL,VXT_REG,
+/* 2895 */ 0x50,VXT_VAL,0,VXT_END,
+/* 2899 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckdecr,
+/* 2907 */ VXT_END,
+/* 2908 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lckincr,
+/* 2916 */ VXT_END,
+/* 2917 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
+/* 2923 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
+/* 2929 */ VXI_MOVAB,VXT_JMP,1,VXT_ADDR,0,VXT_END,
+/* 2935 */ VXT_IREPL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 2943 */ SIZEOF(char *) * (short int)xf_linefetch,VXT_END,
+/* 2945 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_linestart,VXT_END,
+/* 2949 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 2957 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
+/* 2964 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_lkinit,VXT_END,
+/* 2970 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 2978 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lkname,VXT_END,
+/* 2985 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lock,
+/* 2993 */ VXT_END,
+/* 2994 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3002 */ 2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvpatwrite,VXT_END,
+/* 3009 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwithdraw,
+/* 3017 */ VXT_END,
+/* 3018 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 3026 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_lvzwrite,VXT_END,
+/* 3030 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_m_srchindx,
+/* 3038 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 3044 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_merge,VXT_END,
+/* 3050 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3058 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
+/* 3062 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3070 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_merge_arg,VXT_END,
+/* 3074 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3082 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_flt_mod,VXT_END,
+/* 3089 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3097 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_mul,VXT_END,
+/* 3104 */ VXI_MOVAB,VXT_VAL,0,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,1,
+/* 3112 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_neg,VXT_END,
+/* 3118 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newintrinsic,VXT_END,
+/* 3125 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_newvar,VXT_END,
+/* 3132 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_nullexp,VXI_MOVL,VXT_REG,0x50,
+/* 3140 */ VXT_ADDR,0,VXT_END,
+/* 3143 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 3151 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_numcmp,VXT_END,
+/* 3157 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
+/* 3165 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3173 */ VXT_LIT,4,VXT_XFER,SIZEOF(char *) * (short int)xf_open,VXT_END,
+/* 3178 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 3186 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_pattern,VXT_END,
+/* 3192 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_putindx,
+/* 3200 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 3206 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 3214 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_rdone,VXT_END,
+/* 3221 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 3229 */ 0,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_read,VXT_END,
+/* 3236 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,
+/* 3244 */ 1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 3252 */ SIZEOF(char *) * (short int)xf_readfl,VXT_END,
+/* 3254 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXT_END,
+/* 3258 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_ret,VXT_END,
+/* 3262 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVL,VXT_VAL,2,
+/* 3270 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_retarg,VXT_END,
+/* 3276 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3284 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,
+/* 3292 */ VXT_END,
+/* 3293 */ VXI_PUSHL,VXT_LIT,-1,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3301 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rhdaddr,VXI_MOVL,VXT_REG,0x50,VXT_VAL,0,
+/* 3309 */ VXT_END,
+/* 3310 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 3318 */ SIZEOF(char *) * (short int)xf_rterror,VXT_END,
+/* 3320 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3328 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setals2als,VXT_END,
+/* 3332 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3340 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsin2alsct,VXT_END,
+/* 3344 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3352 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsctin2als,VXT_END,
+/* 3356 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3364 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setalsct2alsct,VXT_END,
+/* 3368 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3376 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2als,VXT_END,
+/* 3380 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3388 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_setfnretin2alsct,VXT_END,
+/* 3392 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3400 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3408 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setextract,VXT_END,
+/* 3413 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3421 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3429 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setp1,VXT_END,
+/* 3434 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3442 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 3450 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setpiece,VXT_END,
+/* 3458 */ VXI_BISB2,VXT_LIT,1,VXT_REG,0x5A,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_dt_true,
+/* 3466 */ VXT_END,
+/* 3467 */ VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3475 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,3,VXI_JSB,
+/* 3483 */ VXT_XFER,SIZEOF(char *) * (short int)xf_setzbrk,VXT_END,
+/* 3486 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3494 */ 2,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3502 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzextract,VXT_END,
+/* 3507 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3515 */ 4,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 3523 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_setzp1,VXT_END,
+/* 3528 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 3536 */ 3,VXI_PUSHAB,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 3544 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,6,VXT_XFER,SIZEOF(char *) * (short int)xf_setzpiece,VXT_END,
+/* 3552 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x50,VXI_MOVAB,VXT_VAL,2,
+/* 3560 */ VXT_REG,0x51,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sorts_after,VXT_END,
+/* 3566 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_srchindx,
+/* 3574 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 3580 */ VXI_MOVAB,VXT_VAL,2,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,1,
+/* 3588 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
+/* 3594 */ VXI_MOVC3,VXT_LIT,16,VXT_VAL,2,VXT_VAL,1,VXT_END,
+/* 3602 */ VXI_MOVAB,VXT_VAL,1,VXT_REG,0x51,VXI_MOVAB,VXT_VAL,0,
+/* 3610 */ VXT_REG,0x50,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_sto,VXT_END,
+/* 3616 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3624 */ 1,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_sub,VXT_END,
+/* 3631 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3639 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svget,VXT_END,
+/* 3643 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 3651 */ SIZEOF(char *) * (short int)xf_psvput,VXT_END,
+/* 3653 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3661 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_svput,VXT_END,
+/* 3665 */ VXI_MOVL,VXT_REG,0x50,VXT_REG,0x5A,VXT_END,
+/* 3671 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tcommit,VXT_END,
+/* 3675 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trollback,VXT_END,
+/* 3682 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_trestart,VXT_END,
+/* 3689 */ VXT_IREPAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,
+/* 3697 */ 2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_tstart,VXT_END,
+/* 3705 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_unlock,VXT_END,
+/* 3711 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3719 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_use,VXT_END,
+/* 3723 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_view,
+/* 3731 */ VXT_END,
+/* 3732 */ VXI_CMPL,VXT_VAL,1,VXT_VAL,2,VXT_END,
+/* 3738 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_write,
+/* 3746 */ VXT_END,
+/* 3747 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wteol,
+/* 3755 */ VXT_END,
+/* 3756 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_wtff,VXT_END,
+/* 3762 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wtone,
+/* 3770 */ VXT_END,
+/* 3771 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_wttab,
+/* 3779 */ VXT_END,
+/* 3780 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_xkill,
+/* 3788 */ VXT_END,
+/* 3789 */ VXT_IREPAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 3797 */ SIZEOF(char *) * (short int)xf_xnew,VXT_END,
+/* 3799 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zallocate,
+/* 3807 */ VXT_END,
+/* 3808 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3816 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zattach,VXT_END,
+/* 3820 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3828 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zcompile,VXT_END,
+/* 3832 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
+/* 3836 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zdeallocate,
+/* 3844 */ VXT_END,
+/* 3845 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 3853 */ 1,VXI_CALLS,VXT_LIT,2,VXT_XFER,SIZEOF(char *) * (short int)xf_zedit,VXT_END,
+/* 3860 */ VXI_PUSHL,VXT_VAL,1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zg1,VXT_END,
+/* 3867 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHL,VXT_VAL,4,VXI_PUSHAB,VXT_VAL,
+/* 3875 */ 3,VXI_PUSHAB,VXT_VAL,2,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zgoto,VXT_END,
+/* 3883 */ VXI_PUSHL,VXT_VAL,1,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_LIT,
+/* 3891 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zhalt,VXT_END,
+/* 3895 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3903 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zhelp,VXT_END,
+/* 3907 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 3915 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zlink,VXT_END,
+/* 3919 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 3927 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zmess,VXT_END,
+/* 3931 */ VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zprevious,
+/* 3939 */ VXT_END,
+/* 3940 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_VAL,5,VXI_PUSHAB,VXT_VAL,
+/* 3948 */ 4,VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,
+/* 3956 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_zprint,VXT_END,
+/* 3964 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,
+/* 3972 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 3980 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
+/* 3982 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,
+/* 3990 */ 2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,3,VXT_XFER,
+/* 3998 */ SIZEOF(char *) * (short int)xf_zshow,VXT_END,
+/* 4000 */ VXI_PUSHL,VXT_LIT,0,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4008 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
+/* 4015 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4023 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_zstep,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_zcont,VXT_END,
+/* 4030 */ VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_restartpc,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4038 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_zsystem,VXT_END,
+/* 4042 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_ztcommit,
+/* 4050 */ VXT_END,
+/* 4051 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztrigger,VXT_END,
+/* 4057 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_ztstart,VXT_END,
+/* 4063 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zwritesvn,
+/* 4071 */ VXT_END,
+/* 4072 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHL,VXT_VAL,
+/* 4080 */ 2,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzwrite,VXT_END,
+/* 4087 */ VXI_CALLS,VXT_LIT,0,VXT_XFER,SIZEOF(char *) * (short int)xf_igetdst,VXI_MOVL,VXT_REG,0x50,
+/* 4095 */ VXT_ADDR,0,VXT_END,
+/* 4098 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4106 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget1,VXT_END,
+/* 4110 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnpop,
+/* 4118 */ VXT_END,
+/* 4119 */ VXI_PUSHL,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_glvnslot,
+/* 4127 */ VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,VXT_END,
+/* 4133 */ VXI_PUSHL,VXT_VAL,3,VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,
+/* 4141 */ 1,VXI_JSB,VXT_XFER,SIZEOF(char *) * (short int)xf_indsavglvn,VXT_END,
+/* 4146 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_JSB,VXT_XFER,
+/* 4154 */ SIZEOF(char *) * (short int)xf_indsavlvn,VXT_END,
+/* 4156 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4164 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshlvn,VXI_MOVL,VXT_REG,0x50,VXT_ADDR,0,
+/* 4172 */ VXT_END,
+/* 4173 */ VXT_IREPAB,VXT_VAL,3,VXI_PUSHL,VXT_VAL,2,VXI_CALLS,VXT_VAL,
+/* 4181 */ 1,VXT_XFER,SIZEOF(char *) * (short int)xf_savgvn,VXT_END,
+/* 4185 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_savlvn,
+/* 4193 */ VXT_END,
+/* 4194 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4202 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_shareslot,VXT_END,
+/* 4206 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4214 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_stoglvn,VXT_END,
+/* 4218 */ VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4226 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_rfrshgvn,VXT_END,
+/* 4230 */ VXI_PUSHAB,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,
+/* 4238 */ 0,VXI_CALLS,VXT_LIT,3,VXT_XFER,SIZEOF(char *) * (short int)xf_indfnname2,VXT_END,
+/* 4245 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 4253 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_indget2,VXT_END,
+/* 4257 */ VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_indmerge2,
+/* 4265 */ VXT_END,
+/* 4266 */ VXI_PUSHAB,VXT_VAL,1,VXI_PUSHAB,VXT_VAL,0,VXI_CALLS,VXT_LIT,
+/* 4274 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_litc,VXT_END,
+/* 4278 */ VXI_MOVC3,VXT_LIT,16,VXT_VAL,2,VXT_VAL,1,VXI_PUSHAB,
+/* 4286 */ VXT_VAL,1,VXI_CALLS,VXT_LIT,1,VXT_XFER,SIZEOF(char *) * (short int)xf_stolitc,VXT_END,
+/* 4294 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,4,VXI_PUSHL,VXT_VAL,
+/* 4302 */ 3,VXI_PUSHL,VXT_VAL,2,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,
+/* 4310 */ VXT_LIT,5,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzpeek,VXT_END,
+/* 4315 */ VXI_PUSHAB,VXT_VAL,0,VXI_PUSHAB,VXT_VAL,1,VXI_CALLS,VXT_LIT,
+/* 4323 */ 2,VXT_XFER,SIZEOF(char *) * (short int)xf_fnzsyslog,VXT_END,
+/* 4327 */ VXT_IREPAB,VXT_VAL,2,VXI_CALLS,VXT_VAL,1,VXT_XFER,SIZEOF(char *) * (short int)xf_zrupdate,
+/* 4335 */ VXT_END,
+/* 4336 */ 367,387,377,2650,2658,2654,2917,2929,
+/* 4344 */ 2923,0,0,0,506,482,473,0,
+/* 4352 */ 0,469,2155,2193,2174,2798,2813,2804,
+/* 4360 */ 2774,2789,2780,2666,2677,2670,2756,2767,
+/* 4368 */ 2760,2702,2713,2706,2720,2731,2724,2738,
+/* 4376 */ 2749,2742,2684,2695,2688,2125,2145,2135,
+/* 4384 */ 397,417,407};
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/fis-gtm.git
More information about the debian-med-commit
mailing list