X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fnet%2Fresolve.cpp;h=9ec5395df99c5b2504965dbb998029d0933f7a30;hb=HEAD;hp=006f210d777eb2aa38d7e5df91ecc1c25ca20c0d;hpb=d20870655aeca0614d9fc315fe5f9893ebdc7aa3;p=libs%2Fnet.git diff --git a/source/net/resolve.cpp b/source/net/resolve.cpp index 006f210..9ec5395 100644 --- a/source/net/resolve.cpp +++ b/source/net/resolve.cpp @@ -1,9 +1,9 @@ -#include "platform_api.h" +#include "resolve.h" #include #include +#include "platform_api.h" #include "sockaddr_private.h" #include "socket.h" -#include "resolve.h" using namespace std; @@ -40,16 +40,16 @@ namespace Net { SockAddr *resolve(const string &host, const string &serv, Family family) { - const char *chost = (host.empty() ? 0 : host.c_str()); - const char *cserv = (serv.empty() ? 0 : serv.c_str()); + const char *chost = (host.empty() ? nullptr : host.c_str()); + const char *cserv = (serv.empty() ? nullptr : serv.c_str()); int flags = 0; if(host=="*") { flags = AI_PASSIVE; - chost = 0; + chost = nullptr; } - addrinfo hints = { flags, family_to_sys(family), 0, 0, 0, 0, 0, 0 }; + addrinfo hints = { flags, family_to_sys(family), 0, 0, 0, nullptr, nullptr, nullptr }; addrinfo *res; int err = getaddrinfo(chost, cserv, &hints, &res); @@ -81,9 +81,7 @@ SockAddr *resolve(const string &str, Family family) } -Resolver::Resolver(): - event_disp(0), - next_tag(1) +Resolver::Resolver() { thread.get_notify_pipe().signal_data_available.connect(sigc::mem_fun(this, &Resolver::task_done)); } @@ -104,7 +102,7 @@ unsigned Resolver::resolve(const string &host, const string &serv, Family family task.host = host; task.serv = serv; task.family = family; - thread.add_task(task); + thread.add_task(move(task)); return task.tag; } @@ -135,8 +133,7 @@ void Resolver::task_done() { if(signal_resolve_failed.empty()) { - RefPtr err = task->error; - task->error = 0; + unique_ptr err = move(task->error); thread.pop_complete_task(); throw *err; } @@ -147,18 +144,9 @@ void Resolver::task_done() } -Resolver::Task::Task(): - tag(0), - family(UNSPEC), - addr(0), - error(0) -{ } - - Resolver::WorkerThread::WorkerThread(): Thread("Resolver"), - sem(1), - done(false) + sem(1) { launch(); } @@ -170,11 +158,11 @@ Resolver::WorkerThread::~WorkerThread() join(); } -void Resolver::WorkerThread::add_task(const Task &t) +void Resolver::WorkerThread::add_task(Task &&t) { MutexLock lock(queue_mutex); bool was_starved = (queue.empty() || queue.back().is_complete()); - queue.push_back(t); + queue.push_back(move(t)); if(was_starved) sem.signal(); } @@ -185,18 +173,14 @@ Resolver::Task *Resolver::WorkerThread::get_complete_task() if(!queue.empty() && queue.front().is_complete()) return &queue.front(); else - return 0; + return nullptr; } void Resolver::WorkerThread::pop_complete_task() { MutexLock lock(queue_mutex); if(!queue.empty() && queue.front().is_complete()) - { - delete queue.front().addr; - delete queue.front().error; queue.pop_front(); - } } void Resolver::WorkerThread::main() @@ -208,10 +192,10 @@ void Resolver::WorkerThread::main() sem.wait(); wait = false; - Task *task = 0; + Task *task = nullptr; { MutexLock lock(queue_mutex); - for(list::iterator i=queue.begin(); (!task && i!=queue.end()); ++i) + for(auto i=queue.begin(); (!task && i!=queue.end()); ++i) if(!i->is_complete()) task = &*i; } @@ -220,16 +204,16 @@ void Resolver::WorkerThread::main() { try { - SockAddr *addr = Net::resolve(task->host, task->serv, task->family); + unique_ptr addr(Net::resolve(task->host, task->serv, task->family)); { MutexLock lock(queue_mutex); - task->addr = addr; + task->addr = move(addr); } } catch(const runtime_error &e) { MutexLock lock(queue_mutex); - task->error = new runtime_error(e); + task->error = make_unique(e); } notify_pipe.put(1); }