예제 #1
0
파일: atlas.c 프로젝트: cpence/arcus
void atlas_destroy(arcus_atlas *atlas)
{
    int i;
    
    if (!atlas)
        return;
    
    if (atlas->systems)
    {
        for (i = 0 ; i < atlas->num_systems ; i++)
            system_destroy(atlas->systems[i]);
        free(atlas->systems);
    }
    
    if (atlas->transforms)
    {
        for (i = 0 ; i < atlas->num_transforms ; i++)
            transform_destroy(atlas->transforms[i]);
        free(atlas->transforms);
    }
    
    if (atlas->diff_transforms)
    {
        for (i = 0 ; i < atlas->num_diff_transforms ; i++)
            transform_destroy(atlas->diff_transforms[i]);
        free(atlas->diff_transforms);
    }
    
    free(atlas);
}
예제 #2
0
static int
transform_handler(TSCont contp, TSEvent event, void *edata)
{
  /* Check to see if the transformation has been closed by a call to
     TSVConnClose. */
  if (TSVConnClosedGet(contp)) {
    TSDebug("strans", "transformation closed");
    transform_destroy(contp);
    return 0;
  } else {
    TransformData *data;
    int val = 0;

    data = (TransformData *)TSContDataGet(contp);
    if (data == NULL) {
      TSError("Didn't get Continuation's Data. Ignoring Event..");
      return 0;
    }
    TSDebug("strans", "transform handler event [%d], data->state = [%d]",
	    event, data->state);

    do {
      switch (data->state) {
      case STATE_BUFFER:
        val = transform_buffer_event(contp, data, event, edata);
        break;
      case STATE_CONNECT:
        val = transform_connect_event(contp, data, event, edata);
        break;
      case STATE_WRITE:
        val = transform_write_event(contp, data, event, edata);
        break;
      case STATE_READ_STATUS:
        val = transform_read_status_event(contp, data, event, edata);
        break;
      case STATE_READ:
        val = transform_read_event(contp, data, event, edata);
        break;
      case STATE_BYPASS:
        val = transform_bypass_event(contp, data, event, edata);
        break;
      }
    } while (val);
  }

  return 0;
}