diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-11-21 07:28:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-21 10:28:45 -0500 |
commit | 95d4a52b3ae32abdb4912d3a65b96c056b5511de (patch) | |
tree | ccc37effe180d55af4fde08028980d2f3b785a1c /yjit | |
parent | 7e7e2dde2403ad6d5b265ca541d15a51402e6bae (diff) |
YJIT: Skip dump-disasm if it fails to create a file (#8968)
Diffstat (limited to 'yjit')
-rw-r--r-- | yjit/src/options.rs | 14 |
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}"), + } } }, |