Exemple #1
0
	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();
	}
Exemple #2
0
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;
}
Exemple #3
0
	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();
	}