Am Freitag, dem 19.11.2021 um 14:21 +0000 schrieb Maxime Devos: > Jonas Hahnfeld schreef op vr 19-11-2021 om 14:35 [+0100]: > > Am Freitag, dem 19.11.2021 um 13:15 +0000 schrieb Maxime Devos: > > > Jonas Hahnfeld schreef op do 15-07-2021 om 20:44 [+0200]: > > > > +  SCM *smobs = scm_gc_malloc (sizeof(SCM) * SMOBS_COUNT, > > > > "smobs"); > > > > + > > > >    int i; > > > >    mark_call_count = 0; > > > >    for (i = 0; i < SMOBS_COUNT; i++) > > > > -    make_x (); > > > > +    smobs[i] = make_x (); > > > >    scm_gc (); > > > > > > smobs doesn't need to be protected for the whole function call, > > > until after the scm_gc() should be sufficient I think. > > > > That's what the patch does, no? For reference, the whole function > > (after this patch) looks like: > > > > SCM *smobs = scm_gc_malloc (sizeof(SCM) * SMOBS_COUNT, "smobs"); > > > > int i; > > mark_call_count = 0; > > for (i = 0; i < SMOBS_COUNT; i++) > >   smobs[i] = make_x (); > > scm_gc (); > > if (mark_call_count < SMOBS_COUNT) > >   {   > >     fprintf (stderr, "FAIL: SMOB mark function called for each > > SMOB\n"); > >     exit (EXIT_FAILURE); > >   }   > > scm_remember_upto_here_1 (smobs); > > > > While we could move the remember_upto_here immediately after the call > > to scm_gc(), the current version ensures that the memory is still > > available when the error is checked. > > The error checking code (I'm thinking of the if (mark_call_count ...) > fprintf(...) exit(...) here) isn't using 'smobs', so the error checking > code doesn't need the memory to be available AFAIK. No, but if somebody ever wants to debug the test, it will be less surprising if things are still there, or at least not risking that they are gone at a moment's notice. So, what's the gain of moving it? Jonas