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); }
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; }