示例#1
0
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;
}
示例#2
0
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);
}