static void connection_free (struct connection *c) { struct instance *o = c->inst; ASSERT(c->state == CONNECTION_STATE_TERMINATING) ASSERT(LinkedList0_IsEmpty(&c->requests_list)) ASSERT(LinkedList0_IsEmpty(&c->replies_list)) LinkedList0_Remove(&o->connections_list, &c->connections_list_node); free(c); }
static void value_cleanup (struct value *v) { if (v->parent || !LinkedList0_IsEmpty(&v->refs_list)) { return; } switch (v->type) { case NCDVALUE_STRING: { free(v->string.string); } break; case NCDVALUE_LIST: { while (value_list_len(v) > 0) { struct value *ev = value_list_at(v, 0); value_list_remove(v, ev); value_cleanup(ev); } } break; case NCDVALUE_MAP: { while (value_map_len(v) > 0) { struct value *ev = value_map_at(v, 0); value_map_remove(v, ev); value_cleanup(ev); } } break; default: ASSERT(0); } free(v); }
static void callrefhere_func_die (void *vo) { struct callrefhere_instance *o = vo; NCDModuleInst *i = o->i; // disconnect calls while (!LinkedList0_IsEmpty(&o->calls_list)) { struct instance *inst = UPPER_OBJECT(LinkedList0_GetFirst(&o->calls_list), struct instance, calls_list_node); ASSERT(inst->crh == o) LinkedList0_Remove(&o->calls_list, &inst->calls_list_node); inst->crh = NULL; } // free instance free(o); NCDModuleInst_Backend_Dead(i); }