Subject: bug#79346: igc: PolicyShouldCollectWorld

From: Eli Zaretskii <[email-masked]>
Date: Fri, 05 Sep 2025 09:34:18 +0300

> From: Helmut Eller <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked]
> Date: Thu, 04 Sep 2025 22:05:55 +0200
> 
> On Thu, Sep 04 2025, Gerd Möllmann wrote:
> 
> > Helmut Eller <[email-masked]> writes:
> [...]
> >> What would you think of making mps_arena_step and perhaps buffer_step
> >> available from Lisp so that those things can be called from Lisp-level
> >> idle timers?
> >
> > Sounds like a good idea.
> 
> Below is a patch that does this.
> 
> The idle timer waits 2 seconds, before it calls mps_arena_step.  As
> usual, "idle time" is the time since the last command completed, i.e. 2
> seconds must pass after a command before the idle timer fires.  (Other
> timers or process filters don't reset "idle time"; only new commands
> do.)  I think that should avoid the problem that I've seen where
> opportunistic GC was started while I was in the middle of typing
> something.
> 
> The code uses a constant to predict the idle time; maybe one could to
> something a bit more clever; not sure if that would be worth the
> trouble.

AFAIU, this makes GC-on-idle run off an idle timer, instead of using
internal implementation in C, is that right?

If so, I'm not very happy doing this, as the default mechanism.
Timers are hard to reason about, when other timers, let alone other
Lisp threads, are present, and the result might be more complex
system, which is harder to understand and maintain.

It is okay to allow this to run off an idle timer, as an opt-in
feature.  But let's leave the internal implementation as the default,
at least for now.

Thanks.