[Scummvm-cvs-logs] CVS: scummvm/scumm object.cpp,1.50,1.51
Max Horn
fingolfin at users.sourceforge.net
Sun Jan 12 13:48:01 CET 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv24541
Modified Files:
object.cpp
Log Message:
fix beach crash in COMI
Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- object.cpp 12 Jan 2003 13:58:16 -0000 1.50
+++ object.cpp 12 Jan 2003 21:46:58 -0000 1.51
@@ -941,11 +941,11 @@
if (numobj > _numLocalObjects)
error("findObjectInRoom: More (%d) than %d objects in room %d", numobj, _numLocalObjects, room);
- if (_features & GF_AFTER_V8) {
- roomptr = getResourceAddress(rtRoomScripts, room);
- }
if (findWhat & foCodeHeader) {
- searchptr = roomptr;
+ if (_features & GF_AFTER_V8)
+ searchptr = getResourceAddress(rtRoomScripts, room);
+ else
+ searchptr = roomptr;
assert(searchptr);
for (i = 0;;) {
if (_features & GF_SMALL_HEADER)
@@ -1654,7 +1654,7 @@
FindObjectInRoom foir;
int slot, objslot;
ObjectData *od;
- byte *flob, *roomptr;
+ byte *flob;
uint32 obcd_size, obim_size, flob_size;
// Don't load an already loaded object
@@ -1688,9 +1688,11 @@
obim_size = READ_BE_UINT32_UNALIGNED(foir.obim + 4);
flob_size = obcd_size + obim_size + 8;
- // Get room pointer
- roomptr = getResourceAddress(rtRoom, room);
- assert(roomptr);
+ // Lock room/roomScripts for the given room. They contains the OBCD/OBIM
+ // data, and a call to createResource might expire them, hence we lock them.
+ lock(rtRoom, room);
+ if (_features & GF_AFTER_V8)
+ lock(rtRoomScripts, room);
// Allocate slot & memory for floating object
slot = findFlObjectSlot();
@@ -1702,8 +1704,13 @@
((uint32 *)flob)[0] = MKID('FLOB');
((uint32 *)flob)[1] = TO_BE_32(flob_size);
- memcpy(flob + 8, roomptr - foir.roomptr + foir.obcd, obcd_size);
- memcpy(flob + 8 + obcd_size, roomptr - foir.roomptr + foir.obim, obim_size);
+ memcpy(flob + 8, foir.obcd, obcd_size);
+ memcpy(flob + 8 + obcd_size, foir.obim, obim_size);
+
+ // Unlock room/roomScripts
+ unlock(rtRoom, room);
+ if (_features & GF_AFTER_V8)
+ unlock(rtRoomScripts, room);
// Setup local object flags
setupRoomObject(od, flob, flob);
More information about the Scummvm-git-logs
mailing list