X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresolver.cpp;h=702ce9670d59100d649a47dd29a7df060dd557b2;hb=26fb816da7078d687f7540e2e0a2d525801592f7;hp=1bf6c39c4eb19958f4b1540edfa9d080e77086e0;hpb=69bcc0683c313b952981a50a6d66a6ee218ba755;p=netvis.git diff --git a/source/resolver.cpp b/source/resolver.cpp index 1bf6c39..702ce96 100644 --- a/source/resolver.cpp +++ b/source/resolver.cpp @@ -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); 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); } }