Example #1
0
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;
}
Example #2
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);
}
Example #3
0
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;
}