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); }
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)); }
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)); }
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); }