mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-03-15 15:05:27 +08:00
Remove all locking from principal_parser()
By inverting the order of storage, we can use an `OnceCell`/`unsync::Lazy` inside the Send/Sync `MainThread<T>` and remove the need for a lock altogether.
This commit is contained in:
parent
5dc07c9e7e
commit
e4282f3798
@ -32,7 +32,6 @@ use crate::wchar::{wstr, WString, L};
|
||||
use crate::wutil::{perror, wgettext, wgettext_fmt};
|
||||
use crate::{function, FLOG};
|
||||
use libc::c_int;
|
||||
use once_cell::sync::Lazy;
|
||||
use printf_compat::sprintf;
|
||||
use std::cell::{Ref, RefCell, RefMut};
|
||||
use std::ffi::{CStr, OsStr};
|
||||
@ -402,9 +401,11 @@ impl Parser {
|
||||
|
||||
/// Get the "principal" parser, whatever that is. Can only be called by the main thread.
|
||||
pub fn principal_parser() -> &'static Parser {
|
||||
static PRINCIPAL: Lazy<MainThread<ParserRef>> =
|
||||
Lazy::new(|| MainThread::new(Parser::new(EnvStack::principal().clone(), true)));
|
||||
PRINCIPAL.get()
|
||||
use std::cell::OnceCell;
|
||||
static PRINCIPAL: MainThread<OnceCell<ParserRef>> = MainThread::new(OnceCell::new());
|
||||
&PRINCIPAL
|
||||
.get()
|
||||
.get_or_init(|| Parser::new(EnvStack::principal().clone(), true))
|
||||
}
|
||||
|
||||
/// Assert that this parser is allowed to execute on the current thread.
|
||||
|
Loading…
x
Reference in New Issue
Block a user