diff --git a/winixd/core/app.cpp b/winixd/core/app.cpp index 1da4646..cc48b7c 100644 --- a/winixd/core/app.cpp +++ b/winixd/core/app.cpp @@ -766,13 +766,28 @@ void App::ProcessRequestThrow() void App::ProcessRequest() { + system.load_avg.StartRequest(cur.request); + log << log2 << config.log_delimiter << logend; + try { - system.load_avg.StartRequest(cur.request); - log << log2 << config.log_delimiter << logend; - ProcessRequestThrow(); + } + catch(const std::exception & e) + { + log << log1 << "App: there was an exception: std::exception: " << e.what() << logend; + } + catch(const Error & e) + { + log << log1 << "App: there was an exception: Error: " << e << logend; + } + catch(...) + { + log << log1 << "App: there was an unknown exception" << logend; + } + try + { if( cur.request->run_state == Request::RunState::normal_run ) { cur.request->FinishRequest(); @@ -780,49 +795,41 @@ void App::ProcessRequest() } SaveSessionsIfNeeded(); + } + catch(...) + { + log << log1 << "App: an exception when finishing a request" << logend; + } + try + { if( cur.request->run_state == Request::RunState::finished ) { ClearAfterRequest(); } } - catch(const std::exception & e) - { - log << log1 << "App: there was an exception: std::exception: " << e.what() << logend; - } - catch(const Error & e) - { - log << log1 << "App: there was an exception: Error: " << e << logend; - } catch(...) { - log << log1 << "App: there was an unknown exception" << logend; + log << log1 << "App: an exception when clearing after a request" << logend; } } void App::ClearAfterRequest() { - try - { - // simple operations which should not throw an exception - cur.request->Clear(); - cur.session->ClearAfterRequest(); - cur.session = session_manager.GetTmpSession(); - cur.mount = system.mounts.GetEmptyMount(); - system.mounts.pmount = cur.mount; // IMPROVE ME system.mounts.pmount will be removed - // send_data_buf doesn't have to be cleared and it is better to not clear it (optimizing) + // simple operations which should not throw an exception + cur.request->Clear(); + cur.session->ClearAfterRequest(); + cur.session = session_manager.GetTmpSession(); + cur.mount = system.mounts.GetEmptyMount(); + system.mounts.pmount = cur.mount; // IMPROVE ME system.mounts.pmount will be removed + // send_data_buf doesn't have to be cleared and it is better to not clear it (optimizing) - model_connector.set_winix_request(nullptr); - model_connector.set_winix_session(nullptr); - model_connector.set_winix_session_logger(nullptr); + model_connector.set_winix_request(nullptr); + model_connector.set_winix_session(nullptr); + model_connector.set_winix_session_logger(nullptr); - log << logendrequest; - } - catch(...) - { - log << log1 << "App: an exception when clearing after a request" << logend; - } + log << logendrequest; }