| Anonymous | Login | 2009-12-04 18:17 UTC |
| Main | My View | View Issues | Change Log | Roadmap | Docs |
| Viewing Issue Simple Details [ Jump to Notes ] | [ View Advanced ] [ Issue History ] [ Print ] | ||||||
| ID | Category | Severity | Reproducibility | Date Submitted | Last Update | ||
| 0000096 | [Delta3D] Defect | crash | always | 2009-10-10 19:04 | 2009-11-10 16:48 | ||
| Reporter | wooyay | View Status | public | ||||
| Assigned To | Cowboycoder | ||||||
| Priority | normal | Resolution | fixed | ||||
| Status | closed | Product Version | |||||
| Summary | 0000096: UnregisterForMessages causes crash when called from invokable | ||||||
| Description |
Calling UnregisterForMessages modifies the GlobalMessageListenerMap in GameManager. When UnregisterForMessages is called from an invokable that is called from InvokeGlobalInvokables, the map is modified while it is being iterated. This causes a crash. The patch changes the invokable map entry to also contain a boolean flag mKilled. Instead of erasing the invokable from the map, it is marked as killed. The next time the game manager encounters the killed entry, it cleanly erases it from the map. Caveat 1: The GameManager may never again encounter the killed invokable, clogging the map. This could cause problems because the GameActor is referenced by RefPtr from the entry. I don't know if this can happen. The method UnregisterAllMessageListenersForActor immediately erases all invokables, maybe that's enough to clean up? Caveat 2: Pretty much untested. |
||||||
| Additional Information | |||||||
| Tags | No tags attached. | ||||||
| Attached Files |
|
||||||
|
|
|||||||
| Mantis 1.1.8[^] Copyright © 2000 - 2009 Mantis Group |
Copyright © 2009 Geeknet, Inc. All rights reserved. Terms of Use