void o_database_close(struct o_database * db) { try { if (db->referrers != 0) { int count = o_list_size(db->referrers); while (count > 0) *((struct o_database **) o_list_get(db->referrers, --count)) = 0; o_list_free(db->referrers); db->referrers = 0; } if (db->storage != 0) o_storage_close(db->storage); if (db->context != 0) { o_operation_context_release(db->context); } } catch(struct o_exception, ex) { DB_ERROR_NOTIFY(db, o_exception_code(ex), o_exception_message(ex)); o_exception_free(ex); } end_try; }
void o_connection_storage_release(struct o_connection * conn, struct o_storage * storage) { char * name = o_storage_get_name(storage); char * username = o_storage_get_user(storage); char * store_name = o_connection_build_storage_name(name, username); o_map_string_remove(conn->storages, store_name); o_storage_close(storage); o_storage_free(storage); o_free(store_name); if (o_map_string_size(conn->storages) == 0) o_engine_release_connection(conn); }