From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id A7CDA7B3F1 for ; Wed, 12 May 2021 09:43:08 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9CED89D60 for ; Wed, 12 May 2021 09:43:08 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id AC6469D52 for ; Wed, 12 May 2021 09:43:07 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 7FF8F42F58 for ; Wed, 12 May 2021 09:43:07 +0200 (CEST) Date: Wed, 12 May 2021 09:42:45 +0200 (CEST) From: Dietmar Maurer To: Proxmox Backup Server development discussion , Wolfgang Bumiller Message-ID: <2006574301.2110.1620805365548@webmail.proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Priority: 3 Importance: Normal X-Mailer: Open-Xchange Mailer v7.10.5-Rev10 X-Originating-Client: open-xchange-appsuite X-SPAM-LEVEL: Spam detection results: 0 AWL 0.069 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_2 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_4 0.1 random spam to be learned in bayes SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH backup 5/7] proxy: implement 'reload-certificate' command X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 May 2021 07:43:08 -0000 Stupid questzioon, but why cant we do: diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs index fc773459..29298a22 100644 --- a/src/bin/proxmox-backup-proxy.rs +++ b/src/bin/proxmox-backup-proxy.rs @@ -223,7 +223,6 @@ async fn accept_connection( // Note that these must not be moved out/modified directly, they get pinned in the loop and // "rearmed" after waking up: let mut reload_tls = notify_tls_cert_reload.notified(); - let mut accept = listener.accept(); loop { let sock; @@ -231,7 +230,9 @@ async fn accept_connection( // normally we'd use `tokio::pin!()` but we need this to happen outside the loop and we // need to be able to "rearm" the futures: let reload_tls_pin = unsafe { Pin::new_unchecked(&mut reload_tls) }; - let accept_pin = unsafe { Pin::new_unchecked(&mut accept) }; + //let accept_pin = unsafe { Pin::new_unchecked(&mut accept) }; + let accept = listener.accept(); + tokio::select! { _ = reload_tls_pin => { // rearm the notification: @@ -244,14 +245,14 @@ async fn accept_connection( } continue; } - res = accept_pin => match res { + res = accept => match res { Err(err) => { eprintln!("error accepting tcp connection: {}", err); continue; } Ok((new_sock, _addr)) => { // rearm the accept future: - accept = listener.accept(); + //accept = listener.accept(); sock = new_sock; } > async fn accept_connection( > listener: tokio::net::TcpListener, > - acceptor: Arc, > + mut acceptor: Arc, > debug: bool, > sender: tokio::sync::mpsc::Sender, > + notify_tls_cert_reload: Arc, > ) { > let accept_counter = Arc::new(()); > > + // Note that these must not be moved out/modified directly, they get pinned in the loop and > + // "rearmed" after waking up: > + let mut reload_tls = notify_tls_cert_reload.notified(); > + let mut accept = listener.accept(); > + > loop { > - let (sock, _addr) = match listener.accept().await { > - Ok(conn) => conn, > - Err(err) => { > - eprintln!("error accepting tcp connection: {}", err); > + let sock; > + > + // normally we'd use `tokio::pin!()` but we need this to happen outside the loop and we > + // need to be able to "rearm" the futures: > + let reload_tls_pin = unsafe { Pin::new_unchecked(&mut reload_tls) }; > + let accept_pin = unsafe { Pin::new_unchecked(&mut accept) }; > + tokio::select! { > + _ = reload_tls_pin => { > + // rearm the notification: > + reload_tls = notify_tls_cert_reload.notified(); > + > + log::info!("reloading certificate"); > + match make_tls_acceptor() { > + Err(err) => eprintln!("error reloading certificate: {}", err), > + Ok(new_acceptor) => acceptor = new_acceptor, > + } > continue; > } > + res = accept_pin => match res { > + Err(err) => { > + eprintln!("error accepting tcp connection: {}", err); > + continue; > + } > + Ok((new_sock, _addr)) => { > + // rearm the accept future: > + accept = listener.accept(); > + > + sock = new_sock; > + } > + } > }; > > sock.set_nodelay(true).unwrap(); > -- > 2.20.1 > > > > _______________________________________________ > pbs-devel mailing list > pbs-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel