diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2022-03-01 18:31:30 +0300 |
---|---|---|
committer | Qi Wang <interwq@gmail.com> | 2022-03-01 12:28:28 -0800 |
commit | 78b58379c854a639df79beb3289351129d863d4b (patch) | |
tree | b179716811deba5f86507284cebc64d623b8b6d9 | |
parent | ca709c3139f77f4c00a903cdee46d71e9028f6c6 (diff) | |
download | jemalloc-78b58379c854a639df79beb3289351129d863d4b.tar.gz |
Fix possible "nmalloc >= ndalloc" assertion.
It is possible that ndalloc will be updated before nmalloc, in
arena_large_ralloc_stats_update(), fix this by reorder those calls.
It was found by ClickHouse CI, that periodically hits this assertion [1].
[1]: https://github.com/ClickHouse/ClickHouse/issues/31531
That issue contains lots of examples, with core dump and some gdb output [2].
[2]: https://s3.amazonaws.com/clickhouse-test-reports/34951/96390a9263cb5af3d6e42a84988239c9ae87ce32/stress_test__debug__actions_.html
Here you can find binaries for that particular report [3] you need
clickhouse debug build [4].
[3]: https://s3.amazonaws.com/clickhouse-builds/34951/96390a9263cb5af3d6e42a84988239c9ae87ce32/clickhouse_build_check_(actions)/report.html
[4]: https://s3.amazonaws.com/clickhouse-builds/34951/96390a9263cb5af3d6e42a84988239c9ae87ce32/package_debug/clickhouse
Brief info from that report:
2 0x000000002ad6dbfe in arena_stats_merge (tsdn=0x7f2399abdd20, arena=0x7f241ce01080, nthreads=0x7f24e4360958, dss=0x7f24e4360960, dirty_decay_ms=0x7f24e4360968, muzzy_decay_ms=0x7f24e4360970, nactive=0x7f24e4360978, ndirty=0x7f24e43
e4360988, astats=0x7f24e4360998, bstats=0x7f24e4363310, lstats=0x7f24e4364990, estats=0x7f24e4366e50, hpastats=0x7f24e43693a0, secstats=0x7f24e436a020) at ../contrib/jemalloc/src/arena.c:138
ndalloc = 226
nflush = 0
curlextents = 0
nmalloc = 225
nrequests = 0
Here you can see that they differs only by 1.
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
-rw-r--r-- | src/arena.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/arena.c b/src/arena.c index bf880d71..857b27c5 100644 --- a/src/arena.c +++ b/src/arena.c @@ -322,8 +322,8 @@ arena_large_dalloc_stats_update(tsdn_t *tsdn, arena_t *arena, size_t usize) { static void arena_large_ralloc_stats_update(tsdn_t *tsdn, arena_t *arena, size_t oldusize, size_t usize) { - arena_large_dalloc_stats_update(tsdn, arena, oldusize); arena_large_malloc_stats_update(tsdn, arena, usize); + arena_large_dalloc_stats_update(tsdn, arena, oldusize); } edata_t * |