EternalTerminal icon indicating copy to clipboard operation
EternalTerminal copied to clipboard

Fix multi-session log file race on startup

Open jamestaylr opened this issue 11 months ago • 0 comments

Fix multi-session log file race on startup

  • Fixes https://github.com/MisterTea/EternalTerminal/issues/599

  • Starting multiple sessions simultaneously fails with:

2024-11-14 08:20:32,278 FATAL [default] Stack Trace:
[0] 0x0000000104486cab et::LogHandler::createLogFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)
[1] 0x000000010448666d et::LogHandler::setupLogFiles(el::Configurations*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)
[2] 0x00000001043ce52b main
[3] 0x0000000204776345 start
Error: (2): No such file or directory
2024-11-14 08:20:32,278 WARNING [default] Aborting application. Reason: Fatal log at [/tmp/nix-build-eternal-terminal-6.2.8.drv-0/source/src/base/LogHandler.cpp:97]

LogHandler::createLogFile expects to be the sole owner of the log file and thus creates the file with O_EXCL. Adding %f (microseconds) to strftime reduces the probablity of conflict. We don't want to relax the O_EXCL constraint (unique log per instance).

Alternative approaches not taken, but could be followed instead:

  • Always force appendPid
  • Append a non-time-based nonce to the path name

jamestaylr avatar Jan 23 '25 23:01 jamestaylr