Fix edit l, s, u, p not to wipe out concurrent updates

Make edit() bail out if the edited object changed while edit() slept
for input.
(cherry picked from commit a1f4dc9592)
This commit is contained in:
Markus Armbruster 2008-05-10 08:40:48 +02:00 committed by Markus Armbruster
parent c6a459b0f4
commit 2ebcc9079f

View file

@ -191,12 +191,16 @@ edit(void)
return err; return err;
break; break;
case 'l': case 'l':
if (!check_sect_ok(&sect))
return RET_FAIL;
if ((err = doland(thing, arg, ptr, &sect)) != RET_OK) if ((err = doland(thing, arg, ptr, &sect)) != RET_OK)
return err; return err;
if (!putsect(&sect)) if (!putsect(&sect))
return RET_FAIL; return RET_FAIL;
break; break;
case 's': case 's':
if (!check_ship_ok(&ship))
return RET_FAIL;
if ((err = doship(thing, arg, ptr, &ship)) != RET_OK) if ((err = doship(thing, arg, ptr, &ship)) != RET_OK)
return err; return err;
if (!ef_ensure_space(EF_SHIP, ship.shp_uid, 50)) if (!ef_ensure_space(EF_SHIP, ship.shp_uid, 50))
@ -205,6 +209,8 @@ edit(void)
return RET_FAIL; return RET_FAIL;
break; break;
case 'u': case 'u':
if (!check_land_ok(&land))
return RET_FAIL;
if ((err = dounit(thing, arg, ptr, &land)) != RET_OK) if ((err = dounit(thing, arg, ptr, &land)) != RET_OK)
return err; return err;
if (!ef_ensure_space(EF_LAND, land.lnd_uid, 50)) if (!ef_ensure_space(EF_LAND, land.lnd_uid, 50))
@ -213,6 +219,8 @@ edit(void)
return RET_FAIL; return RET_FAIL;
break; break;
case 'p': case 'p':
if (!check_plane_ok(&plane))
return RET_FAIL;
if ((err = doplane(thing, arg, ptr, &plane)) != RET_OK) if ((err = doplane(thing, arg, ptr, &plane)) != RET_OK)
return err; return err;
if (!ef_ensure_space(EF_PLANE, plane.pln_uid, 50)) if (!ef_ensure_space(EF_PLANE, plane.pln_uid, 50))