Skip to content

Commit 3930d18

Browse files
authored
correctly track freed bytes in array_to_string (JuliaLang#54309) (#151)
Should fix JuliaLang#54275.
1 parent 653b24c commit 3930d18

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
@@ -1136,6 +1136,13 @@ void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT
11361136
jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz);
11371137
}
11381138

1139+
void jl_gc_count_freed(size_t sz) JL_NOTSAFEPOINT
1140+
{
1141+
jl_ptls_t ptls = jl_current_task->ptls;
1142+
jl_atomic_store_relaxed(&ptls->gc_num.freed,
1143+
jl_atomic_load_relaxed(&ptls->gc_num.freed) + sz);
1144+
}
1145+
11391146
static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT
11401147
{
11411148
int gc_n_threads;

src/gc.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -697,8 +697,6 @@ void gc_stats_big_obj(void);
697697
// For debugging
698698
void gc_count_pool(void);
699699

700-
size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT;
701-
702700
JL_DLLEXPORT void jl_enable_gc_logging(int enable);
703701
JL_DLLEXPORT uint32_t jl_get_num_stack_mappings(void);
704702
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
@@ -598,7 +598,9 @@ JL_DLLEXPORT void JL_NORETURN jl_throw_out_of_memory_error(void);
598598
JL_DLLEXPORT int64_t jl_gc_diff_total_bytes(void) JL_NOTSAFEPOINT;
599599
JL_DLLEXPORT int64_t jl_gc_sync_total_bytes(int64_t offset) JL_NOTSAFEPOINT;
600600
void jl_gc_track_malloced_array(jl_ptls_t ptls, jl_array_t *a) JL_NOTSAFEPOINT;
601+
size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT;
601602
void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT;
603+
void jl_gc_count_freed(size_t sz) JL_NOTSAFEPOINT;
602604
void jl_gc_run_all_finalizers(jl_task_t *ct);
603605
void jl_release_task_stack(jl_ptls_t ptls, jl_task_t *task);
604606
void jl_gc_add_finalizer_(jl_ptls_t ptls, void *v, void *f) JL_NOTSAFEPOINT;

0 commit comments

Comments
 (0)