-
Notifications
You must be signed in to change notification settings - Fork 141
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
irodsServer occasionally segfaults on startup when built against libstdc++ #7747
Comments
Switching from |
The fact that I remember Asan reporting a memory leak relating to that type, but I never tracked down what was causing it. Perhaps it is related to this. |
That is a distinct possibility. Is there an open issue about that? Did Asan provide any information about that leak that might be useful? |
I didn't create an issue for it since it falls under general improvements and I figured we'd see it again the next time someone attacks memory leaks. There are a few issues which reference the PR #6673 may contain comments about the |
Looks like the crash mentioned in #6954 (comment) is very similar to the one I'm running into here. If I can get this fixed, it might be a two-birds-with-one-stone situation. |
Got it. |
Replacing |
hot on the trail. will be very interested to learn if we were holding it wrong, or it's a real bug that will require a workaround. |
…`std::unordered_map`
- `typedef`s converted to `using`s - type aliases added - `key_type` - `value_type` - `size_type` - `hasher` - `iterator_value_type` - `const_iterator_value_type` - references to template type arguments in member function declarations swapped for aliases - `operator[](key_type)` overload replaced with `operator[](const key_type&)` and `operator[](key_type&&)` - `size()` is now `noexcept` and returns `size_type` instead of `int` - `has_entry(key_type)` overload replaced with `has_entry(const key_type&)` - `erase(key_type)` overload replaced with `erase(const key_type&)` that returns `size_type` instead of `size_t` - `clear()` is now `noexcept` - `empty()` is now `noexcept` and `nodiscard` - `begin()` and `end()` are now `noexcept` and have `const` overloads that return a `const_iterator` - `cbegin()` and `cend()` are now `noexcept` - `find(key_type)` overload replaced with `find(const key_type&)` and a `const` overload that returns a `const_iterator` - `get()` implementaiton optimized - uses `find()` instead of `has_entry()`, allowing re-use of the iterator. - `set()` implementation now calls `insert_or_assign()` instead of the `[]` operator. The implementation is now more similar to that of `std::unordered_map`.
- `typedef`s converted to `using`s - type aliases added - `key_type` - `value_type` - `size_type` - `hasher` - `iterator_value_type` - `const_iterator_value_type` - references to template type arguments in member function declarations swapped for aliases - `operator[](key_type)` overload replaced with `operator[](const key_type&)` and `operator[](key_type&&)` - `size()` is now `noexcept` and returns `size_type` instead of `int` - `has_entry(key_type)` overload replaced with `has_entry(const key_type&)` - `erase(key_type)` overload replaced with `erase(const key_type&)` that returns `size_type` instead of `size_t` - `clear()` is now `noexcept` - `empty()` is now `noexcept` and `nodiscard` - `begin()` and `end()` are now `noexcept` and have `const` overloads that return a `const_iterator` - `cbegin()` and `cend()` are now `noexcept` - `find(key_type)` overload replaced with `find(const key_type&)` and a `const` overload that returns a `const_iterator` - `get()` implementaiton optimized - uses `find()` instead of `has_entry()`, allowing re-use of the iterator. - `set()` implementation now calls `insert_or_assign()` instead of the `[]` operator. The implementation is now more similar to that of `std::unordered_map`.
- `typedef`s converted to `using`s - type aliases added - `key_type` - `value_type` - `size_type` - `hasher` - `iterator_value_type` - `const_iterator_value_type` - references to template type arguments in member function declarations swapped for aliases - `operator[](key_type)` overload replaced with `operator[](const key_type&)` and `operator[](key_type&&)` - `size()` is now `noexcept` and returns `size_type` instead of `int` - `has_entry(key_type)` overload replaced with `has_entry(const key_type&)` - `erase(key_type)` overload replaced with `erase(const key_type&)` that returns `size_type` instead of `size_t` - `clear()` is now `noexcept` - `empty()` is now `noexcept` and `nodiscard` - `begin()` and `end()` are now `noexcept` and have `const` overloads that return a `const_iterator` - `cbegin()` and `cend()` are now `noexcept` - `find(key_type)` overload replaced with `find(const key_type&)` and a `const` overload that returns a `const_iterator` - `get()` implementaiton optimized - uses `find()` instead of `has_entry()`, allowing re-use of the iterator. - `set()` implementation now calls `insert_or_assign()` instead of the `[]` operator. The implementation is now more similar to that of `std::unordered_map`.
- `typedef`s converted to `using`s - type aliases added - `key_type` - `value_type` - `size_type` - `hasher` - `iterator_value_type` - `const_iterator_value_type` - references to template type arguments in member function declarations swapped for aliases - `operator[](key_type)` overload replaced with `operator[](const key_type&)` and `operator[](key_type&&)` - `size()` is now `noexcept` and returns `size_type` instead of `int` - `has_entry(key_type)` overload replaced with `has_entry(const key_type&)` - `erase(key_type)` overload replaced with `erase(const key_type&)` that returns `size_type` instead of `size_t` - `clear()` is now `noexcept` - `empty()` is now `noexcept` and `nodiscard` - `begin()` and `end()` are now `noexcept` and have `const` overloads that return a `const_iterator` - `cbegin()` and `cend()` are now `noexcept` - `find(key_type)` overload replaced with `find(const key_type&)` and a `const` overload that returns a `const_iterator` - `get()` implementaiton optimized - uses `find()` instead of `has_entry()`, allowing re-use of the iterator. - `set()` implementation now calls `insert_or_assign()` instead of the `[]` operator. The implementation is now more similar to that of `std::unordered_map`.
When iRODS is built against libstdc++, sometimes (maybe like 5% of the time?) the server will segfault during startup.
Log output before segfault:
Demangled backtrace from
catchsegv
:This problem is hampering my ability to test the main branch of irods with the new externals, so I'm going to try and fix it as part of my work towards Ubuntu 24.04 support.
The text was updated successfully, but these errors were encountered: