]> git.tdb.fi Git - libs/net.git/blobdiff - source/net/resolve.cpp
Use std::unique_ptr for owning pointers
[libs/net.git] / source / net / resolve.cpp
index e06bce77775e49fdd18569d12d79fec1f9739c0b..078d6ef3125be2dc20fa703f9a407de7230cc776 100644 (file)
@@ -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<runtime_error> err = task->error;
-                               task->error = nullptr;
+                               unique_ptr<runtime_error> 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<SockAddr> 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<runtime_error>(e);
                        }
                        notify_pipe.put(1);
                }