#include <sys/time.h>
#include <assert.h>
-static void free_resource(gpointer key, gpointer value, gpointer user_data)
-{
- struct resource *res = value;
-
- delete_resource(res);
-}
-
static void update_resource(gpointer key, gpointer value, gpointer user_data)
{
struct resource *res = value;
res->name, res->id);
}
-static void finalize_request_client(struct request_client *client)
+static void
+register_resource_to_client(struct request_client *client, struct resource *res)
{
- if (!client)
- return;
-
- if (client->resource_table)
- g_hash_table_foreach(client->resource_table, (GHFunc)free_resource, NULL);
+ g_hash_table_insert(client->resource_table, (gpointer)&res->id, (gpointer)res);
}
static void
-register_resource_to_client(struct request_client *client, struct resource *res)
+unregister_resource_from_client(struct request_client *client, int resource_id)
{
- g_hash_table_insert(client->resource_table, (gpointer)&res->id, (gpointer)res);
+ g_hash_table_remove(client->resource_table, (gpointer)&resource_id);
}
static struct resource *
static int handle_request_delete_resource(struct request_client *client, char *args)
{
- struct resource *res;
int resource_id;
if (!client || !args)
*/
resource_id = atoi(args);
- res = get_resource_by_id(client, resource_id);
- if (!res)
- return -EINVAL;
-
- delete_resource(res);
+ unregister_resource_from_client(client, resource_id);
return 0;
}
handle_request(client, buffer);
}
out:
- finalize_request_client(client);
+ g_hash_table_destroy(client->resource_table);
close(client->socket_fd);
destroy_request_client(client);
}
client->socket_fd = socket_fd;
- client->resource_table = g_hash_table_new(g_int_hash, g_int_equal);
+ client->resource_table = g_hash_table_new_full(g_int_hash, g_int_equal,
+ NULL, delete_resource);
create_daemon_thread(&client->worker, request_handler_func, client);