diff options
| author | Jason Evans <je@fb.com> | 2015-03-12 23:25:18 (GMT) |
|---|---|---|
| committer | Jason Evans <je@fb.com> | 2015-03-12 23:25:18 (GMT) |
| commit | d69964bd2d31387f79a5f0494de8fd255b693afb (patch) | |
| tree | 2de08cf1ebc5d19e4192ed733a5a39e227ceb047 | |
| parent | fbd8d773ad0230ffba4e2c296dac3edcac9ca27e (diff) | |
| download | jemalloc-d69964bd2d31387f79a5f0494de8fd255b693afb.zip jemalloc-d69964bd2d31387f79a5f0494de8fd255b693afb.tar.gz jemalloc-d69964bd2d31387f79a5f0494de8fd255b693afb.tar.bz2 | |
Fix a heap profiling regression.
Fix prof_tctx_comp() to incorporate tctx state into the comparison.
During a dump it is possible for both a purgatory tctx and an otherwise
equivalent nominal tctx to reside in the tree at the same time.
This regression was introduced by
602c8e0971160e4b85b08b16cf8a2375aa24bc04 (Implement per thread heap
profiling.).
| -rw-r--r-- | src/prof.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -137,8 +137,13 @@ prof_tctx_comp(const prof_tctx_t *a, const prof_tctx_t *b) { uint64_t a_uid = a->thr_uid; uint64_t b_uid = b->thr_uid; - - return ((a_uid > b_uid) - (a_uid < b_uid)); + int ret = (a_uid > b_uid) - (a_uid < b_uid); + if (ret == 0) { + prof_tctx_state_t a_state = a->state; + prof_tctx_state_t b_state = b->state; + ret = (a_state > b_state) - (a_state < b_state); + } + return (ret); } rb_gen(static UNUSED, tctx_tree_, prof_tctx_tree_t, prof_tctx_t, |
