From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 035E81FF170 for ; Tue, 3 Dec 2024 14:53:03 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 205B85AA9; Tue, 3 Dec 2024 14:53:09 +0100 (CET) Mime-Version: 1.0 Date: Tue, 03 Dec 2024 14:53:05 +0100 Message-Id: To: "Shannon Sterz" , From: "Shannon Sterz" X-Mailer: aerc 0.18.2-0-ge037c095a049-dirty References: <20241203134821.291358-1-s.sterz@proxmox.com> <20241203134821.291358-2-s.sterz@proxmox.com> In-Reply-To: <20241203134821.291358-2-s.sterz@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.087 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment PROLO_LEO1 0.1 Meta Catches all Leo drug variations so far 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 proxmox 2/2] product-config: use inner mutability for PRODUCT_CONFIG 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: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" On Tue Dec 3, 2024 at 2:48 PM CET, Shannon Sterz wrote: > with edition 2024 `static mut` references will be disallowed [1]. the > recommended way to work around this is to use inner mutability, so use a > `OnceLock` for the `PRODUCT_CONFIG` as that should not change throughout > the run time of an application. > > [1]: > https://doc.rust-lang.org/nightly/edition-guide/rust-2024/static-mut-references.html > > Signed-off-by: Shannon Sterz > --- > proxmox-product-config/src/init.rs | 33 +++++++++++++++--------------- > 1 file changed, 16 insertions(+), 17 deletions(-) > > diff --git a/proxmox-product-config/src/init.rs b/proxmox-product-config/src/init.rs > index a244559a..291a3b74 100644 > --- a/proxmox-product-config/src/init.rs > +++ b/proxmox-product-config/src/init.rs > @@ -1,18 +1,21 @@ > +use std::sync::OnceLock; > + > +#[derive(Debug)] > struct ProxmoxProductConfig { > api_user: nix::unistd::User, > priv_user: nix::unistd::User, > } > > -static mut PRODUCT_CONFIG: Option = None; > +static PRODUCT_CONFIG: OnceLock = OnceLock::new(); > > /// Initialize the global product configuration. > pub fn init(api_user: nix::unistd::User, priv_user: nix::unistd::User) { > - unsafe { > - PRODUCT_CONFIG = Some(ProxmoxProductConfig { > + PRODUCT_CONFIG > + .set(ProxmoxProductConfig { > api_user, > priv_user, > - }); > - } > + }) > + .expect(""); sorry forgot to set a proper message here, will send a v2 in a minute > } > > /// Returns the global api user set with [init]. > @@ -21,12 +24,10 @@ pub fn init(api_user: nix::unistd::User, priv_user: nix::unistd::User) { > /// > /// Panics if [init] wasn't called before. > pub fn get_api_user() -> &'static nix::unistd::User { > - unsafe { > - &PRODUCT_CONFIG > - .as_ref() > - .expect("ProxmoxProductConfig is not initialized!") > - .api_user > - } > + &PRODUCT_CONFIG > + .get() > + .expect("ProxmoxProductConfig is not initialized!") > + .api_user > } > > // Returns the global privileged user set with [init]. > @@ -35,10 +36,8 @@ pub fn get_api_user() -> &'static nix::unistd::User { > /// > /// Panics if [init] wasn't called before. > pub fn get_priv_user() -> &'static nix::unistd::User { > - unsafe { > - &PRODUCT_CONFIG > - .as_ref() > - .expect("ProxmoxProductConfig is not initialized!") > - .priv_user > - } > + &PRODUCT_CONFIG > + .get() > + .expect("ProxmoxProductConfig is not initialized!") > + .priv_user > } _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel