Changeset 761


Ignore:
Timestamp:
05/17/09 14:12:39 (10 years ago)
Author:
Eoin
Message:

Fixed a stupid loop because of deadline timer going out of scope.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/halSession.cpp

    r760 r761  
    3232 
    3333bit_impl::bit_impl() : 
    34         keep_checking_(false), 
    3534        bittorrent_ini_(L"BitTorrent.xml"), 
    3635        the_torrents_(bittorrent_ini_), 
    3736        action_timer_(io_service_), 
     37        alert_timer_(io_service_), 
     38        keep_checking_(false), 
    3839        default_torrent_max_connections_(-1), 
    3940        default_torrent_max_uploads_(-1), 
     
    119120         
    120121        acquire_work_object(); 
     122        start_alert_handler(); 
    121123 
    122124        service_threads_.push_back(shared_thread_ptr(new  
    123125                thread_t(bind(&bit_impl::service_thread, this, service_threads_.size())))); 
    124126 
    125         start_alert_handler(); 
    126127 
    127128        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"bit_impl::bit_impl()") 
     
    453454        mutex_t::scoped_lock l(mutex_); 
    454455 
    455         if (!keep_checking_) 
    456         { 
    457                 keep_checking_ = true; 
    458  
    459                 boost::asio::deadline_timer t(io_service_, pt::milliseconds(100)); 
    460                 io_service_.post(bind(&bit_impl::alert_handler, this)); 
     456        keep_checking_ = true; 
     457 
     458        if (!alert_timer_.expires_at().is_special()) 
     459        { 
     460                HAL_DEV_MSG(hal::wform(L"Alert handler already active")); 
     461 
     462                return; 
    461463        } 
    462464        else 
    463465        { 
    464                 HAL_DEV_MSG(hal::wform(L"Alert handler already active")); 
    465         } 
     466                alert_timer_.expires_from_now(pt::milliseconds(100)); 
     467 
     468                HAL_DEV_MSG(L"Beginning timer async_wait"); 
     469                alert_timer_.async_wait(bind(&bit_impl::alert_handler_wait, this, _1)); 
     470        } 
     471 
     472 
    466473 
    467474/*      if (alert_checker_ == boost::none) 
     
    480487        mutex_t::scoped_lock l(mutex_); 
    481488 
    482         if (keep_checking_) 
    483         { 
    484                 HAL_DEV_MSG(hal::wform(L"Stopping alert handler..."));           
    485  
    486                 keep_checking_ = false; 
     489        if (keep_checking_ = false) 
     490        { 
     491                HAL_DEV_MSG(hal::wform(L"Stopped alert handler...")); 
    487492        } 
    488493        else 
     
    514519} 
    515520 
    516 void bit_impl::alert_handler_wait(const boost::system::error_code& /*e*/) 
    517 { 
    518         if (keep_checking_) 
     521void bit_impl::alert_handler_wait(const boost::system::error_code& e) 
     522{        
     523        if (e != boost::asio::error::operation_aborted) 
     524        {                
     525                if (keep_checking_) 
     526                { 
     527                        alert_timer_.expires_from_now(pt::seconds(2)); 
     528                        alert_timer_.async_wait(bind(&bit_impl::alert_handler_wait, this, _1));                  
     529                } 
     530 
    519531                alert_handler(); 
     532        } 
     533        else 
     534        { 
     535                HAL_DEV_MSG(L"Alert deadline canceled"); 
     536        } 
    520537} 
    521538 
     
    901918                 
    902919                p_alert = session_->pop_alert(); 
    903  
    904                 boost::this_thread::interruption_point(); 
    905920        }        
    906          
    907         boost::asio::deadline_timer t(io_service_, pt::milliseconds(100)); 
    908         t.async_wait(bind(&bit_impl::alert_handler_wait, this, _1)); 
    909          
     921                         
    910922        }  
    911 /*      catch(boost::thread_interrupted&) 
    912         { 
    913                 // Not an error! 
    914  
    915                 event_log().post(shared_ptr<EventDetail>( 
    916                         new EventMsg(L"thread_interrupted exception", event_logger::info))); 
    917  
    918                 return; 
    919         }*/ 
    920923        HAL_GENERIC_FN_EXCEPTION_CATCH(L"bit_impl::alert_handler()") 
    921924} 
  • trunk/src/halSession.hpp

    r760 r761  
    10001000        boost::asio::deadline_timer action_timer_; 
    10011001 
     1002        boost::asio::deadline_timer alert_timer_; 
     1003        bool keep_checking_; 
     1004 
    10021005        typedef boost::shared_ptr<thread_t> shared_thread_ptr; 
    10031006 
    10041007        std::vector<shared_thread_ptr> service_threads_; 
    1005         bool keep_checking_; 
    10061008         
    10071009        int default_torrent_max_connections_; 
Note: See TracChangeset for help on using the changeset viewer.