aboutsummaryrefslogtreecommitdiff
path: root/src/room.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-01-26 11:34:40 -0500
committerFranklin Wei <git@fwei.tk>2016-01-26 11:34:40 -0500
commitfd4df830de4d9fdc399b8088e5cc801e052391c4 (patch)
tree1dc410c7e743e673ad8ad00ce332202fab06c177 /src/room.c
parenta1acf425cfb00a41c7862c915eb024207658c814 (diff)
downloadnetcosm-fd4df830de4d9fdc399b8088e5cc801e052391c4.zip
netcosm-fd4df830de4d9fdc399b8088e5cc801e052391c4.tar.gz
netcosm-fd4df830de4d9fdc399b8088e5cc801e052391c4.tar.bz2
netcosm-fd4df830de4d9fdc399b8088e5cc801e052391c4.tar.xz
fix some memory leaks and a serialization bug
Diffstat (limited to 'src/room.c')
-rw-r--r--src/room.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/src/room.c b/src/room.c
index df819a6..848c9e5 100644
--- a/src/room.c
+++ b/src/room.c
@@ -94,7 +94,7 @@ void world_save(const char *fname)
if(!obj)
break;
id = ROOM_NONE;
-
+ obj_write(fd, obj);
}
}
close(fd);
@@ -104,6 +104,7 @@ static void room_free(struct room_t *room)
{
hash_free(room->users);
room->users = NULL;
+ hash_setfreedata_cb(room->objects, obj_free);
hash_free(room->objects);
room->objects = NULL;
free(room->data.name);
@@ -132,21 +133,12 @@ bool room_obj_add(room_id room, struct object_t *obj)
#define OBJMAP_SIZE 8
-static void free_obj(void *ptr)
-{
- struct object_t *obj = ptr;
- if(obj->class->hook_destroy)
- obj->class->hook_destroy(obj);
- free(obj);
-}
-
/* initialize the room's hash tables */
static void room_init_maps(struct room_t *room)
{
room->users = hash_init((userdb_size() / 2) + 1, hash_djb, compare_strings);
room->objects = hash_init(OBJMAP_SIZE, hash_djb, compare_strings);
- hash_setfreedata_cb(room->objects, free_obj);
}
/**
@@ -201,6 +193,7 @@ bool world_load(const char *fname, const struct roomdata_t *data, size_t data_sz
for(unsigned j = 0; j < n_objects; ++j)
{
+ debugf("READING %dth OBJECT\n", j);
struct object_t *obj = obj_read(fd);
if(!room_obj_add(i, obj))