static void deliveryServiceUnSubscribe( void *o, void *arg) { v_partition p = v_partition(o); v_deliveryServiceEntry e = v_deliveryServiceEntry(arg); v_kernel kernel; v_group g; c_value params[2]; c_iter list; assert(C_TYPECHECK(e,v_deliveryServiceEntry)); assert(C_TYPECHECK(p,v_partition)); params[0] = c_objectValue(p); params[1] = c_objectValue(e->topic); kernel = v_objectKernel(e); list = v_groupSetSelect(kernel->groupSet, "partition = %0 and topic = %1", params); while ((g = c_iterTakeFirst(list)) != NULL) { v_groupRemoveEntry(g,v_entry(e)); c_free(g); } c_iterFree(list); }
void v_entryFree( v_entry entry) { c_iter proxies; v_proxy proxy; v_group group; assert(C_TYPECHECK(entry,v_entry)); proxies = c_select(entry->groups, 0); proxy = c_iterTakeFirst(proxies); while (proxy != NULL) { group = v_group(v_proxyClaim(proxy)); if (group) { v_groupRemoveEntry(group, entry); v_proxyRelease(proxy); } c_free(proxy); proxy = c_iterTakeFirst(proxies); } c_iterFree(proxies); /* No parent to call Free on */ }
static c_bool v_networkReaderEntryUnSubscribeGroup( v_networkReaderEntry entry, v_group group) { assert(C_TYPECHECK(entry, v_networkReaderEntry)); assert(C_TYPECHECK(group, v_group)); if (v_group(entry->group) == group) { v_groupRemoveEntry(entry->group, v_entry(entry)); } return TRUE; }
static c_bool v_networkReaderEntryUnSubscribe( v_networkReaderEntry entry, v_partition partition) { assert(C_TYPECHECK(entry, v_networkReaderEntry)); assert(C_TYPECHECK(partition, v_partition)); if (v_group(entry->group)->partition == partition) { v_groupRemoveEntry(entry->group, v_entry(entry)); } return TRUE; }