--- deliantra/server/common/object.C 2008/04/30 05:06:36 1.222 +++ deliantra/server/common/object.C 2008/04/30 08:29:31 1.223 @@ -961,6 +961,21 @@ return op; } +static struct freed_map : maptile +{ + freed_map () + { + path = ""; + name = "/internal/freed_objects_map"; + width = 3; + height = 3; + nodrop = 1; + + alloc (); + in_memory = MAP_ACTIVE; + } +} freed_map; // freed objects are moved here to avoid crashes + void object::do_destroy () { @@ -980,27 +995,9 @@ flag [FLAG_FREED] = 1; // hack to ensure that freed objects still have a valid map - { - static maptile *freed_map; // freed objects are moved here to avoid crashes - - if (!freed_map) - { - freed_map = new maptile; - - freed_map->path = ""; - freed_map->name = "/internal/freed_objects_map"; - freed_map->width = 3; - freed_map->height = 3; - freed_map->nodrop = 1; - - freed_map->alloc (); - freed_map->in_memory = MAP_ACTIVE; - } - - map = freed_map; - x = 1; - y = 1; - } + map = &freed_map; + x = 1; + y = 1; if (more) { @@ -1027,6 +1024,7 @@ { LOG (llevError | logBacktrace, "tried to destroy the tail of an object"); head->destroy (destroy_inventory); + return; } destroy_inv (!destroy_inventory);