#include "connection.h" #include "pipeline.h" #include struct ptx_connection *ptx_connection_new(void) { struct ptx_connection *conn = malloc(sizeof(struct ptx_connection)); if (!conn) return NULL; /* initialize these in case we goto cleanup later */ conn->cli_read = NULL; conn->cli_write = NULL; conn->srv_read = NULL; conn->srv_write = NULL; /* do initialization */ if (!(conn->cli_read = ptx_pipeline_new(4))) goto cleanup; if (!(conn->cli_write = ptx_pipeline_new(4))) goto cleanup; if (!(conn->srv_read = ptx_pipeline_new(4))) goto cleanup; if (!(conn->srv_write = ptx_pipeline_new(4))) goto cleanup; return conn; cleanup: ptx_connection_free(conn); return NULL; } void ptx_connection_free(struct ptx_connection *conn) { /* NOTE: this function might be called with a partially-constructed or inconsistent object */ if (!conn) return; /* do cleanup */ ptx_pipeline_free(conn->cli_read); ptx_pipeline_free(conn->cli_write); ptx_pipeline_free(conn->srv_read); ptx_pipeline_free(conn->srv_write); free(conn); }