Force reset running time in timer interrupt
Co-authored-by: Ivo Anjo <ivo.anjo@datadoghq.com> Co-authored-by: Luke Gruber <luke.gru@gmail.com>
This commit is contained in:
parent
55c9c75b47
commit
d845da05e8
Notes:
git
2025-05-15 21:44:39 +00:00
@ -277,12 +277,16 @@ rb_ractor_sleeper_thread_num(rb_ractor_t *r)
|
||||
}
|
||||
|
||||
static inline void
|
||||
rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
|
||||
rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th, bool always_reset)
|
||||
{
|
||||
RUBY_DEBUG_LOG("th:%d->%u%s",
|
||||
cr->threads.running_ec ? (int)rb_th_serial(cr->threads.running_ec->thread_ptr) : -1,
|
||||
rb_th_serial(th), cr->threads.running_ec == th->ec ? " (same)" : "");
|
||||
|
||||
if (cr->threads.running_ec != th->ec || always_reset) {
|
||||
th->running_time_us = 0;
|
||||
}
|
||||
|
||||
if (cr->threads.running_ec != th->ec) {
|
||||
if (0) {
|
||||
ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
|
||||
@ -293,10 +297,6 @@ rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
|
||||
return;
|
||||
}
|
||||
|
||||
if (cr->threads.running_ec != th->ec) {
|
||||
th->running_time_us = 0;
|
||||
}
|
||||
|
||||
cr->threads.running_ec = th->ec;
|
||||
|
||||
VM_ASSERT(cr == GET_RACTOR());
|
||||
|
6
thread.c
6
thread.c
@ -173,7 +173,7 @@ static inline void blocking_region_end(rb_thread_t *th, struct rb_blocking_regio
|
||||
|
||||
#define THREAD_BLOCKING_END(th) \
|
||||
thread_sched_to_running((sched), (th)); \
|
||||
rb_ractor_thread_switch(th->ractor, th); \
|
||||
rb_ractor_thread_switch(th->ractor, th, false); \
|
||||
} while(0)
|
||||
|
||||
#ifdef __GNUC__
|
||||
@ -1470,7 +1470,7 @@ rb_thread_schedule_limits(uint32_t limits_us)
|
||||
|
||||
RB_VM_SAVE_MACHINE_CONTEXT(th);
|
||||
thread_sched_yield(TH_SCHED(th), th);
|
||||
rb_ractor_thread_switch(th->ractor, th);
|
||||
rb_ractor_thread_switch(th->ractor, th, true);
|
||||
|
||||
RUBY_DEBUG_LOG("switch %s", "done");
|
||||
}
|
||||
@ -1518,7 +1518,7 @@ blocking_region_end(rb_thread_t *th, struct rb_blocking_region_buffer *region)
|
||||
unregister_ubf_list(th);
|
||||
|
||||
thread_sched_to_running(TH_SCHED(th), th);
|
||||
rb_ractor_thread_switch(th->ractor, th);
|
||||
rb_ractor_thread_switch(th->ractor, th, false);
|
||||
|
||||
th->blocking_region_buffer = 0;
|
||||
rb_ractor_blocking_threads_dec(th->ractor, __FILE__, __LINE__);
|
||||
|
@ -859,7 +859,7 @@ thread_sched_wait_running_turn(struct rb_thread_sched *sched, rb_thread_t *th, b
|
||||
|
||||
RUBY_DEBUG_LOG("(nt) wakeup %s", sched->running == th ? "success" : "failed");
|
||||
if (th == sched->running) {
|
||||
rb_ractor_thread_switch(th->ractor, th);
|
||||
rb_ractor_thread_switch(th->ractor, th, false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user