mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Auto merge of #21287 - alexcrichton:issue-19872, r=huonw
cc #19872, this may help give some insight
This commit is contained in:
commit
9006c3c0f1
@ -22,6 +22,7 @@ pub use self::imp::Lock;
|
|||||||
mod imp {
|
mod imp {
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use libc;
|
use libc;
|
||||||
|
use std::os as stdos;
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
mod os {
|
mod os {
|
||||||
@ -116,7 +117,8 @@ mod imp {
|
|||||||
libc::open(buf.as_ptr(), libc::O_RDWR | libc::O_CREAT,
|
libc::open(buf.as_ptr(), libc::O_RDWR | libc::O_CREAT,
|
||||||
libc::S_IRWXU)
|
libc::S_IRWXU)
|
||||||
};
|
};
|
||||||
assert!(fd > 0);
|
assert!(fd > 0, "failed to open lockfile: [{}] {}",
|
||||||
|
stdos::errno(), stdos::last_os_error());
|
||||||
let flock = os::flock {
|
let flock = os::flock {
|
||||||
l_start: 0,
|
l_start: 0,
|
||||||
l_len: 0,
|
l_len: 0,
|
||||||
@ -129,8 +131,10 @@ mod imp {
|
|||||||
libc::fcntl(fd, os::F_SETLKW, &flock as *const os::flock)
|
libc::fcntl(fd, os::F_SETLKW, &flock as *const os::flock)
|
||||||
};
|
};
|
||||||
if ret == -1 {
|
if ret == -1 {
|
||||||
|
let errno = stdos::errno();
|
||||||
unsafe { libc::close(fd); }
|
unsafe { libc::close(fd); }
|
||||||
panic!("could not lock `{}`", p.display())
|
panic!("could not lock `{}`: [{}] {}", p.display(),
|
||||||
|
errno, stdos::error_string(errno))
|
||||||
}
|
}
|
||||||
Lock { fd: fd }
|
Lock { fd: fd }
|
||||||
}
|
}
|
||||||
@ -199,7 +203,8 @@ mod imp {
|
|||||||
ptr::null_mut())
|
ptr::null_mut())
|
||||||
};
|
};
|
||||||
if handle == libc::INVALID_HANDLE_VALUE {
|
if handle == libc::INVALID_HANDLE_VALUE {
|
||||||
panic!("create file error: {}", os::last_os_error());
|
panic!("create file error: [{}] {}",
|
||||||
|
os::errno(), os::last_os_error());
|
||||||
}
|
}
|
||||||
let mut overlapped: libc::OVERLAPPED = unsafe { mem::zeroed() };
|
let mut overlapped: libc::OVERLAPPED = unsafe { mem::zeroed() };
|
||||||
let ret = unsafe {
|
let ret = unsafe {
|
||||||
@ -207,9 +212,10 @@ mod imp {
|
|||||||
&mut overlapped)
|
&mut overlapped)
|
||||||
};
|
};
|
||||||
if ret == 0 {
|
if ret == 0 {
|
||||||
|
let errno = os::errno();
|
||||||
unsafe { libc::CloseHandle(handle); }
|
unsafe { libc::CloseHandle(handle); }
|
||||||
panic!("could not lock `{}`: {}", p.display(),
|
panic!("could not lock `{}`: [{}] {}", p.display(),
|
||||||
os::last_os_error())
|
errno, os::error_string(errno));
|
||||||
}
|
}
|
||||||
Lock { handle: handle }
|
Lock { handle: handle }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user