session::~session() { aux::dump_call_profile(); TORRENT_ASSERT(m_impl); boost::shared_ptr<session_impl> ptr = m_impl; // capture the shared_ptr in the dispatched function // to keep the session_impl alive m_impl->get_io_service().dispatch([=]() { ptr->abort(); }); #if defined TORRENT_ASIO_DEBUGGING int counter = 0; while (log_async()) { std::this_thread::sleep_for(seconds(1)); ++counter; std::printf("\x1b[2J\x1b[0;0H\x1b[33m==== Waiting to shut down: %d ==== \x1b[0m\n\n" , counter); } async_dec_threads(); std::fprintf(stderr, "\n\nEXPECTS NO MORE ASYNC OPS\n\n\n"); #endif if (m_thread && m_thread.unique()) m_thread->join(); }
result file_logger() { result r; const std::string filename = "file_logger.log"; std::remove(filename.c_str()); mlog::file_logger log(filename); mlog::manager->set_log(log); mlog::manager->set_default_settings(); r.normal = single_thread_test(); mlog::manager->set_default_settings(); mlog::manager->use_thread_id(true); r.with_thread_id = single_thread_test(); mlog::manager->set_default_settings(); mlog::manager->use_time(true); r.with_time = single_thread_test(); mlog::manager->set_default_settings(); mlog::manager->use_position(true); r.with_pos = single_thread_test(); std::remove(filename.c_str()); mlog::file_logger_thread_safe log_ts(filename); mlog::manager->set_log(log_ts); mlog::manager->set_default_settings(); r.thread_safe = single_thread_test(); std::remove(filename.c_str()); mlog::async_logger<mlog::file_logger> log_async(filename); mlog::manager->set_log(log_async); mlog::manager->set_default_settings(); r.async = single_thread_test(); log_async.flush(); std::cout << "file tests:" << std::endl; std::cout << "\t" << "mlog::file_logger => " << r.normal << "ms" << std::endl; std::cout << "\t" << "mlog::thread_safe<mlog::file_logger> => " << r.thread_safe << "ms" << std::endl; std::cout << "\t" << "mlog::async_logger<mlog::file_logger> => " << r.async << "ms" << std::endl; std::cout << "\t\twith thread id:\t\t" << ((r.with_thread_id - r.normal) > 0 ? "+" : "") << r.with_thread_id - r.normal << "ms" << std::endl; std::cout << "\t\twith time:\t\t" << ((r.with_time - r.normal) > 0 ? "+" : "") << r.with_time - r.normal << "ms" << std::endl; std::cout << "\t\twith code position:\t" << ((r.with_pos - r.normal) > 0 ? "+" : "") << r.with_pos - r.normal << "ms" << std::endl; std::remove(filename.c_str()); return r; }
session::~session() { aux::dump_call_profile(); TORRENT_ASSERT(m_impl); TORRENT_ASYNC_CALL(abort); #if defined TORRENT_ASIO_DEBUGGING int counter = 0; while (log_async()) { sleep(1000); ++counter; printf("\x1b[2J\x1b[0;0H\x1b[33m==== Waiting to shut down: %d ==== \x1b[0m\n\n" , counter); } async_dec_threads(); fprintf(stderr, "\n\nEXPECTS NO MORE ASYNC OPS\n\n\n"); #endif if (m_thread && m_thread.unique()) m_thread->join(); }