Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix multi-session log file race on startup #680

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

jamestaylr
Copy link

Fix multi-session log file race on startup

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

- Fixes MisterTea#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`](https://github.com/MisterTea/EternalTerminal/blob/204612857d233496e7a9c146fd540b7a45599ec7/src/base/LogHandler.cpp#L97). 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Starting multiple sessions for the same host in parallel leads to crash
1 participant