Hi,

On Tue, 2007-04-24 at 16:15 -0500, [EMAIL PROTECTED] wrote:
> Fix for an especially insidious bug that led to random seg faults and memory 
> protection crashes in the ContainerChangeEntry processing.
> 
> The cause is a bit complex, but the basic idea is this.
> 
> - ContainerChangeEntries are stored in a pool in the ChangeList class and 
> reused.
> - When an entry is reused the clear() method is called to reset it to a 
> "good" state.
> - One of the things stored in the ContainerChangeEntry was a reference to the 
> uncommittedChanges flags inside the relevant field container
> - This value was never cleared because it was a reference
> 
> In some cases what would happen is:
> - A ContainerChangeEntry would be allocated to point at a fc fcA with 
> uncommitedFlags set to point at fcA
> - fcA would be deallocated and the change entry put back into the pool
> - A new change would happen for a new fc fcB that would not require setting 
> the uncommitedFlags reference
> - When that ContainerChangeEntry was processed it would still reference the 
> uncommitedFlags for fcA and thus reference invalid memory
> - When this variable was used, poof, crash, bang, badness.

I understand the problem, what I would be interested in would be how did
you manage to trigger it because that seems to be the real problem. 

Especially how did you manage to get the following:

'- A new change would happen for a new fc fcB that would not require   
   setting the uncommitedFlags reference'


A  changed entry with an invalid flag reference should have never been
processed in a way that the invalid reference is touched. 

The only time I found this to happen was during ChangeList::dump.

So the 'real' bug is still out there. 


gerrit

-- 
It's Emergent[*], you see.

[*] [adj] A word favored by computer nerds; mandatory for DARPA research
          applications; on recent evidence, a synonym for 'doomed'.   


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to