// This may throw for invalid domain or level. std::ostream& debug_out(debug_level::flag level, const std::string& domain) { debug_internal::DebugState::domain_map_t& dm = debug_internal::get_debug_state().get_domain_map(); debug_internal::DebugState::domain_map_t::iterator level_map = dm.find(domain); if (level_map == dm.end()) { // no such domain std::string msg = "debug_out(): Debug state doesn't contain the requested domain: \"" + domain + "\"."; if (domain != "default") { debug_out(debug_level::warn, "default") << msg << "\n"; debug_out(debug_level::info, "default") << "Auto-creating the missing domain.\n"; debug_register_domain(domain); debug_out(debug_level::warn, "default") << "The message follows:\n"; return debug_out(level, domain); // try again } // this is an internal error THROW_FATAL(debug_internal_error(msg.c_str())); } debug_internal::DebugState::level_map_t::iterator os = level_map->second.find(level); if (level_map == dm.end()) { std::string msg = std::string("debug_out(): Debug state doesn't contain the requested level ") + debug_level::get_name(level) + " in domain: \"" + domain + "\"."; // this is an internal error THROW_FATAL(debug_internal_error(msg.c_str())); } return *(os->second); }
long joy_core::update_error(joy_exception exp) { ERROR_MUTEX_LOCK(m_error_mutex); if (m_last_error_read) { m_error_source = exp.get_source(); m_error_code = exp.get_code(); m_last_error_read = false; /* Latch last error until read */ } ERROR_MUTEX_UNLOCK(m_error_mutex); #ifdef DEBUG_PRINTS switch(exp.get_source()) { case JOY_INTERNAL_ERROR: debug_internal_error(); break; case JOY_LINUX_ERROR: debug_linux_error(); break; } #endif return JOY_FAILURE; }
long eprom24x_core::update_error(eprom24x_exception rxp) { MUTEX_LOCK(m_error_mutex); if (m_last_error_read) { m_error_source = rxp.get_source(); m_error_code = rxp.get_code(); m_last_error_read = false; // Latch last error until read } MUTEX_UNLOCK(m_error_mutex); #ifdef DEBUG_PRINTS switch(rxp.get_source()) { case EPROM24x_INTERNAL_ERROR: debug_internal_error(); break; case EPROM24x_LINUX_ERROR: debug_linux_error(); break; } #endif return EPROM24x_FAILURE; }