0
0
Fork 0
mirror of https://github.com/denoland/rusty_v8.git synced 2024-12-27 01:29:19 -05:00

fix: put fslock around entire build process (#1525)

This commit is contained in:
snek 2024-07-11 10:00:13 -07:00 committed by GitHub
parent 736ae93ee1
commit 815125e0b0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 16 deletions

View file

@ -96,6 +96,11 @@ fn main() {
false
};
// Cargo likes to run multiple build scripts at once sometimes.
// Nothing that follows is safe to run multiple times at once,
// because we store everything in a parent directory of OUT_DIR.
let _lockfile = acquire_lock();
// Build from source
if env_bool("V8_FROM_SOURCE") {
if is_asan && std::env::var_os("OPT_LEVEL").unwrap_or_default() == "0" {
@ -113,8 +118,10 @@ fn main() {
print_prebuilt_src_binding_path();
// utilize a lockfile to prevent linking of
// only partially downloaded static library.
download_static_lib_binaries();
}
fn acquire_lock() -> LockFile {
let root = env::current_dir().unwrap();
let out_dir = env::var_os("OUT_DIR").unwrap();
let lockfilepath = root
@ -123,13 +130,12 @@ fn main() {
.unwrap()
.parent()
.unwrap()
.join("lib_download.fslock");
println!("download lockfile: {:?}", &lockfilepath);
.join("v8.fslock");
let mut lockfile = LockFile::open(&lockfilepath)
.expect("Couldn't open lib download lockfile.");
lockfile.lock().expect("Couldn't get lock");
download_static_lib_binaries();
lockfile.unlock().expect("Couldn't unlock lockfile");
lockfile.lock_with_pid().expect("Couldn't get lock");
println!("lockfile: {:?}", &lockfilepath);
lockfile
}
fn build_binding() {

View file

@ -158,10 +158,12 @@ macro_rules! impl_try_from {
// Not dead: `cast()` is sometimes used in the $check expression.
#[allow(dead_code)]
fn cast<T>(l: Local<$source>) -> Local<T> {
unsafe { transmute(l) }
unsafe { transmute::<Local<$source>, Local<T>>(l) }
}
match l {
$value if $check => Ok(unsafe { transmute(l) }),
$value if $check => Ok(unsafe {
transmute::<Local<'s, $source>, Local<'s, $target>>(l)
}),
_ => Err(DataError::bad_type::<$target, $source>())
}
}

View file

@ -425,8 +425,8 @@ impl String {
self,
scope,
buffer.as_mut_ptr(),
start.try_into().unwrap_or(int::max_value()),
buffer.len().try_into().unwrap_or(int::max_value()),
start.try_into().unwrap_or(int::MAX),
buffer.len().try_into().unwrap_or(int::MAX),
options,
) as usize
}
@ -447,8 +447,8 @@ impl String {
self,
scope,
buffer.as_mut_ptr(),
start.try_into().unwrap_or(int::max_value()),
buffer.len().try_into().unwrap_or(int::max_value()),
start.try_into().unwrap_or(int::MAX),
buffer.len().try_into().unwrap_or(int::MAX),
options,
) as usize
}
@ -469,8 +469,8 @@ impl String {
self,
scope,
buffer.as_mut_ptr() as *mut u8,
start.try_into().unwrap_or(int::max_value()),
buffer.len().try_into().unwrap_or(int::max_value()),
start.try_into().unwrap_or(int::MAX),
buffer.len().try_into().unwrap_or(int::MAX),
options,
) as usize
}
@ -513,7 +513,7 @@ impl String {
self,
scope,
buffer.as_mut_ptr() as *mut char,
buffer.len().try_into().unwrap_or(int::max_value()),
buffer.len().try_into().unwrap_or(int::MAX),
&mut nchars_ref_int,
options,
)

View file

@ -501,6 +501,7 @@ impl From<Option<bool>> for MaybeBool {
#[repr(transparent)]
pub struct CxxVTable(pub *const Opaque);
#[allow(unused)]
#[derive(Copy, Clone, Debug)]
pub struct RustVTable<DynT>(pub *const Opaque, pub PhantomData<DynT>);