aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/gc.cpp
AgeCommit message (Collapse)Author
2016-09-29SCI32: Rewrite kArray & kStringColin Snover
This change invalidates earlier SCI32 save games, which separated arrays and strings in an incompatible manner. Old save games contain invalid references to a string segment which no longer exists, and contain incompatible array structures that lack critical type information.
2016-08-01SCI32: Fix invalid memory access after BitmapTable is extendedColin Snover
When new bitmaps are added and the underlying Common::Array needs to move to expand, this invalidates all pointers to bitmaps, which makes it basically impossible to use the bitmap segment since you never know if a reference is going to be invalidated due to an array move. To solve this, BitmapTable is changed to hold pointers to SciBitmaps that are allocated separately on the heap instead, so when those bitmaps are looked up, the resulting pointers are valid for the lifetime of the bitmap, instead of the lifetime of the Common::Array used internally by BitmapTable.
2016-08-01SCI32: Add bitmap segment and remove GC option from hunk segmentColin Snover
2016-08-01SCI32: Enable optional explicit memory management of hunk entriesColin Snover
Bitmaps in ScrollWindow and Robot code are managed by the kernel and not by game scripts, although they must be able to be referenced through a reg_t. To prevent incorrect GC of bitmaps that are in use but not referenced by any game script, explicit memory management of hunk entries can be enabled.
2016-06-21SCI32: Implement kScrollWindowWillem Jan Palenstijn
These should be all the actually used subfunctions. Co-authored-by: Colin Snover <github.com@zetafleet.com>
2014-02-18SCI: Make GPL headers consistent in themselves.Johannes Schickel
2012-06-18SCI: Add setter/getter methods to reg_t'sFilippos Karapetis
No functionality change has been made with this commit. This avoids setting and getting the reg_t members directly, and is the basis of any future work on large SCI3 scripts (larger than 64KB)
2011-05-13SCI: Avoid incrementing lockers of deleted scriptWillem Jan Palenstijn
Having a deleted script with non-zero lockers had the side effect of making the deleted script re-appear in the GC's work list, including any (deleted) objects in the script. This should be the root cause of bugs #3299458 and #3295849, so also delete the workaround added for that in 35086fe1.
2011-05-13SCI: Marked the sanity check inside processWorkList() as a workaroundmd5
The sanity check added in rev #35086fe17c fixes the crashes with that code when an invalid reference is about to be processed, but these references shouldn't be in the stack at all in the first place, so the root cause seems to be somewhere else.
2011-05-12SCI: Fixed bugs #3299458 and #3295849md5
2011-05-12GIT: Clean up: Suppress SVN tags, now uselessstrangerke
2011-03-20SCI: Moved the engine hunk pointer processing code inside the GfxPorts classmd5
This allows us make _windowList private again
2011-03-08SCI: Fixed typosmd5
2011-03-08SCI: Cleanupmd5
2011-03-07SCI: Constify some codeMax Horn
2011-03-02SCI: Fix garbage collection for SCI32Matthew Hoops
SCI32 has no ports
2011-02-28SCI: Skip Ports when iterating over Windows in GCWillem Jan Palenstijn
2011-02-28SCI: Moved hunk pointer handling to the GC, and removed some related workaroundsmd5
SCI scripts can contain stale pointers, which are used later on. We now delete the contents of hunk entries without invalidating the relevant pointers and let the GC clear the references. Many thanks to waltervn and wjp for all their work and help on this.
2011-02-12JANITORIAL: Remove extraneous parenthesesOri Avtalion
svn-id: r55890
2011-01-04SCI: Slight cleanup to the garbage collectorFilippos Karapetis
svn-id: r55116
2011-01-01SCI: debugC calls no longer require a debug level of 2 to show outputFilippos Karapetis
svn-id: r55086
2010-08-31SCI: Disabled some debug related GC code, which effectivelyFilippos Karapetis
wastes cycles if we're not debugging the GC svn-id: r52465
2010-07-01SCI: Rename some more stuffMax Horn
svn-id: r50553
2010-07-01SCI: Make SegManager::_heap privateMax Horn
svn-id: r50552
2010-06-29SCI: Some cleanup of the GC code. Filippos Karapetis
The version of push() that pushes arrays inside WorklistManager has been renamed to pushArray(), so that it's more apparent where arrays are pushed. svn-id: r50486
2010-06-28SCI: Some more GC cleanupMax Horn
svn-id: r50443
2010-06-28SCI: Fix DEBUG_GC mode and permanently enable itMax Horn
svn-id: r50430
2010-06-28SCI: Revise GC interface: use Common::Array<reg_t> instead of callbacksMax Horn
This means a little bit more overhead but makes the code much more readable and understandable. svn-id: r50429
2010-02-06SCI: Revert r47925 and put fix inside GC instead.Walter van Niftrik
svn-id: r47940
2010-02-03SCI: Get rid of EngineState::stack_segmentMax Horn
svn-id: r47833
2010-01-30SCI: Remove extra '\n's in debugC messagesWillem Jan Palenstijn
svn-id: r47707
2009-10-10Started rewriting the Object struct into a classFilippos Karapetis
svn-id: r44878
2009-10-04SCI: Rename EngineState::segMan to _segManMax Horn
svn-id: r44629
2009-09-21SCI: Replace IntMapper Script::_objIndices and Common::Array ↵Max Horn
Script::_objects by a HashMap -- goodbye, class IntMapper svn-id: r44240
2009-09-21SCI: Rename Object::flags and pos to _flags and _pos; tweak scriptObjInit0 ↵Max Horn
and scriptObjInit11 to be more similar svn-id: r44234
2009-09-17SCI: Add a global getSciVersion() function and make use of itMax Horn
svn-id: r44170
2009-09-17SCI: Rename MemObject -> SegmentObjMax Horn
svn-id: r44130
2009-09-16SCI: Rename Script class members, change Script from struct to classMax Horn
svn-id: r44126
2009-09-06SCI: Rename resManager -> resMan; segManager -> segManMax Horn
svn-id: r43980
2009-09-02Some renaming:Filippos Karapetis
getresourceManager -> getResourceManger resourceManager -> resMan segmentManager ->segMan svn-id: r43908
2009-08-25- Replaced more cases of EngineState parametersFilippos Karapetis
- Made some version comparisons for old SCI0 versions easier to read - Removed the GET_SEL32SV macro svn-id: r43729
2009-08-25- Simplified the parameters of some functionsFilippos Karapetis
- Replaced some EngineState parameters - The SCI version is now obtained from the resource manager or the segment manager, thereby simplifying several functions - Plugged 2 leaks in the fallback detector - Renamed the segment manager and resource manager to "segmentManager" and "resourceManager" in all places, for consistency svn-id: r43722
2009-07-06Replaced sciprintf() calls with printf, DebugPrintf, warning and error callsFilippos Karapetis
svn-id: r42167
2009-06-06Store long-term pointers to object variables in a new ObjVarRef struct.Willem Jan Palenstijn
Storing them as reg_t* could cause the pointers to become invalid when they pointed into CloneTable since CloneTable can be re-allocated. svn-id: r41220
2009-05-30Moved 3 more debug commands to console.cpp ("simkey", "segment_table" and ↵Filippos Karapetis
"show_map") and removed the GFXWC macro. Some cleanup svn-id: r41032
2009-05-28SCI: Fix potential dangling pointer more robustly,Willem Jan Palenstijn
by changing the executionStack implementation to a list. svn-id: r40971
2009-05-21Removed the PREG, PSTK, IS_NULL_REG and REG_EQ definesFilippos Karapetis
svn-id: r40767
2009-05-18SCI: Got rid of EngineState::execution_stack_pos; overally, the resulting ↵Max Horn
code should be even stricter in detecting invalid VM stack access (and some bugs when loading saves might be fixed now...) svn-id: r40694
2009-05-10SCI: Changed object list in Script instances to use Common:::ArrayMax Horn
svn-id: r40431
2009-05-08SCI: Got rid of last traces of class SegInterfaceMax Horn
svn-id: r40377