X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fresolve.cpp;fp=source%2Fnet%2Fresolve.cpp;h=078d6ef3125be2dc20fa703f9a407de7230cc776;hp=e06bce77775e49fdd18569d12d79fec1f9739c0b;hb=ede42d5bb352841e2e425972e12b8ef31ddf2123;hpb=1565dec0f4a86e4bda7095dd7415234f7c7a84e9 diff --git a/source/net/resolve.cpp b/source/net/resolve.cpp index e06bce7..078d6ef 100644 --- a/source/net/resolve.cpp +++ b/source/net/resolve.cpp @@ -102,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; } @@ -133,8 +133,7 @@ void Resolver::task_done() { if(signal_resolve_failed.empty()) { - RefPtr err = task->error; - task->error = nullptr; + unique_ptr err = move(task->error); thread.pop_complete_task(); throw *err; } @@ -159,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(); } @@ -181,11 +180,7 @@ 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() @@ -209,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); }