Closed mgerhardy closed 4 months ago
How to reproduce:
ERROR: (0) Stack trace (most recent call last): ERROR: (0) #31 Source "/home/mgerhardy/dev/engine/src/modules/app/App.cpp", line 153, in startMainLoop ERROR: (0) 150: emscripten_set_main_loop(runFrameEmscripten, 0, 1); ERROR: (0) 151: #else ERROR: (0) 152: while (AppState::InvalidAppState != _curState) { ERROR: (0) > 153: onFrame(); ERROR: (0) 154: } ERROR: (0) 155: #endif ERROR: (0) 156: return _exitCode; ERROR: (0) #30 Source "/home/mgerhardy/dev/engine/src/modules/app/App.cpp", line 223, in onFrame ERROR: (0) 220: core_trace_scoped(AppOnBeforeRunning); ERROR: (0) 221: onBeforeRunning(); ERROR: (0) 222: } ERROR: (0) > 223: const AppState state = onRunning(); ERROR: (0) 224: if (_nextState != AppState::Cleanup && _nextState != AppState::Destroy) { ERROR: (0) 225: _nextState = state; ERROR: (0) 226: } ERROR: (0) #29 Source "/home/mgerhardy/dev/engine/src/tools/voxedit/VoxEdit.cpp", line 513, in onRunning ERROR: (0) 510: } ERROR: (0) 511: ERROR: (0) 512: app::AppState VoxEdit::onRunning() { ERROR: (0) > 513: app::AppState state = Super::onRunning(); ERROR: (0) 514: if (state != app::AppState::Running) { ERROR: (0) 515: return state; ERROR: (0) 516: } ERROR: (0) #28 Source "/home/mgerhardy/dev/engine/src/modules/ui/IMGUIApp.cpp", line 362, in onRunning ERROR: (0) 360: app::AppState IMGUIApp::onRunning() { ERROR: (0) 361: core_trace_scoped(IMGUIAppOnRunning); ERROR: (0) > 362: app::AppState state = Super::onRunning(); ERROR: (0) 363: ERROR: (0) 364: if (state != app::AppState::Running) { ERROR: (0) 365: return state; ERROR: (0) #27 Source "/home/mgerhardy/dev/engine/src/modules/video/WindowedApp.cpp", line 137, in onRunning ERROR: (0) 134: } ERROR: (0) 135: } ERROR: (0) 136: while (SDL_PollEvent(&event)) { ERROR: (0) > 137: quit |= handleSDLEvent(event); ERROR: (0) 138: } ERROR: (0) 139: ERROR: (0) 140: if (quit) { ERROR: (0) #26 Source "/home/mgerhardy/dev/engine/src/modules/ui/IMGUIApp.cpp", line 137, in handleSDLEvent ERROR: (0) 134: } ERROR: (0) 135: ERROR: (0) 136: bool IMGUIApp::handleSDLEvent(SDL_Event &event) { ERROR: (0) > 137: const bool state = Super::handleSDLEvent(event); ERROR: (0) 138: if (event.type == SDL_WINDOWEVENT) { ERROR: (0) 139: ImGui_ImplSDL2_ProcessEvent(&event); ERROR: (0) 140: } ERROR: (0) #25 Source "/home/mgerhardy/dev/engine/src/modules/video/WindowedApp.cpp", line 93, in handleSDLEvent ERROR: (0) 90: // fallthrough ERROR: (0) 91: default: { ERROR: (0) 92: core_trace_scoped(WindowedAppEventHandler); ERROR: (0) > 93: const bool running = core::Singleton<io::EventHandler>::getInstance().handleEvent(event); ERROR: (0) 94: if (!running) { ERROR: (0) 95: return true; ERROR: (0) 96: } ERROR: (0) #24 Source "/home/mgerhardy/dev/engine/src/modules/video/EventHandler.cpp", line 60, in handleEvent ERROR: (0) 57: keyRelease((int32_t) event.key.keysym.sym, (int16_t) event.key.keysym.mod); ERROR: (0) 58: break; ERROR: (0) 59: case SDL_KEYDOWN: ERROR: (0) > 60: keyPress((int32_t) event.key.keysym.sym, (int16_t) event.key.keysym.mod); ERROR: (0) 61: break; ERROR: (0) 62: case SDL_MOUSEMOTION: { ERROR: (0) 63: if (event.motion.which == SDL_TOUCH_MOUSEID) { ERROR: (0) #23 Source "/home/mgerhardy/dev/engine/src/modules/video/EventHandler.cpp", line 340, in keyPress ERROR: (0) 338: void EventHandler::keyPress(int32_t key, int16_t modifier) { ERROR: (0) 339: for (IEventObserver* observer : _observers) { ERROR: (0) > 340: observer->onKeyPress(key, modifier); ERROR: (0) 341: } ERROR: (0) 342: } ERROR: (0) #22 Source "/home/mgerhardy/dev/engine/src/modules/ui/IMGUIApp.cpp", line 110, in onKeyPress ERROR: (0) 107: } ERROR: (0) 108: ERROR: (0) 109: bool IMGUIApp::onKeyPress(int32_t key, int16_t modifier) { ERROR: (0) > 110: if (!Super::onKeyPress(key, modifier) || ERROR: (0) 111: (core::bindingContext() == core::BindingContext::UI && key == SDLK_ESCAPE)) { ERROR: (0) 112: SDL_Event ev{}; ERROR: (0) 113: ev.type = SDL_KEYDOWN; ERROR: (0) #21 Source "/home/mgerhardy/dev/engine/src/modules/video/WindowedApp.cpp", line 241, in onKeyPress ERROR: (0) 238: } ERROR: (0) 239: ERROR: (0) 240: bool WindowedApp::onKeyPress(int32_t key, int16_t modifier) { ERROR: (0) > 241: return handleKeyPress(key, modifier); ERROR: (0) 242: } ERROR: (0) 243: ERROR: (0) 244: core::String WindowedApp::getKeyBindingsString(const char *cmd) const { ERROR: (0) #20 Source "/home/mgerhardy/dev/engine/src/modules/video/WindowedApp.cpp", line 210, in handleKeyPress ERROR: (0) 207: } ERROR: (0) 208: ERROR: (0) 209: bool WindowedApp::handleKeyPress(int32_t key, int16_t modifier, uint16_t count) { ERROR: (0) > 210: return _keybindingHandler.execute(key, modifier, true, nowSeconds(), count); ERROR: (0) 211: } ERROR: (0) 212: ERROR: (0) 213: bool WindowedApp::onMouseWheel(int32_t x, int32_t y) { ERROR: (0) #19 Source "/home/mgerhardy/dev/engine/src/modules/util/KeybindingHandler.cpp", line 468, in execute ERROR: (0) 465: } ERROR: (0) 466: } ERROR: (0) 467: } ERROR: (0) > 468: const bool retVal = executeCommands(key, modifier, nowSeconds, count); ERROR: (0) 469: if (retVal) { ERROR: (0) 470: _pressedModifierMask |= (uint32_t)code; ERROR: (0) 471: } ERROR: (0) #18 Source "/home/mgerhardy/dev/engine/src/modules/util/KeybindingHandler.cpp", line 110, in executeCommands ERROR: (0) 108: bool KeyBindingHandler::executeCommands(int32_t key, int16_t modifier, double nowSeconds, uint16_t count) { ERROR: (0) 109: // first try to find an exact match of key and current held modifiers ERROR: (0) > 110: if (executeCommandsForBinding(_bindings, key, modifier, nowSeconds, count)) { ERROR: (0) 111: return true; ERROR: (0) 112: } ERROR: (0) 113: // if no such exact match was found, try to remove those modifiers that should be ignored because they e.g. have their own bound command ERROR: (0) #17 Source "/home/mgerhardy/dev/engine/src/modules/util/KeybindingHandler.cpp", line 98, in executeCommandsForBinding ERROR: (0) 95: Log::trace("Failed to execute the tracking command %s", command.c_str()); ERROR: (0) 96: continue; ERROR: (0) 97: } ERROR: (0) > 98: if (command::Command::execute(command)) { ERROR: (0) 99: Log::trace("The command was executed"); ERROR: (0) 100: handled = true; ERROR: (0) 101: } else { ERROR: (0) #16 Source "/home/mgerhardy/dev/engine/src/modules/command/Command.cpp", line 154, in execute ERROR: (0) 151: args.push_back(commandTokenizer.next()); ERROR: (0) 152: Log::trace("arg: '%s'", args.back().c_str()); ERROR: (0) 153: } ERROR: (0) > 154: if (execute(c, args)) { ERROR: (0) 155: ++executed; ERROR: (0) 156: } ERROR: (0) 157: } ERROR: (0) #15 Source "/home/mgerhardy/dev/engine/src/modules/command/Command.cpp", line 195, in execute ERROR: (0) 192: cmd = i->second; ERROR: (0) 193: } ERROR: (0) 194: Log::trace("execute %s with %i arguments", command.c_str(), (int)args.size()); ERROR: (0) > 195: cmd._func(args); ERROR: (0) 196: return true; ERROR: (0) 197: } ERROR: (0) #14 Source "/usr/include/c++/13/bits/std_function.h", line 591, in operator() ERROR: (0) 588: { ERROR: (0) 589: if (_M_empty()) ERROR: (0) 590: __throw_bad_function_call(); ERROR: (0) > 591: return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...); ERROR: (0) 592: } ERROR: (0) 593: ERROR: (0) 594: #if __cpp_rtti ERROR: (0) #13 Source "/usr/include/c++/13/bits/std_function.h", line 290, in _M_invoke ERROR: (0) 287: static _Res ERROR: (0) 288: _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args) ERROR: (0) 289: { ERROR: (0) > 290: return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), ERROR: (0) 291: std::forward<_ArgTypes>(__args)...); ERROR: (0) 292: } ERROR: (0) #12 Source "/usr/include/c++/13/bits/invoke.h", line 111, in __invoke_r<void, voxedit::SceneManager::construct()::<lambda(const command::CmdArgs&)>&, const core::DynamicArray<core::String, 32>&> ERROR: (0) 108: using __type = typename __result::type; ERROR: (0) 109: using __tag = typename __result::__invoke_type; ERROR: (0) 110: if constexpr (is_void_v<_Res>) ERROR: (0) > 111: std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), ERROR: (0) 112: std::forward<_Args>(__args)...); ERROR: (0) 113: else ERROR: (0) 114: return std::__invoke_impl<__type>(__tag{}, ERROR: (0) #11 Source "/usr/include/c++/13/bits/invoke.h", line 61, in __invoke_impl<void, voxedit::SceneManager::construct()::<lambda(const command::CmdArgs&)>&, const core::DynamicArray<core::String, 32>&> ERROR: (0) 58: template<typename _Res, typename _Fn, typename... _Args> ERROR: (0) 59: constexpr _Res ERROR: (0) 60: __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) ERROR: (0) > 61: { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } ERROR: (0) 62: ERROR: (0) 63: template<typename _Res, typename _MemFun, typename _Tp, typename... _Args> ERROR: (0) 64: constexpr _Res ERROR: (0) #10 Source "/home/mgerhardy/dev/engine/src/tools/voxedit/modules/voxedit-util/SceneManager.cpp", line 1951, in operator() ERROR: (0) 1948: }).setHelp("Cut selection"); ERROR: (0) 1949: ERROR: (0) 1950: command::Command::registerCommand("undo", [&] (const command::CmdArgs& args) { ERROR: (0) >1951: undo(); ERROR: (0) 1952: }).setHelp("Undo your last step"); ERROR: (0) 1953: ERROR: (0) 1954: command::Command::registerCommand("redo", [&] (const command::CmdArgs& args) { ERROR: (0) #9 Source "/home/mgerhardy/dev/engine/src/tools/voxedit/modules/voxedit-util/SceneManager.cpp", line 985, in undo ERROR: (0) 982: bool SceneManager::undo(int n) { ERROR: (0) 983: Log::debug("undo %i steps", n); ERROR: (0) 984: for (int i = 0; i < n; ++i) { ERROR: (0) > 985: if (!doUndo()) { ERROR: (0) 986: return false; ERROR: (0) 987: } ERROR: (0) 988: } ERROR: (0) #8 Source "/home/mgerhardy/dev/engine/src/tools/voxedit/modules/voxedit-util/SceneManager.cpp", line 1008, in doUndo ERROR: (0) 1005: return false; ERROR: (0) 1006: } ERROR: (0) 1007: ERROR: (0) >1008: const MementoState& s = _mementoHandler.undo(); ERROR: (0) 1009: return mementoStateExecute(s, false); ERROR: (0) 1010: } ERROR: (0) #7 Source "/home/mgerhardy/dev/engine/src/tools/voxedit/modules/voxedit-util/MementoHandler.cpp", line 323, in undo ERROR: (0) 320: const MementoState& s = state(); ERROR: (0) 321: --_statePosition; ERROR: (0) 322: if (s.type == MementoType::Modification) { ERROR: (0) > 323: return undoModification(s); ERROR: (0) 324: } else if (s.type == MementoType::SceneNodeTransform) { ERROR: (0) 325: return undoTransform(s); ERROR: (0) 326: } else if (s.type == MementoType::SceneNodePaletteChanged) { ERROR: (0) #6 Source "/home/mgerhardy/dev/engine/src/tools/voxedit/modules/voxedit-util/MementoHandler.cpp", line 254, in undoModification ERROR: (0) 251: s.nodeType, s.region, s.pivot, s.worldMatrix, s.keyFrameIdx}; ERROR: (0) 252: } ERROR: (0) 253: } ERROR: (0) > 254: core_assert(_states[0].type == MementoType::Modification); ERROR: (0) 255: return _states[0]; ERROR: (0) 256: } ERROR: (0) #5 Source "/home/mgerhardy/dev/engine/src/modules/core/Assert.cpp", line 34, in core_report_assert ERROR: (0) 31: } ERROR: (0) 32: ERROR: (0) 33: bool core_report_assert(AssertData &data, const char *file, int line, const char *function) { ERROR: (0) > 34: const SDL_AssertState state = SDL_ReportAssertion((SDL_AssertData *)&data, function, file, line); ERROR: (0) 35: if (state == SDL_ASSERTION_RETRY) { ERROR: (0) 36: return true; ERROR: (0) 37: } ERROR: (0) #4 Object "/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.2800.5", at 0x7fb8e00f1c4b, in ERROR: (0) #3 Source "/home/mgerhardy/dev/engine/src/modules/core/Assert.cpp", line 20, in coreAssertionHandler ERROR: (0) 18: static SDL_assert_state coreAssertionHandler(const SDL_assert_data *data, void *userdata) { ERROR: (0) 19: if (data->trigger_count <= 1 && data->always_ignore == 0) { ERROR: (0) > 20: core_stacktrace(); ERROR: (0) 21: } ERROR: (0) 22: const SDL_AssertState state = SDL_GetDefaultAssertionHandler()(data, userdata); ERROR: (0) 23: if (state == SDL_ASSERTION_RETRY) { ERROR: (0) #2 Source "/home/mgerhardy/dev/engine/src/modules/core/Assert.cpp", line 80, in core_stacktrace ERROR: (0) 77: #else ERROR: (0) 78: std::ostringstream os; ERROR: (0) 79: backward::StackTrace st; ERROR: (0) > 80: st.load_here(32); ERROR: (0) 81: backward::Printer printer; ERROR: (0) 82: printer.print(st, os); ERROR: (0) 83: std::string str = os.str(); ERROR: (0) #1 Source "/home/mgerhardy/dev/engine/contrib/libs/backward/backward.h", line 879, in load_here ERROR: (0) 876: return 0; ERROR: (0) 877: } ERROR: (0) 878: _stacktrace.resize(depth); ERROR: (0) > 879: size_t trace_cnt = details::unwind(callback(*this), depth); ERROR: (0) 880: _stacktrace.resize(trace_cnt); ERROR: (0) 881: skip_n_firsts(0); ERROR: (0) 882: return size(); ERROR: (0) #0 Source "/home/mgerhardy/dev/engine/contrib/libs/backward/backward.h", line 861, in unwind<backward::StackTraceImpl<backward::system_tag::linux_tag>::callback> ERROR: (0) 859: template <typename F> size_t unwind(F f, size_t depth) { ERROR: (0) 860: Unwinder<F> unwinder; ERROR: (0) > 861: return unwinder(f, depth); ERROR: (0) 862: } ERROR: (0) 863: ERROR: (0) 864: } // namespace details WARN: Assertion failure at undoModification (/home/mgerhardy/dev/engine/src/tools/voxedit/modules/voxedit-util/MementoHandler.cpp:254), triggered 1 time: '_states[0].type == MementoType::Modification'
b6aa82b437ccb336124525a740edcd3dcf57317f and d08fd6a77fe930f5695be259ac4759260086471b might have fixed the problem
How to reproduce: