From: Rick M. <obj...@gm...> - 2007-02-20 22:31:38
|
I'm able to recreate this crash on Windows now. It looks like a memory overlay is occurring. Interestingly, if I run outside the debugger, it crashes at the same point it does for you. If I starting running inside th= e debugger initially, it traps at a different location. This will probably take me a little while to get the memory overlay bracketed enough that I ca= n figure out how to set a watch point for the memory overlay location. Unfortunately, the addresses move around with each run, so I can't just record the address and start over :-( On 2/20/07, Ren=E9 Jansen <rvj...@xs...> wrote: > > Hi Rick, > > ok, I prepared the method like this: > > inline DeadObject *findFit(size_t length, size_t *realLength) > / > ************************************************************************ > ******/ > /* Function: Find first object large enough to satisfy this > request. If the */ > /* pool is empty, this returns NULL. If a block is returned it > is removed */ > /* from the pool before > return. */ > / > ************************************************************************ > ******/ > { > DeadObject *newObject =3D anchor.next; > size_t newLength; > int probes =3D 1; > printf("1"); > for (newLength =3D newObject->size(); newLength !=3D 0; > newLength =3D newObject->size()) { > printf("2"); > if (newLength >=3D length) { > printf("3"); > if (probes > ReorderThreshold) > { > // we had to examine a lot of objects to get a > match. > // it's worthwhile percolating the larger > objects on the rest of the > // chain toward the front. We only do this when > we're starting to have problems > // allocating objects because of fragmentation. > DeadObject *tailObject =3D newObject->next; > for (size_t tailLength =3D tailObject->size(); > tailLength !=3D 0; tailLength =3D tailObject->size()) > { > printf("4"); > // the size we just had problems with is a > good marker for > // selecting candidates to move toward the > front. The will guarantee > // that a similar request for the same size > will succeed faster in the future. > DeadObject *nextObject =3D tailObject->next; > if (tailLength > length) > { > printf("5"); > tailObject->remove(); > addSingle(tailObject); > } > tailObject =3D nextObject; > printf("6"); > } > } > newObject->remove(); > printf("7"); > logHit(); > printf("8"); > *realLength =3D newLength; > printf("9"); > return newObject; > } > probes++; > newObject =3D newObject->next; > } > logMiss(); > return NULL; > > > and after this sequence of calls the segfault occurs: > > [...] > 789123789123789123789123789123789123789123789123789123789122222222222223 > 789123789122222222222222222222378912378912378912378912378912378912378912 > 378912378912378912378912378912378912378912378912378912378912378912378912 > 378912378912378912378912378912378912378912378912378912378912378912378912 > 378912378912378912378912378912378912378912378912378912378912378912378912 > 222222222222222222237891222222222222222222222378912378912378912378912378 > 912378912378912378912378912378912378912378912378912378912378912378912378 > 912378912378912378912378912378912378912378912378912378912378912378912378 > 912378912378912378912378912378912378912378912378912378912378912378912378 > 912378912378912378912378912378912378912378912378912378912223789123789122 > 237891237891237891237891237891237891237891237891237891237891237891237891 > 237891237891237891237891237891237891237891237891237891237891237891237891 > 237891237891237891237891237891237891237891237891237891237891237891237891 > 237891237891237891237891237891237891237891237891237891237891237891237891 > 237891237891237891237891237891237891237891237891237891237891237891237891 > 237891237891237891237891237891237891237891237891237891237891237891237891 > 237891223789122222222222222222222223789123789122378912378912222222222222 > 222222222237891222222222222222222222222222222222222222222222222222222222 > 222222222222222222222222222222222222222222222222222223464646464564645646 > 464646464646464646464646464646464646456464564646464646464645646464645646 > 464646464564646464646464646464564646456464645645645646464646464564564564 > 645646464646464646464646464646464646464646464646464646464646789122237891 > 22223Segmentation fault > > > Ren=E9. > > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge&CID=3D= DEVDEV > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > |