int delete_subscribe_katcp(struct katcp_dispatch *d, struct katcp_wit *w, unsigned int index) { struct katcp_subscribe *sub; sane_wit(w); if(index >= w->w_size){ #ifdef KATCP_CONSISTENCY_CHECKS fprintf(stderr, "delete subscribe: major logic problem, removed subscribe out of range\n"); abort(); #endif return -1; } sub = w->w_vector[index]; w->w_size--; if(index < w->w_size){ w->w_vector[index] = w->w_vector[w->w_size]; } destroy_subscribe_katcp(d, sub); return 0; }
static void destroy_wit_katcp(struct katcp_dispatch *d, struct katcp_wit *w) { unsigned int i; sane_wit(w); /* WARNING: TODO - send out device changed messages ? */ /* probably to everybody in group, not just subscribers ... */ for(i = 0; i < w->w_size; i++){ destroy_subscribe_katcp(d, w->w_vector[i]); w->w_vector[i] = NULL; } if(w->w_vector){ free(w->w_vector); } w->w_size = 0; if(w->w_endpoint){ release_endpoint_katcp(d, w->w_endpoint); w->w_endpoint = NULL; } w->w_magic = 0; free(w); }
int delete_subscribe_katcp(struct katcp_dispatch *d, struct katcp_wit *w, unsigned int index) { /* WARNING: delete *has* to decrement size, otherwise the loop relying on it never terminates */ struct katcp_subscribe *sub; sane_wit(w); if(index >= w->w_size){ #ifdef KATCP_CONSISTENCY_CHECKS fprintf(stderr, "delete subscribe: major logic problem, removed subscribe out of range\n"); abort(); #endif return -1; } sub = w->w_vector[index]; w->w_size--; if(index < w->w_size){ w->w_vector[index] = w->w_vector[w->w_size]; } destroy_subscribe_katcp(d, sub); return 0; }