mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 01:20:39 +00:00
alloc_buf() calls new_buf_active() when there is no active segment to allocate a new active segment. new_buf_active() allocates memory (e.g. a new segment) so may cause memory reclamation, which may cause segment compaction, which may call alloc_buf() and re-enter new_buf_active(). The first call to new_buf_active() would then override _buf_active and cause the segment allocated during segment compaction to be leaked. This then causes abort when objects from the leaked segment are freed because the segment is expected to be present in _closed_segments, but isn't. boost::intrusive::list::erase() will fail on assertion that the object being erased is linked. Introduced inb5ca0eb2a2. Fixes #9821 Fixes #9192 Fixes #9825 Fixes #9544 Fixes #9508 Refs #9573 Message-Id: <20211229201443.119812-1-tgrabiec@scylladb.com> (cherry picked from commit7038dc7003)
96 KiB
96 KiB