improve Server::run
This commit is contained in:
@@ -43,25 +43,27 @@ impl Server {
|
||||
pub async fn run(&mut self, mut shutdown: oneshot::Receiver<()>) -> Result<()> {
|
||||
let shutdown = &mut shutdown;
|
||||
|
||||
let result = tokio::select! {
|
||||
biased;
|
||||
v = self._run() => v,
|
||||
_ = &mut *shutdown => Ok(()),
|
||||
};
|
||||
|
||||
log::info!("Shutting down");
|
||||
self.db.shutdown().await;
|
||||
let _ = (&mut self.expiration_manager_handle).await;
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
pub async fn _run(&mut self) -> Result<()> {
|
||||
loop {
|
||||
let permit = Arc::clone(&self.connection_limit)
|
||||
.acquire_owned()
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let Some(socket) = ({
|
||||
tokio::select! {
|
||||
socket = self.listener.accept() => Some(socket?.0),
|
||||
_ = &mut *shutdown => None,
|
||||
}
|
||||
}) else {
|
||||
log::info!("Shutting down");
|
||||
|
||||
self.db.shutdown().await;
|
||||
let _ = (&mut self.expiration_manager_handle).await;
|
||||
|
||||
return Ok(());
|
||||
};
|
||||
let socket = self.listener.accept().await?.0;
|
||||
|
||||
let addr = socket.peer_addr()?;
|
||||
|
||||
@@ -71,7 +73,7 @@ impl Server {
|
||||
tokio::spawn(async move {
|
||||
log::debug!("Spawned a new connection handler: {addr}");
|
||||
if let Err(e) = handler.run().await {
|
||||
log::debug!("Handler::run error: {e:?}");
|
||||
log::error!("Handler::run: {e:?}");
|
||||
}
|
||||
log::debug!("Connection handler ended: {addr}");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user