summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hawthorn <[email protected]>2024-11-14 15:21:38 -0800
committerJohn Hawthorn <[email protected]>2025-05-15 14:44:26 -0700
commitd845da05e83a2c2929ef8d4fd829804d44f292d3 ()
tree27cd2aa21ccf56a19fe6c01725e3cb5b533d0b1a
parent55c9c75b4788f6411bfa14f0e7d462d06850f60d (diff)
Force reset running time in timer interrupt
Co-authored-by: Ivo Anjo <[email protected]> Co-authored-by: Luke Gruber <[email protected]>
Notes: Merged: https://.com/ruby/ruby/pull/12094
-rw-r--r--ractor_core.h10
-rw-r--r--thread.c6
-rw-r--r--thread_pthread.c2
3 files changed, 9 insertions, 9 deletions
@@ -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)
{
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) {
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());
@@ -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); \
} 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);
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);
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);
}
}
else {