X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresolver.cpp;h=702ce9670d59100d649a47dd29a7df060dd557b2;hb=26fb816da7078d687f7540e2e0a2d525801592f7;hp=1a0b99fb4c12e78a61f409513b59152d7ee292a1;hpb=a56b7174bc4d39064e5fb8d22953963f224315db;p=netvis.git diff --git a/source/resolver.cpp b/source/resolver.cpp index 1a0b99f..702ce96 100644 --- a/source/resolver.cpp +++ b/source/resolver.cpp @@ -23,7 +23,7 @@ Resolver::Resolver(): Resolver::~Resolver() { - done=true; + done = true; join(); } @@ -34,6 +34,24 @@ void Resolver::push(Host *h) in_queue.push_back(h); } +void Resolver::cancel(Host *h) +{ + MutexLock l_(mutex); + + if(h==current) + { + current=0; + return; + } + + for(list::iterator i=in_queue.begin(); i!=in_queue.end(); ++i) + if(*i==h) + { + in_queue.erase(i); + break; + } +} + void Resolver::tick() { MutexLock l_(mutex); @@ -47,29 +65,29 @@ void Resolver::main() { while(!done) { - while(1) + while(!done) { - Host *host; + sockaddr_in addr; + addr.sin_family = AF_INET; { MutexLock l_(mutex); if(in_queue.empty()) break; - host=in_queue.front(); + current = in_queue.front(); in_queue.erase(in_queue.begin()); + addr.sin_addr.s_addr = htonl(current->get_address()); } - sockaddr_in addr; - addr.sin_family=AF_INET; - addr.sin_addr.s_addr=htonl(host->get_address()); char buf[128]; - int err=getnameinfo(reinterpret_cast(&addr), sizeof(addr), buf, sizeof(buf), 0, 0, NI_NOFQDN|NI_NAMEREQD); + int err = getnameinfo(reinterpret_cast(&addr), sizeof(addr), buf, sizeof(buf), 0, 0, NI_NOFQDN|NI_NAMEREQD); if(err==0) { MutexLock l_(mutex); - out_queue.push_back(Result(host, buf)); + if(current) + out_queue.push_back(Result(current, buf)); } } - Time::sleep(Time::sec); + Time::sleep(100*Time::msec); } }