KineticStatus KineticClient_CreateSession(KineticSessionConfig* const config, KineticClient * const client, KineticSession** session) { if (config == NULL) { LOG0("KineticSessionConfig is NULL!"); return KINETIC_STATUS_SESSION_INVALID; } if (session == NULL) { LOG0("Pointer to KineticSession pointer is NULL!"); return KINETIC_STATUS_SESSION_EMPTY; } if (strlen(config->host) == 0) { LOG0("Host is empty!"); return KINETIC_STATUS_HOST_EMPTY; } if (config->hmacKey.len < 1 || config->hmacKey.data == NULL) { LOG0("HMAC key is NULL or empty!"); return KINETIC_STATUS_HMAC_REQUIRED; } // Create a new session KineticSession* s = KineticAllocator_NewSession(client->bus, config); if (s == NULL) { LOG0("Failed to create session instance!"); return KINETIC_STATUS_MEMORY_ERROR; } KineticStatus status = KineticSession_Create(s, client); if (status != KINETIC_STATUS_SUCCESS) { LOG0("Failed to create session instance!"); KineticAllocator_FreeSession(s); return status; } // Establish the connection status = KineticSession_Connect(s); if (status != KINETIC_STATUS_SUCCESS) { LOGF0("Failed creating connection to %s:%d", config->host, config->port); KineticAllocator_FreeSession(s); return status; } *session = s; return status; }
KineticStatus KineticSession_Destroy(KineticSession * const session) { if (session == NULL) { return KINETIC_STATUS_SESSION_EMPTY; } KineticCountingSemaphore_Destroy(session->outstandingOperations); KineticAllocator_FreeSession(session); return KINETIC_STATUS_SUCCESS; }
void test_KineticAllocator_FreeSession_should_destroy_waiter_and_free_session(void) { KineticResourceWaiter_Destroy_Expect(&Session.connectionReady); KineticFree_Expect(&Session); KineticAllocator_FreeSession(&Session); }