diff --git a/src/api.rs b/src/api.rs index 003121b..04e08cb 100644 --- a/src/api.rs +++ b/src/api.rs @@ -7,16 +7,15 @@ use tokio_util::sync::CancellationToken; static TUN_QUIT: Mutex> = Mutex::new(None); pub(crate) fn tun2proxy_internal_run(args: Args, tun_mtu: u16) -> c_int { - let mut lock = TUN_QUIT.lock().unwrap(); - if lock.is_some() { - log::error!("tun2proxy already started"); - return -1; - } - let shutdown_token = CancellationToken::new(); - *lock = Some(shutdown_token.clone()); - // explicit drop to avoid holding mutex lock while running proxy. - drop(lock); + { + let mut lock = TUN_QUIT.lock().unwrap(); + if lock.is_some() { + log::error!("tun2proxy already started"); + return -1; + } + *lock = Some(shutdown_token.clone()); + } let block = async move { log::info!("Proxy {} server: {}", args.proxy.proxy_type, args.proxy.addr);