void kill_var(void) { ESTABLISH(replication_ch); if (gv_cur_region->read_only) { gv_replication_error = TRUE; REVERT; return; } assert(gv_cur_region->dyn.addr->acc_meth == dba_cm); gvcmx_kill(TRUE); REVERT; }
void op_gvkill(void) { gd_region *reg; error_def(ERR_DBPRIVERR); if (gv_cur_region->read_only) rts_error(VARLSTCNT(4) ERR_DBPRIVERR, 2, DB_LEN_STR(gv_cur_region)); if (gv_curr_subsc_null && gv_cur_region->null_subs == FALSE) sgnl_gvnulsubsc(); if (gv_cur_region->dyn.addr->acc_meth == dba_bg || gv_cur_region->dyn.addr->acc_meth == dba_mm) { if (gv_target->root) { gvcst_kill(TRUE); } } else if (gv_cur_region->dyn.addr->acc_meth == dba_cm) { gvcmx_kill(TRUE); }else { gvusr_kill(TRUE); } if (gv_cur_region->dyn.addr->repl_list) { gv_replication_error = gv_replopen_error; gv_replopen_error = FALSE; reg = gv_cur_region; while (gv_cur_region = gv_cur_region->dyn.addr->repl_list) /* set replicated segments */ { if (gv_cur_region->open) { change_reg(); kill_var(); } else gv_replication_error = TRUE; } gv_cur_region = reg; change_reg(); if (gv_replication_error) sgnl_gvreplerr(); } }
void op_gvkill(void) { gd_region *reg; DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; if (gv_cur_region->read_only) rts_error(VARLSTCNT(4) ERR_DBPRIVERR, 2, DB_LEN_STR(gv_cur_region)); if (TREF(gv_last_subsc_null) && NEVER == gv_cur_region->null_subs) sgnl_gvnulsubsc(); if (gv_cur_region->dyn.addr->acc_meth == dba_bg || gv_cur_region->dyn.addr->acc_meth == dba_mm) { if (IS_OK_TO_INVOKE_GVCST_KILL(gv_target)) gvcst_kill(TRUE); } else if (gv_cur_region->dyn.addr->acc_meth == dba_cm) gvcmx_kill(TRUE); else gvusr_kill(TRUE); if (gv_cur_region->dyn.addr->repl_list) { gv_replication_error = gv_replopen_error; gv_replopen_error = FALSE; reg = gv_cur_region; while (gv_cur_region = gv_cur_region->dyn.addr->repl_list) /* set replicated segments */ { if (gv_cur_region->open) { change_reg(); kill_var(); } else gv_replication_error = TRUE; } gv_cur_region = reg; change_reg(); if (gv_replication_error) sgnl_gvreplerr(); } }