@@ -348,7 +348,7 @@ mod r#impl {
348
348
use std:: fmt:: { self , Debug } ;
349
349
use std:: marker:: PhantomData ;
350
350
use std:: ops:: { Deref , DerefMut } ;
351
- use std:: sync:: { LazyLock , PoisonError , RwLock } ;
351
+ use std:: sync:: { OnceLock , PoisonError , RwLock } ;
352
352
353
353
struct CurrentCfg {
354
354
include_prefix : InternedString ,
@@ -377,8 +377,10 @@ mod r#impl {
377
377
}
378
378
}
379
379
380
- static CURRENT : LazyLock < RwLock < CurrentCfg > > =
381
- LazyLock :: new ( || RwLock :: new ( CurrentCfg :: default ( ) ) ) ;
380
+ fn current ( ) -> & ' static RwLock < CurrentCfg > {
381
+ static CURRENT : OnceLock < RwLock < CurrentCfg > > = OnceLock :: new ( ) ;
382
+ CURRENT . get_or_init ( || RwLock :: new ( CurrentCfg :: default ( ) ) )
383
+ }
382
384
383
385
thread_local ! {
384
386
// FIXME: If https://github.com/rust-lang/rust/issues/77425 is resolved,
@@ -401,7 +403,7 @@ mod r#impl {
401
403
402
404
impl < ' a > Cfg < ' a > {
403
405
fn current ( ) -> super :: Cfg < ' a > {
404
- let current = CURRENT . read ( ) . unwrap_or_else ( PoisonError :: into_inner) ;
406
+ let current = current ( ) . read ( ) . unwrap_or_else ( PoisonError :: into_inner) ;
405
407
let include_prefix = current. include_prefix . str ( ) ;
406
408
let exported_header_dirs = current. exported_header_dirs . vec ( ) ;
407
409
let exported_header_prefixes = current. exported_header_prefixes . vec ( ) ;
@@ -481,7 +483,7 @@ mod r#impl {
481
483
doxygen,
482
484
marker : _,
483
485
} = cfg;
484
- let mut current = CURRENT . write ( ) . unwrap_or_else ( PoisonError :: into_inner) ;
486
+ let mut current = current ( ) . write ( ) . unwrap_or_else ( PoisonError :: into_inner) ;
485
487
current. include_prefix = intern ( include_prefix) ;
486
488
current. exported_header_dirs = vec:: intern ( exported_header_dirs) ;
487
489
current. exported_header_prefixes = vec:: intern ( exported_header_prefixes) ;
0 commit comments