Skip to content

Commit ba6d32b

Browse files
committed
Simplify do_resolver
1 parent f11a9ee commit ba6d32b

1 file changed

Lines changed: 12 additions & 25 deletions

File tree

net/utils.cpp

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -275,44 +275,31 @@ class DefaultResolver : public Resolver {
275275
};
276276
IPAddr do_resolve(std::string_view host, Delegate<bool, IPAddr> filter) {
277277
auto ctr = [&]() -> IPAddrList* {
278-
auto addrs = new IPAddrList();
279-
std::shared_ptr<ResolveCtx> ctx = std::make_shared<ResolveCtx>();
280-
ctx->addrs = addrs;
278+
std::unique_ptr<IPAddrList> addrs(new IPAddrList());
279+
auto ctx = std::make_shared<ResolveCtx>();
280+
ctx->addrs = addrs.get();
281281
ctx->host = std::string(host);
282282
ctx->filter = filter;
283283
std::thread([ctx]() {
284-
IPAddrList ret;
285284
auto cb = [&](IPAddr addr) -> int {
286285
SCOPED_LOCK(ctx->lock);
287-
if (ctx->filter && !ctx->filter.fire(addr))
288-
return 0;
289-
ret.push_back(new IPAddrNode(addr));
286+
if (ctx->filter && !ctx->filter.fire(addr)) return 0;
287+
if (ctx->addrs) {
288+
ctx->addrs->push_back(new IPAddrNode(addr));
289+
}
290290
return 0;
291291
};
292292
_gethostbyname(ctx->host, cb);
293-
{
294-
SCOPED_LOCK(ctx->lock);
295-
if (ctx->addrs) {
296-
ctx->addrs->push_back(std::move(ret));
297-
ctx->sem.signal(1);
298-
} else {
299-
LOG_ERROR("resolve timeout");
300-
while(!ret.empty())
301-
delete ret.pop_front();
302-
}
303-
}
293+
ctx->sem.signal(1);
304294
}).detach();
305295
ctx->sem.wait(1, resolve_timeout_);
306-
{
307-
SCOPED_LOCK(ctx->lock);
308-
ctx->addrs = nullptr;
309-
ctx->filter = {};
310-
}
296+
SCOPED_LOCK(ctx->lock);
297+
ctx->addrs = nullptr;
298+
ctx->filter = {};
311299
if (addrs->empty()) {
312-
delete addrs;
313300
return nullptr;
314301
}
315-
return addrs;
302+
return addrs.release();
316303
};
317304
auto ips = dnscache_.borrow(host, ctr, 1UL * 1000);
318305
if (!ips || ips->empty()) {

0 commit comments

Comments
 (0)