Opened 2 years ago

Closed 2 years ago

#6450 closed defect (fixed)

[BUG] Game breaks

Reported by: Langbart Owned by: Stan
Priority: Should Have Milestone: Alpha 26
Component: Core engine Keywords:
Cc: Patch: Phab:D4529

Description (last modified by Langbart)

Game crashes for me on macOS.

GIT version: [26594]
Default settings, the entire config folder was deleted.

to reproduce

  • Open the gamesetup
  • Click Start

lldb

entire Terminal output: dpaste.com/GNF7Z9LAR

(lldb) bt
* thread #1, name = 'main', queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  * frame #0: 0x00000001010a4320 pyrogenesis`::mozalloc_abort(msg=<unavailable>) at mozalloc_abort.cpp:33:3 [opt]
    frame #1: 0x0000000101b9c1bd pyrogenesis`::abort() at mozalloc_abort.cpp:82:3 [opt]
    frame #2: 0x00000001004fa3f6 pyrogenesis`sys_display_error(text=<unavailable>, flags=6) at unix.cpp:268:4 [opt]
    frame #3: 0x00000001004dcb73 pyrogenesis`debug_DisplayError(wchar_t const*, unsigned long, void*, wchar_t const*, wchar_t const*, int, char const*, long volatile*) [inlined] CallDisplayError(text=L"Function call failed: return value was -110101 (VFS file not found)\r\nLocation: vfs.cpp:196 (GetRealPath)\r\n\r\nCall stack:\r\n\r\n(error while dumping stack: Function not supported)\r\nerrno = 0 (No error reported here)\r\nOS error = ?\r\n", flags=6) at debug.cpp:374:8 [opt]
    frame #4: 0x00000001004dcb56 pyrogenesis`debug_DisplayError(description=L"Function call failed: return value was -110101 (VFS file not found)", flags=6, context=0x00007ffeefbfcf00, lastFuncToSkip=<unavailable>, pathname=L"../../../source/lib/file/vfs/vfs.cpp", line=196, func=<unavailable>, suppress=0x0000000103b4a9f8) at debug.cpp:460 [opt]
    frame #5: 0x00000001004dc360 pyrogenesis`debug_OnError(err=-110101, suppress=<unavailable>, file=L"../../../source/lib/file/vfs/vfs.cpp", line=196, func=<unavailable>) at debug.cpp:536:9 [opt]
    frame #6: 0x00000001004e9e97 pyrogenesis`VFS::GetRealPath(this=0x00000001084050d0, pathname=0x00007ffeefbfd8f0, realPathname=0x00007ffeefbfd8d0, createMissingDirectories=<unavailable>) at vfs.cpp:196:3 [opt]
    frame #7: 0x00000001002b2703 pyrogenesis`JSI_VFS::WriteJSONFile(scriptInterface=<unavailable>, filePath=L"config/matchsettings.json", val1=<unavailable>) at JSInterface_VFS.cpp:228:9 [opt]
    frame #8: 0x00000001002b4ddf pyrogenesis`bool ScriptFunction::ToJSNative<&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)), (void* (*)(ScriptRequest const&, JS::CallArgs&))0>(JSContext*, unsigned int, JS::Value*) [inlined] decltype(__args=<unavailable>, __args=<unavailable>)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)>(fp)(std::__1::forward<ScriptInterface const&>(fp0), std::__1::forward<std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&>(fp0), std::__1::forward<JS::Handle<JS::Value>&>(fp0))) std::__1::__invoke_constexpr<void (*)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>), ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, JS::Handle<JS::Value>&>(void (*&&)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>), ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, JS::Handle<JS::Value>&) at type_traits:3551:1 [opt]
    frame #9: 0x00000001002b4dd4 pyrogenesis`bool ScriptFunction::ToJSNative<&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)), (void* (*)(ScriptRequest const&, JS::CallArgs&))0>(JSContext*, unsigned int, JS::Value*) [inlined] decltype(__t=<unavailable>) std::__1::__apply_tuple_impl<void (*)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>), std::__1::tuple<ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, JS::Handle<JS::Value> >&, 0ul, 1ul, 2ul>(void (*&&)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>), std::__1::tuple<ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, JS::Handle<JS::Value> >&, std::__1::__tuple_indices<0ul, 1ul, 2ul>) at tuple:1415 [opt]
    frame #10: 0x00000001002b4dcd pyrogenesis`bool ScriptFunction::ToJSNative<&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)), (void* (*)(ScriptRequest const&, JS::CallArgs&))0>(JSContext*, unsigned int, JS::Value*) [inlined] decltype(__t=<unavailable>) std::__1::apply<void (*)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>), std::__1::tuple<ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, JS::Handle<JS::Value> >&>(void (*&&)(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>), std::__1::tuple<ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, JS::Handle<JS::Value> >&) at tuple:1424 [opt]
    frame #11: 0x00000001002b4dcd pyrogenesis`bool ScriptFunction::ToJSNative<&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)), (void* (*)(ScriptRequest const&, JS::CallArgs&))0>(JSContext*, unsigned int, JS::Value*) [inlined] ScriptFunction::args_info<decltype(&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)))>::return_type ScriptFunction::call<&(object=<unavailable>, args=<unavailable>)), void, std::__1::tuple<ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, JS::Handle<JS::Value> > >(void*, std::__1::tuple<ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, JS::Handle<JS::Value> >&) at FunctionWrapper.h:195 [opt]
    frame #12: 0x00000001002b4dcd pyrogenesis`bool ScriptFunction::ToJSNative<&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)), (void* (*)(ScriptRequest const&, JS::CallArgs&))0>(cx=<unavailable>, argc=2, vp=<unavailable>) at FunctionWrapper.h:330 [opt]
    frame #13: 0x00000001007924d9 pyrogenesis`js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [inlined] CallJSNative(cx=0x0000000107820800, native=(pyrogenesis`bool ScriptFunction::ToJSNative<&(JSI_VFS::WriteJSONFile(ScriptInterface const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, JS::Handle<JS::Value>)), (void* (*)(ScriptRequest const&, JS::CallArgs&))0>(JSContext*, unsigned int, JS::Value*) at FunctionWrapper.h:292), reason=Call, args=0x00007ffeefbfdb90)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) at Interpreter.cpp:493:13 [opt]
    frame #14: 0x00000001007923fb pyrogenesis`js::InternalCallOrConstruct(cx=0x0000000107820800, args=0x00007ffeefbfdb90, construct=<unavailable>, reason=Call) at Interpreter.cpp:585 [opt]
    frame #15: 0x0000000100792d76 pyrogenesis`InternalCall(cx=<unavailable>, args=<unavailable>, reason=<unavailable>) at Interpreter.cpp:648:10 [opt] [artificial]
    frame #16: 0x000000010078b9ca pyrogenesis`Interpret(JSContext*, js::RunState&) [inlined] js::CallFromStack(cx=0x0000000107820800, args=0x00007ffeefbfdb90) at Interpreter.cpp:652:10 [opt]
    frame #17: 0x000000010078b9c0 pyrogenesis`Interpret(cx=<unavailable>, state=<unavailable>) at Interpreter.cpp:3312 [opt]
    frame #18: 0x0000000100782c3f pyrogenesis`js::RunScript(cx=0x0000000107820800, state=0x00007ffeefbfdfb0) at Interpreter.cpp:465:10 [opt]
    frame #19: 0x0000000100792974 pyrogenesis`js::InternalCallOrConstruct(cx=0x0000000107820800, args=<unavailable>, construct=<unavailable>, reason=<unavailable>) at Interpreter.cpp:620:13 [opt]
    frame #20: 0x0000000100792d76 pyrogenesis`InternalCall(cx=<unavailable>, args=<unavailable>, reason=<unavailable>) at Interpreter.cpp:648:10 [opt] [artificial]
    frame #21: 0x0000000100792da9 pyrogenesis`js::Call(cx=0x0000000107820800, fval=JS::HandleValue @ scalar, thisv=JS::HandleValue @ scalar, args=0x00007ffeefbfe0d8, rval=JS::MutableHandleValue @ r14, reason=<unavailable>) at Interpreter.cpp:665:8 [opt]
    frame #22: 0x0000000100d0e27e pyrogenesis`js::jit::InvokeFunction(cx=0x0000000107820800, obj=<unavailable>, constructing=<unavailable>, ignoresReturnValue=<unavailable>, argc=0, argv=0x00007ffeefbfe240, rval=JS::MutableHandleValue @ 0x00007ffeefbfe1a0) at VMFunctions.cpp:269:10 [opt]
    frame #23: 0x0000000100d0e596 pyrogenesis`js::jit::InvokeFromInterpreterStub(cx=<unavailable>, frame=<unavailable>) at VMFunctions.cpp:289:8 [opt]
    frame #24: 0x000016f1c878cfb4
(lldb) 

bisect

I'm pretty sure it's [26544] that breaks the game on startup.

IRC

IRC 0ad-dev (7/Mar/22) related comments

[14:59:57] @Stan Langbart: Uh ... That changes logs... [15:00:43] Langbart does that mean it is not possible it is the buggy commit? [15:01:02] @Stan It's possible just weird [15:02:28] @Stan Looks like it doesn't like checking the real path before writing the file

Attachments (1)

seg_fault-1.jpg (95.5 KB ) - added by Langbart 2 years ago.

Download all attachments as: .zip

Change History (10)

by Langbart, 2 years ago

Attachment: seg_fault-1.jpg added

comment:1 by Langbart, 2 years ago

Description: modified (diff)

comment:2 by Langbart, 2 years ago

Summary: [BUG] Allied view option breaks the game[BUG] Game breaks

The option "Allied View" is unimportant, the reason is different.

comment:3 by Langbart, 2 years ago

Description: modified (diff)

IRC 0ad-dev (7/Mar/22)

[11:57:06] bb Langbart: can't reproduce the alliedView segfault you found

Might just be a macOS issue.

comment:4 by Langbart, 2 years ago

Description: modified (diff)

comment:5 by Langbart, 2 years ago

Description: modified (diff)

linking IRC comments

comment:6 by Stan, 2 years ago

Patch: Phab:D4529

comment:7 by Stan, 2 years ago

In 26604:

Fix crash when creating JSON file that do not exist.
Tested by: @Langbart
Refs: #6450
Differential Revision: https://code.wildfiregames.com/D4529

comment:8 by Stan, 2 years ago

Owner: set to Stan

comment:9 by Stan, 2 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.