aboutsummaryrefslogtreecommitdiffstats
path: root/yjit
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-11-21 07:28:45 -0800
committerGitHub <noreply@github.com>2023-11-21 10:28:45 -0500
commit95d4a52b3ae32abdb4912d3a65b96c056b5511de (patch)
treeccc37effe180d55af4fde08028980d2f3b785a1c /yjit
parent7e7e2dde2403ad6d5b265ca541d15a51402e6bae (diff)
downloadruby-95d4a52b3ae32abdb4912d3a65b96c056b5511de.tar.gz
YJIT: Skip dump-disasm if it fails to create a file (#8968)
Diffstat (limited to 'yjit')
-rw-r--r--yjit/src/options.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/yjit/src/options.rs b/yjit/src/options.rs
index fc4ffc6409..ceeeb66e86 100644
--- a/yjit/src/options.rs
+++ b/yjit/src/options.rs
@@ -1,4 +1,4 @@
-use std::{ffi::{CStr, CString}, ptr::null};
+use std::{ffi::{CStr, CString}, ptr::null, fs::File};
use crate::backend::current::TEMP_REGS;
use std::os::raw::{c_char, c_int, c_uint};
@@ -230,10 +230,14 @@ pub fn parse_option(str_ptr: *const std::os::raw::c_char) -> Option<()> {
("dump-disasm", _) => match opt_val {
"" => unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::Stdout) },
directory => {
- let pid = std::process::id();
- let path = format!("{directory}/yjit_{pid}.log");
- eprintln!("YJIT disasm dump: {path}");
- unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::File(path)) }
+ let path = format!("{directory}/yjit_{}.log", std::process::id());
+ match File::options().create(true).append(true).open(&path) {
+ Ok(_) => {
+ eprintln!("YJIT disasm dump: {path}");
+ unsafe { OPTIONS.dump_disasm = Some(DumpDisasm::File(path)) }
+ }
+ Err(err) => eprintln!("Failed to create {path}: {err}"),
+ }
}
},