On Mon, Jan 10, 2011 at 1:25 PM, Igor Stasenko <[email protected]> wrote:
> One example: > > #foo identityHash in one image > and same #foo identityHash > in another image could be different, because > these symbols could be interned in different time(s). > So, if you have a identity set or identity dictionary which using > symbols as keys, > which is often the case , you need to rehash them. > > Just tried it > image 1 > #awdqedqwd identityHash 633602048 > image 2 > #awdqedqwd identityHash 398196736 > > note that i specifically picked the symbol, which is not yet interned > (not exists) in image. > Obviously, you cannot change the identityHash of symbol(s) which > already present in image, > because you don't know where it used outside of object(s) you are loading. > > Uhhhhhh this was a good example ;) I forget about this guys heheh Thanks Igor. This is a clear example. > > On 10 January 2011 10:51, Mariano Martinez Peck <[email protected]> > wrote: > > Hi. I was almost sure that Set instances that were written in an > > ImageSegment, needed to be rehashed once they are swap in. And I even > > thought I was understanding why. But now, I don't understand at all why > is > > that. I would really appreciate anyway that can give me a hint. > > > > So...ImageSegment rehashes all Set instances (at loading time) that were > > written in an ImageSegment, and then exported with ReferenceStream. > Notice > > that this rehash is finally called from ImageSegment >> > comeFullyUpOnReload: > > smartRefStream. > > When you export an ImageSegment with a reference stream, you also > serializer > > the "outPointers" array. This is usually the case when you want to load > the > > object subgraph in another image or when do it backups so that to start > with > > a clean image. Notice that the Set rehash only occurs in this case. If > we > > use ImageSegment just to swap out / in, there is no Set rehash. > > So...I think that this has something to do about WHY Set instances need > to > > be rehashed. > > > > For each object ImageSegment write into the file, it writes both: object > > header + slots. So....the hash (12 bits in the object header) is > copied. > > When the object is loaded back, it continues to have the same hash. It > > doesn't change. > > So...if hash doesn't change, why Set instances need to be rehashes when > they > > come back from an ImageSegment? > > > > Thanks in advance, > > > > Mariano > > > > > > -- > Best regards, > Igor Stasenko AKA sig. > >
