ssb: Don't let GC saturate the main thread during replication.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 30m45s

This commit is contained in:
Cory McWilliams 2025-03-19 07:47:10 -04:00
parent 0bcb033349
commit 13722232fb

View File

@ -169,6 +169,9 @@ typedef struct _tf_task_t
timeout_t* timeouts;
hitch_t hitches[32];
uint64_t last_gc_ns;
int64_t last_gc_duration_ns;
} tf_task_t;
typedef struct _export_record_t
@ -1456,12 +1459,19 @@ static void _tf_task_promise_rejection_tracker(JSContext* context, JSValueConst
static void _tf_task_gc_timer(uv_timer_t* timer)
{
tf_task_t* task = timer->data;
tf_trace_begin(task->_trace, "JS_RunGC");
JS_RunGC(task->_runtime);
tf_trace_end(task->_trace);
uint64_t start_ns = uv_hrtime();
if (task->last_gc_duration_ns < (int64_t)(start_ns - task->last_gc_ns))
{
tf_trace_begin(task->_trace, "JS_RunGC");
JS_RunGC(task->_runtime);
tf_trace_end(task->_trace);
#ifdef M_TRIM_THRESHOLD
malloc_trim(0);
malloc_trim(0);
#endif
uint64_t end_ns = uv_hrtime();
task->last_gc_duration_ns = end_ns - start_ns;
task->last_gc_ns = end_ns;
}
}
static void _tf_task_trace_timer(uv_timer_t* timer)