rem: DBC_ENSURE(is_active() != true);
add: DBC_ENSURE(is_running() != true); DBC_ENSURE(is_prepared() != true);
context: void ECA_ENGINE::stop_operation(void){  // ---  DBC_REQUIRE(is_active() == true);  // ---  /* stop realtime devices */  for (unsigned int adev_sizet = 0; adev_sizet != realtime_objects_rep.size(); adev_sizet++) {    if (realtime_objects_rep[adev_sizet]->is_running() == true) realtime_objects_rep[adev_sizet]->stop();  }  /* release samplebuffer rt-locks */  for(size_t n = 0; n < cslots_rep.size(); n++) {    cslots_rep[n]->set_rt_lock(false);  }  mixslot_repp->set_rt_lock(false);  stop_servers();  /* lower priority back to normal */  if (csetup_repp->raised_priority() == true) {    struct sched_param sparam;    sparam.sched_priority = 0;    if (::sched_setscheduler(0, SCHED_OTHER, &sparam) == -1)      ECA_LOG_MSG(ECA_LOGGER::info, "(eca-engine) Unable to change scheduling back to SCHED_OTHER!");    else      ECA_LOG_MSG(ECA_LOGGER::system_objects, "(eca-engine) Changed back to non-realtime scheduling SCHED_OTHER.");  }  /* release chainsetup lock */  csetup_repp->toggle_locked_state(false);  /* signals wait_for_stop() that engine operation has stopped */  signal_stop();  active_rep = false;  // ---  DBC_ENSURE(is_active() != true);  // ---}