[Gc] GC and Coroutines

Basile Starynkevitch basile at starynkevitch.net
Tue Jan 28 13:01:38 PST 2014


On Tue, 2014-01-28 at 17:36 -0300, Juan Wajnerman wrote:
> I'm not sure if I understand how I'm supposed to use the GC_stack_base
> info. I tried to call GC_add_root using the mem_base but with no luck
> so far.
> 
> 
> Here is a small example of what I'm trying to
> run: https://gist.github.com/waj/8675658
> In my machine it crashes after 60 or 70 iterations.


Perhaps try with:


void real_coroutine_body(struct GC_stack_base *sbase, void*realarg)
{
  int i;
  for (i = 0; i < 1000; ++i)
    {
      printf("%d\n", i);
      GC_malloc(1024);
    }
}

void coroutine_stub(void *arg)
{
   GC_call_with_stack_base (real_coroutine_body, arg)
}


 
#define STACK_SIZE 32 * 1024
 
int main(int argc, char const *argv[]) {
  GC_init();
  void *stack = GC_malloc(STACK_SIZE);
  coroutine_t c = co_create(coroutine_stub, 0, stack, STACK_SIZE);
  co_call(c);
  return 0;
}


###########

I did not test that code. Please tell us (on the list) if it works or
not.

Cheers.

-- 
Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***




More information about the Gc mailing list