aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-net/Cargo.toml1
-rw-r--r--embassy-net/src/dns.rs16
2 files changed, 15 insertions, 2 deletions
diff --git a/embassy-net/Cargo.toml b/embassy-net/Cargo.toml
index 6b3468283..6eea8c307 100644
--- a/embassy-net/Cargo.toml
+++ b/embassy-net/Cargo.toml
@@ -40,6 +40,7 @@ smoltcp = { version = "0.9.0", default-features = false, features = [
40]} 40]}
41 41
42embassy-net-driver = { version = "0.1.0", path = "../embassy-net-driver" } 42embassy-net-driver = { version = "0.1.0", path = "../embassy-net-driver" }
43embassy-hal-common = { version = "0.1.0", path = "../embassy-hal-common" }
43embassy-time = { version = "0.1.0", path = "../embassy-time" } 44embassy-time = { version = "0.1.0", path = "../embassy-time" }
44embassy-sync = { version = "0.1.0", path = "../embassy-sync" } 45embassy-sync = { version = "0.1.0", path = "../embassy-sync" }
45embedded-io = { version = "0.4.0", optional = true } 46embedded-io = { version = "0.4.0", optional = true }
diff --git a/embassy-net/src/dns.rs b/embassy-net/src/dns.rs
index f18750cc3..2d2e7b79b 100644
--- a/embassy-net/src/dns.rs
+++ b/embassy-net/src/dns.rs
@@ -11,6 +11,7 @@ use smoltcp::iface::{Interface, SocketHandle};
11pub use smoltcp::socket::dns::DnsQuery; 11pub use smoltcp::socket::dns::DnsQuery;
12use smoltcp::socket::dns::{self, GetQueryResultError, StartQueryError, MAX_ADDRESS_COUNT}; 12use smoltcp::socket::dns::{self, GetQueryResultError, StartQueryError, MAX_ADDRESS_COUNT};
13pub use smoltcp::wire::{DnsQueryType, IpAddress}; 13pub use smoltcp::wire::{DnsQueryType, IpAddress};
14use embassy_hal_common::drop::OnDrop;
14 15
15use crate::{SocketStack, Stack}; 16use crate::{SocketStack, Stack};
16 17
@@ -93,7 +94,15 @@ impl<'a> DnsSocket<'a> {
93 Err(e) => return Err(e.into()), 94 Err(e) => return Err(e.into()),
94 }; 95 };
95 96
96 poll_fn(|cx| { 97 let handle = self.handle;
98 let drop = OnDrop::new(|| {
99 let s = &mut *self.stack.borrow_mut();
100 let socket = s.sockets.get_mut::<dns::Socket>(handle);
101 socket.cancel_query(query);
102 s.waker.wake();
103 });
104
105 let res = poll_fn(|cx| {
97 self.with_mut(|s, _| match s.get_query_result(query) { 106 self.with_mut(|s, _| match s.get_query_result(query) {
98 Ok(addrs) => Poll::Ready(Ok(addrs)), 107 Ok(addrs) => Poll::Ready(Ok(addrs)),
99 Err(GetQueryResultError::Pending) => { 108 Err(GetQueryResultError::Pending) => {
@@ -103,7 +112,10 @@ impl<'a> DnsSocket<'a> {
103 Err(e) => Poll::Ready(Err(e.into())), 112 Err(e) => Poll::Ready(Err(e.into())),
104 }) 113 })
105 }) 114 })
106 .await 115 .await;
116
117 drop.defuse();
118 res
107 } 119 }
108} 120}
109 121