From c34daec8c6d4e7cb642e60897a9f309100b2fdc4 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 14 Sep 2008 09:37:26 -0400 Subject: [PATCH] Fix cargo list shutdown oops EF_PLANE is closed before EF_LAND: if a land unit carries a plane, the plane goes away before its carrier, and unit_onresize() oopses. Fix by not checking cargo list consistency there when the file is already gone. unit_cargo_init() has a similar issue, at least theoretically: it rebuilds cargo lists one after the other. Zap them all first. --- src/lib/common/cargo.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/common/cargo.c b/src/lib/common/cargo.c index 0dc37127..2b53bd2b 100644 --- a/src/lib/common/cargo.c +++ b/src/lib/common/cargo.c @@ -235,10 +235,9 @@ unit_cargo_init(void) struct lndstr *lp; struct nukstr *np; - for (i = EF_SHIP; i <= EF_NUKE; i++) { - nclink[i] = 0; + memset(nclink, 0, sizeof(nclink)); + for (i = EF_SHIP; i <= EF_NUKE; i++) unit_onresize(i); - } for (i = 0; (pp = getplanep(i)); i++) { if (!pp->pln_own) @@ -285,7 +284,8 @@ unit_onresize(int type) clink_init(&cl[i]); clink[type] = cl; nclink[type] = n; - clink_check(type); + if (ef_flags(type) & EFF_MEM) + clink_check(type); return 0; }