diff --git a/scripts/common.m4 b/scripts/common.m4 index 7e184cc4..3dd48d9e 100644 --- a/scripts/common.m4 +++ b/scripts/common.m4 @@ -118,3 +118,25 @@ AC_DEFUN([TORRENT_CHECK_EXECINFO], [ AC_MSG_RESULT(no) ]) ]) + +AC_DEFUN([TORRENT_CHECK_ALIGN], [ + AC_MSG_CHECKING(byte alignment) + + AC_RUN_IFELSE( + [[#include + int main() { + char buf[5] = { 0, 0, 0, 0, 1 }; + int i; + for (i = 0; i < 4; ++i) + if (*(uint32_t*)(buf + 1) == 0) return -1; + return 0; + } + ]], + [ + AC_MSG_RESULT(none) + ], [ + AC_DEFINE(USE_ALIGN, 1, Require byte alignment) + AC_MSG_RESULT(required) + ]) +]) + diff --git a/src/display/window_download_list.cc b/src/display/window_download_list.cc index c4704f07..512fab8b 100644 --- a/src/display/window_download_list.cc +++ b/src/display/window_download_list.cc @@ -58,7 +58,7 @@ WindowDownloadList::~WindowDownloadList() { void WindowDownloadList::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); m_canvas->erase(); diff --git a/src/display/window_download_statusbar.cc b/src/display/window_download_statusbar.cc index e51b5746..58ff9c37 100644 --- a/src/display/window_download_statusbar.cc +++ b/src/display/window_download_statusbar.cc @@ -53,7 +53,7 @@ WindowDownloadStatusbar::WindowDownloadStatusbar(core::Download* d) : void WindowDownloadStatusbar::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); m_canvas->erase(); diff --git a/src/display/window_file_list.cc b/src/display/window_file_list.cc index 89f282a8..c0c5812e 100644 --- a/src/display/window_file_list.cc +++ b/src/display/window_file_list.cc @@ -53,7 +53,7 @@ WindowFileList::WindowFileList(core::Download* d, unsigned int* focus) : void WindowFileList::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 10 * 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 10 * 1000000).round_seconds()); m_canvas->erase(); if (m_download->get_download().get_entry_size() == 0 || diff --git a/src/display/window_http_queue.cc b/src/display/window_http_queue.cc index 7628b68a..5bb1483b 100644 --- a/src/display/window_http_queue.cc +++ b/src/display/window_http_queue.cc @@ -58,7 +58,7 @@ WindowHttpQueue::WindowHttpQueue(core::HttpQueue* q) : void WindowHttpQueue::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); cleanup_list(); diff --git a/src/display/window_peer_info.cc b/src/display/window_peer_info.cc index a944441f..3f7de710 100644 --- a/src/display/window_peer_info.cc +++ b/src/display/window_peer_info.cc @@ -57,7 +57,7 @@ WindowPeerInfo::WindowPeerInfo(core::Download* d, PList* l, PList::iterator* f) void WindowPeerInfo::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); m_canvas->erase(); int y = 0; diff --git a/src/display/window_peer_list.cc b/src/display/window_peer_list.cc index 655cc46e..26560857 100644 --- a/src/display/window_peer_list.cc +++ b/src/display/window_peer_list.cc @@ -56,7 +56,7 @@ WindowPeerList::WindowPeerList(core::Download* d, PList* l, PList::iterator* f) void WindowPeerList::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); m_canvas->erase(); int x = 2; diff --git a/src/display/window_statusbar.cc b/src/display/window_statusbar.cc index 1f3d20e7..0c901861 100644 --- a/src/display/window_statusbar.cc +++ b/src/display/window_statusbar.cc @@ -54,7 +54,7 @@ WindowStatusbar::WindowStatusbar(core::Manager* c) : void WindowStatusbar::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); m_canvas->erase(); diff --git a/src/display/window_title.cc b/src/display/window_title.cc index 423d8dc5..b7af5fb2 100644 --- a/src/display/window_title.cc +++ b/src/display/window_title.cc @@ -48,7 +48,7 @@ WindowTitle::WindowTitle(const std::string& s) : void WindowTitle::redraw() { - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 1000000).round_seconds()); m_canvas->erase(); m_canvas->print(std::max(0, (m_canvas->get_width() - (int)m_title.size()) / 2 - 4), 0, diff --git a/src/display/window_tracker_list.cc b/src/display/window_tracker_list.cc index ac7b850e..3f6d3e2e 100644 --- a/src/display/window_tracker_list.cc +++ b/src/display/window_tracker_list.cc @@ -55,7 +55,7 @@ WindowTrackerList::WindowTrackerList(core::Download* d, unsigned int* focus) : void WindowTrackerList::redraw() { // TODO: Make this depend on tracker signal. - utils::displayScheduler.insert(&m_taskUpdate, utils::Timer::cache().round_seconds() + 10 * 1000000); + utils::displayScheduler.insert(&m_taskUpdate, (utils::Timer::cache() + 10 * 1000000).round_seconds()); m_canvas->erase(); int pos = 0; diff --git a/src/main.cc b/src/main.cc index 2ac72fca..84848af6 100644 --- a/src/main.cc +++ b/src/main.cc @@ -225,13 +225,15 @@ main(int argc, char** argv) { while (!uiControl.is_shutdown_completed()) { utils::Timer::update(); utils::taskScheduler.execute(utils::Timer::cache()); - + // This needs to be called every second or so. Currently done by // the throttle task in libtorrent. if (!utils::displayScheduler.empty() && utils::displayScheduler.get_next_timeout() <= utils::Timer::cache()) uiControl.get_display().do_update(); + //utils::Timer::update(); + // Do shutdown check before poll, not after. uiControl.get_core().get_poll_manager()->poll(!utils::taskScheduler.empty() ? utils::taskScheduler.get_next_timeout() - utils::Timer::cache() :