[Oberon] PO: Illegal memory access in GC
andreas_pirklbauer at yahoo.com
Fri May 15 12:18:16 CEST 2020
> The reason for the illegal memory read lies within the
> garbage collector in module Kernel.Mod.
> WHILE pvadr # 0 DO
> SYSTEM.GET(pvadr, p); SYSTEM.GET(p-4, offadr);
> IF (p >= heapOrg) & (offadr = 0) THEN …
> IF offset # -1 THEN (*down*)
> SYSTEM.GET(pos+offset, r); SYSTEM.GET(r-4, offadr);
> IF (r >= heapOrg) & (offadr = 0) THEN ...
> As soon as I inserted the tests, the illegal access
> was gone and Extended Oberon was running.
I thought I had fixed this several years ago, but apparently the change
didn’t make it to the official version. This vexes me. I have now made an
update. The two code fragments in Extended Oberon now read:
WHILE pvadr # 0 DO SYSTEM.GET(pvadr, p);
IF p >= heapOrg THEN SYSTEM.GET(p-4, offadr);
IF offset # -1 THEN (*down*)
IF r >= heapOrg THEN SYSTEM.GET(r-4, offadr);
IF offadr = 0 THEN SYSTEM.PUT(pos+offset, q); q := p; p := r END
Can you please try again with the latest version on Github?
More information about the Oberon