Use thread_base::interrupt for all SIGUSR1 interrupt signals and don't set a handler if it's not supported.

This commit is contained in:
rakshasa
2013-03-03 05:00:31 +09:00
parent e28692492b
commit 3b2a47a6d0
2 changed files with 11 additions and 5 deletions
+9 -3
View File
@@ -202,9 +202,15 @@ main(int argc, char** argv) {
SignalHandler::set_sigaction_handler(SIGBUS, &handle_sigbus);
// SIGUSR1 is used for interrupting polling, forcing that thread
// to process new non-socket events.
SignalHandler::set_handler(SIGUSR1, sigc::ptr_fun(&do_nothing));
// SIGUSR1 is used for interrupting polling, forcing the target
// thread to process new non-socket events.
//
// LibTorrent uses sockets for this purpose on Solaris and other
// platforms that do not properly pass signals to the target
// threads. Use '--enable-interrupt-socket' when configuring
// LibTorrent to enable this workaround.
if (torrent::thread_base::should_handle_sigusr1())
SignalHandler::set_handler(SIGUSR1, sigc::ptr_fun(&do_nothing));
torrent::log_add_group_output(torrent::LOG_NOTICE, "important");
torrent::log_add_group_output(torrent::LOG_INFO, "complete");
+2 -2
View File
@@ -160,7 +160,7 @@ ThreadBase::queue_item(thread_base_func newFunc) {
// Make it also restart inactive threads?
if (m_state == STATE_ACTIVE)
pthread_kill(m_thread, SIGUSR1);
interrupt();
}
void
@@ -168,7 +168,7 @@ ThreadBase::interrupt_main_polling() {
int sleep_length = 0;
while (ThreadBase::is_main_polling()) {
pthread_kill(torrent::main_thread()->pthread(), SIGUSR1);
torrent::main_thread()->interrupt();
if (!ThreadBase::is_main_polling())
return;