@@ -56,9 +56,9 @@ namespace hcpp
5656
5757 std::string dns_path_;
5858
59- awaitable<edp_lists> resolve (host_edp hedp);
59+ awaitable<edp_lists> resolve (host_edp hedp, bool doh = false );
6060
61- awaitable<void > async_resolve (std::shared_ptr<channel> cc, host_edp hedp);
61+ awaitable<void > async_resolve (std::shared_ptr<channel> cc, host_edp hedp, bool doh = false );
6262
6363 void remove (host_edp hedp);
6464
@@ -139,9 +139,9 @@ namespace hcpp
139139 return p;
140140 }
141141
142- awaitable<edp_lists> slow_dns::resolve (host_edp hedp)
142+ awaitable<edp_lists> slow_dns::resolve (host_edp hedp, bool doh )
143143 {
144- auto ip_edp = co_await imp_->resolve (hedp);
144+ auto ip_edp = co_await imp_->resolve (hedp, doh );
145145
146146 for (auto &&i : ip_edp)
147147 {
@@ -232,7 +232,7 @@ namespace hcpp
232232 {
233233 }
234234
235- awaitable<edp_lists> slow_dns::slow_dns_imp::resolve (host_edp hedp)
235+ awaitable<edp_lists> slow_dns::slow_dns_imp::resolve (host_edp hedp, bool doh )
236236 {
237237 {
238238 std::shared_lock<std::shared_mutex> m (smutex_);
@@ -256,7 +256,7 @@ namespace hcpp
256256 // 解析时可以发现其他消费者是否已经解析,进而跳过不必要的解析.解析完成 发送消息唤醒
257257
258258 // HACK 不直接使用channel https://github.com/chriskohlhoff/asio/issues/1175
259- asio::co_spawn (ex, async_resolve (cc, hedp), detached);
259+ asio::co_spawn (ex, async_resolve (cc, hedp, doh ), detached);
260260
261261 std::variant<edp_lists, std::monostate> results = co_await (cc->async_receive () || t.async_wait ());
262262 if (results.index () != 0 )
@@ -267,7 +267,9 @@ namespace hcpp
267267 }
268268
269269 // FIXME 注意,如果使用asio::coro,这里就有线程问题,下面的加锁无效,仍旧出现死锁问题
270- awaitable<void > slow_dns::slow_dns_imp::async_resolve (std::shared_ptr<channel> cc, host_edp hedp)
270+ // Asio 1.30.2
271+ // Fixed a compile error that occurred when channels and experimental::coro were both used in the same translation unit.
272+ awaitable<void > slow_dns::slow_dns_imp::async_resolve (std::shared_ptr<channel> cc, host_edp hedp, bool doh)
271273 {
272274 // / 协程内,协程切换时,一定不能持有锁,它都可能会和其他协程持有的锁互斥,除非所有都是共享锁
273275
@@ -294,7 +296,7 @@ namespace hcpp
294296 try
295297 {
296298
297- if (doh_filter_. contains (hedp. first ) )
299+ if (doh )
298300 {
299301 el = co_await hcpp::resolve (hedp, dns_providers_);
300302 }
@@ -315,7 +317,7 @@ namespace hcpp
315317 }
316318 catch (const std::exception &e)
317319 {
318- log::error (" slow_dns::slow_dns_imp::async_resolve: 解析失败 {}" ,e.what ());
320+ log::error (" slow_dns::slow_dns_imp::async_resolve: 解析失败 {}" , e.what ());
319321 std::unique_lock<std::mutex> m (rmutex_);
320322 resolve_running_.erase (hedp);
321323 throw ;
0 commit comments