static pwr_tStatus terminate ( ini_sContext *cp ) { pwr_tStatus sts; qcom_SignalAnd(&sts, &qcom_cQini, 0); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_terminate); qcom_Exit(NULL); /* Now sleep for a while */ sleep(3); /* Unlink shared memory and semaphores */ qdb_UnlinkDb(); /* Unlink errlog mwessage queue */ errl_Unlink(); exit(1); }
static pwr_tStatus terminate ( ini_sContext *cp ) { pwr_tStatus sts; qcom_SignalAnd(&sts, &qcom_cQini, 0); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_terminate); //qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop); //qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_oldPlcStopDone, qcom_cTmoEternal); qcom_Exit(NULL); /* Kill programs which until now doesn't handle qcom */ /* for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; pp = lst_Succ(NULL, pl, &pl)) { if (strncmp("pwr_webmonmh", pp->proc.name, 12) == 0) { kill(pp->proc.pid, SIGKILL); } else if (strncmp("pwr_webmon", pp->proc.name, 10) == 0) { kill(pp->proc.pid, SIGKILL); } } */ /* Now sleep for a while */ sleep(3); /* Unlink shared memory and semaphores */ gdb_UnlinkDb(); qdb_UnlinkDb(); /* Destroy message handler semaphore */ mh_UtilDestroyEvent(); #if defined OS_POISIX /* Unlink errlog mwessage queue */ errl_Unlink(); #endif exit(1); }
static pwr_tStatus terminate() { pwr_tStatus sts; qcom_SignalAnd(&sts, &qcom_cQini, 0); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_terminate); // qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop); // qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_oldPlcStopDone, // qcom_cTmoEternal); qcom_Exit(NULL); /* Kill programs which until now doesn't handle qcom */ /* for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; pp = lst_Succ(NULL, pl, &pl)) { if (str_StartsWith(pp->proc.name, "pwr_webmonmh")) { kill(pp->proc.pid, SIGKILL); } else if (str_StartsWith(pp->proc.name, "pwr_webmon")) { kill(pp->proc.pid, SIGKILL); } } */ /* Now sleep for a while */ sleep(3); /* Unlink shared memory and semaphores */ gdb_UnlinkDb(); qdb_UnlinkDb(); delete_locks(); /* Destroy message handler semaphore */ mh_UtilDestroyEvent(); /* Unlink errlog message queue */ errl_Unlink(); exit(EXIT_SUCCESS); }
static pwr_tStatus restart ( ini_sContext *cp ) { pwr_tStatus sts; char time[24]; lst_sEntry *pl; ini_sProc *pp; ini_CheckContext(&sts, cp); ini_ReadBootFile(&sts, cp); ini_CheckNode(&sts, cp); checkErrors(cp); if (cp->flags.b.verbose) logCardinality(cp); qcom_SignalAnd(&sts, &qcom_cQini, 0); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_swapInit); ini_ReloadNode(&sts, cp); if (cp->flags.b.verbose) logChanges(cp); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_rebuildInit); ini_RebuildNode(&sts, cp); ini_DecodeBodies(&sts, cp, 0); ini_DecodeBodies(&sts, cp, 1); if (cp->flags.b.verbose) errh_LogInfo(&cp->log, "Update bodies of io objects"); ini_UpdateBodies(&sts, cp, 1); io_init_signals(); ini_ProcTable(&sts, cp); // ini_ProcLoad(&sts, cp, cp->plc); // ini_ProcStart(&sts, cp, cp->plc); ini_ProcIter(&sts, cp, proc_mProcess_user, ini_mProc_plc, ini_ProcLoad); ini_ProcIter(&sts, cp, proc_mProcess_user, ini_mProc_plc, ini_ProcStart); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcInit); qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_newPlcInitDone | cp->plc_sigmask, qcom_cTmoEternal); errh_LogInfo(&cp->log, "Entering time critical period, stopping old PLC"); qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop); qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_oldPlcStopDone | cp->plc_sigmask, qcom_cTmoEternal); qcom_SignalAnd(&sts, &qcom_cQini, ~ini_mEvent_oldPlcStop); ini_UpdateBodies(&sts, cp, 0); qcom_SignalAnd(&sts, &qcom_cQini, ~cp->plc_sigmask); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_newPlcStart); qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_newPlcStartDone | cp->plc_sigmask, qcom_cTmoEternal); errh_LogInfo(&cp->log, "Time critical period over, new PLC is running"); qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_swapDone); for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; pp = lst_Succ(NULL, pl, &pl)) { if ( pp->flags.m & ini_mProc_plc && pp->objectp) { pwr_sClass_PlcProcess *plc = pp->objectp; time_GetTime(&plc->LastChgTime); if ( time_Dcomp(&plc->StartTime, &plc->StopTime) == 1) time_Dsub(&plc->StallTime, &plc->StartTime, &plc->StopTime); else plc->StallTime = pwr_cNDeltaTime; time_DtoAscii(&plc->StallTime, 1, time, sizeof(time)); cp->np->RestartStallTime = plc->StallTime; } } cp->log.put.type.s = 2; errh_LogInfo(&cp->log, "IO stall time: %s", time); ini_FreeBodies(&sts, cp, 0); ini_FreeBodies(&sts, cp, 1); return sts; }