Esempio n. 1
0
void ponyint_gc_sendrelease_manual(pony_ctx_t* ctx)
{
  size_t i = HASHMAP_BEGIN;
  actorref_t* aref;

  while((aref = ponyint_actormap_next(&ctx->acquire, &i)) != NULL)
  {
    ponyint_actormap_clearindex(&ctx->acquire, i);
    pony_sendp(ctx, aref->actor, ACTORMSG_RELEASE, aref);
  }

  pony_assert(ponyint_actormap_size(&ctx->acquire) == 0);
}
Esempio n. 2
0
File: gc.c Progetto: cyisfor/ponyc
void ponyint_gc_sendacquire(pony_ctx_t* ctx)
{
  size_t i = HASHMAP_BEGIN;
  actorref_t* aref;

  while((aref = ponyint_actormap_next(&ctx->acquire, &i)) != NULL)
  {
    ponyint_actormap_removeindex(&ctx->acquire, i);
    pony_sendp(ctx, aref->actor, ACTORMSG_ACQUIRE, aref);
  }

  ponyint_actormap_destroy(&ctx->acquire);
  memset(&ctx->acquire, 0, sizeof(actormap_t));
}
Esempio n. 3
0
File: gc.c Progetto: ozra/ponyc
void gc_sendacquire()
{
    size_t i = HASHMAP_BEGIN;
    actorref_t* aref;

    while((aref = actormap_next(&acquire, &i)) != NULL)
    {
        actormap_removeindex(&acquire, i);
        pony_sendp(actorref_actor(aref), ACTORMSG_ACQUIRE, aref);
    }

    actormap_destroy(&acquire);
    memset(&acquire, 0, sizeof(actormap_t));
}
Esempio n. 4
0
static void send_release(pony_ctx_t* ctx, actorref_t* aref)
{
  if(aref == NULL)
    return;

  if(ponyint_actor_pendingdestroy(aref->actor) ||
    ((aref->rc == 0) && (ponyint_objectmap_size(&aref->map) == 0))
    )
  {
    ponyint_actorref_free(aref);
    return;
  }

  pony_sendp(ctx, aref->actor, ACTORMSG_RELEASE, aref);
}