ssb: Don't let GC saturate the main thread during replication.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 30m45s
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 30m45s
This commit is contained in:
parent
0bcb033349
commit
13722232fb
18
src/task.c
18
src/task.c
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user