From c06c7bbf5e6e267dd2e357ac6909d87c08fd6894 Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Fri, 30 Nov 2007 07:10:49 +0000 Subject: [PATCH] fix recent gold pickup fix A recent change to delete the floor object sooner when picking up gold resulted in accessing that object after it had been freed. --- src/pickup.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pickup.c b/src/pickup.c index 70c8a1082..dc23dcca0 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -1282,7 +1282,10 @@ boolean telekinesis; /* not picking it up directly by hand */ } else { u.ugold += count; if (count == obj->quan) - delobj(obj); + /* costly_gold() can trigger --More-- prompt, so + take gold off map before messages in order to + prevent hangup save there from duplicating it */ + obj_extract_self(obj); /* remove from floor */ else obj->quan -= count; if ((nearload = near_capacity()) != 0) @@ -1293,6 +1296,8 @@ boolean telekinesis; /* not picking it up directly by hand */ else prinv((char *) 0, obj, count); costly_gold(obj->ox, obj->oy, count); + if (obj->where == OBJ_FREE) + delobj(obj); } context.botl = 1; if (context.run) nomul(0);