… | |
… | |
839 | else |
839 | else |
840 | { |
840 | { |
841 | delete *i; |
841 | delete *i; |
842 | mortals.erase (i); |
842 | mortals.erase (i); |
843 | } |
843 | } |
844 | |
|
|
845 | static int lastmortals = 0;//D |
|
|
846 | |
|
|
847 | if (mortals.size() != lastmortals && lastmortals > 100)//D |
|
|
848 | { |
|
|
849 | lastmortals = mortals.size ();//D |
|
|
850 | LOG (llevDebug, "%d objects in mortal queue\n", lastmortals);//D |
|
|
851 | } |
|
|
852 | } |
844 | } |
853 | |
845 | |
854 | object::object () |
846 | object::object () |
855 | { |
847 | { |
856 | SET_FLAG (this, FLAG_REMOVED); |
848 | SET_FLAG (this, FLAG_REMOVED); |
… | |
… | |
966 | |
958 | |
967 | op = tmp; |
959 | op = tmp; |
968 | } |
960 | } |
969 | } |
961 | } |
970 | } |
962 | } |
|
|
963 | |
|
|
964 | // hack to ensure that freed objects still have a valid map |
|
|
965 | { |
|
|
966 | static maptile *freed_map; // freed objects are moved here to avoid crashes |
|
|
967 | |
|
|
968 | if (!freed_map) |
|
|
969 | { |
|
|
970 | freed_map = new maptile; |
|
|
971 | |
|
|
972 | freed_map->name = "/internal/freed_objects_map"; |
|
|
973 | freed_map->width = 3; |
|
|
974 | freed_map->height = 3; |
|
|
975 | |
|
|
976 | freed_map->allocate (); |
|
|
977 | } |
|
|
978 | |
|
|
979 | map = freed_map; |
|
|
980 | x = 1; |
|
|
981 | y = 1; |
|
|
982 | } |
971 | |
983 | |
972 | // clear those pointers that likely might have circular references to us |
984 | // clear those pointers that likely might have circular references to us |
973 | owner = 0; |
985 | owner = 0; |
974 | enemy = 0; |
986 | enemy = 0; |
975 | attacked_by = 0; |
987 | attacked_by = 0; |