Skip to content

Commit 54614fd

Browse files
authored
correctly track freed bytes in array_to_string (#54309)
Should fix #54275.
1 parent 0b4590a commit 54614fd

File tree

4 files changed

+10
-2
lines changed

4 files changed

+10
-2
lines changed

src/array.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ JL_DLLEXPORT jl_value_t *jl_array_to_string(jl_array_t *a)
479479
return o;
480480
}
481481
}
482+
jl_gc_count_freed(jl_array_nbytes(a));
482483
a->nrows = 0;
483484
a->length = 0;
484485
a->maxsize = 0;

src/gc.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,13 @@ void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT
11281128
jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz);
11291129
}
11301130

1131+
void jl_gc_count_freed(size_t sz) JL_NOTSAFEPOINT
1132+
{
1133+
jl_ptls_t ptls = jl_current_task->ptls;
1134+
jl_atomic_store_relaxed(&ptls->gc_num.freed,
1135+
jl_atomic_load_relaxed(&ptls->gc_num.freed) + sz);
1136+
}
1137+
11311138
static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT
11321139
{
11331140
int gc_n_threads;

src/gc.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,8 +622,6 @@ void gc_stats_big_obj(void);
622622
// For debugging
623623
void gc_count_pool(void);
624624

625-
size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT;
626-
627625
JL_DLLEXPORT void jl_enable_gc_logging(int enable);
628626
JL_DLLEXPORT uint32_t jl_get_num_stack_mappings(void);
629627
void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect) JL_NOTSAFEPOINT;

src/julia_internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,9 @@ JL_DLLEXPORT void JL_NORETURN jl_throw_out_of_memory_error(void);
569569
JL_DLLEXPORT int64_t jl_gc_diff_total_bytes(void) JL_NOTSAFEPOINT;
570570
JL_DLLEXPORT int64_t jl_gc_sync_total_bytes(int64_t offset) JL_NOTSAFEPOINT;
571571
void jl_gc_track_malloced_array(jl_ptls_t ptls, jl_array_t *a) JL_NOTSAFEPOINT;
572+
size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT;
572573
void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT;
574+
void jl_gc_count_freed(size_t sz) JL_NOTSAFEPOINT;
573575
void jl_gc_run_all_finalizers(jl_task_t *ct);
574576
void jl_release_task_stack(jl_ptls_t ptls, jl_task_t *task);
575577
void jl_gc_add_finalizer_(jl_ptls_t ptls, void *v, void *f) JL_NOTSAFEPOINT;

0 commit comments

Comments
 (0)