From: SourceForge.net <no...@so...> - 2007-11-03 15:48:44
|
Bugs item #1755232, was opened at 2007-07-16 21:28 Message generated for change (Settings changed) made by wdashley You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=684730&aid=1755232&group_id=119701 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Interpreter Group: 3.2.0 >Status: Closed Resolution: Fixed Priority: 5 Private: No Submitted By: Mark Miesfeld (miesfeld) Assigned to: Rick McGuire (bigrixx) Summary: 3.1.2 tokenized program crashes on 3.2.0 revsion 590 Initial Comment: There is an access violation on Windows running a tokenized program, tokenized with 3.1.2. Unhandled exception at 0x6b0186e6 in rexx.exe: 0xC0000005: Access violation writing location 0xeacee9cc. I'm attaching a small rexx program, source and the tokenized version. (Source is TestArg.orx, tokenized version is TestArg.rex) I just did the tokenizing a few minutes ago on a system wher I have the 3.1.2 release installed. Then, when I execute it on a second system running 3.2.0 built from svn revision 590, it crashes. ---------------------------------------------------------------------- Comment By: Rick McGuire (bigrixx) Date: 2007-07-17 09:46 Message: Logged In: YES user_id=1125291 Originator: NO Committed revision 600. ---------------------------------------------------------------------- Comment By: Rick McGuire (bigrixx) Date: 2007-07-17 06:29 Message: Logged In: YES user_id=1125291 Originator: NO Thanks for the program Mark. I inadvertently introduced an image compatibility with my trace enhancements. I was storing the operator name in a field inherited from the base class that I believed would be null in older saved programs. Boy, was I wrong :-). This caused the object hash code to get used as a reference pointer, resulting in a crash when the program was reloaded. ---------------------------------------------------------------------- Comment By: Mark Miesfeld (miesfeld) Date: 2007-07-16 23:40 Message: Logged In: YES user_id=191588 Originator: YES Rick, I did some investigation, but it will probably take your skills to explain what the problem is. <grin> The access violation is in this code: inline void restoreObjectMark(RexxObject *markObject, RexxObject **pMarkObject) { /* update the object reference */ markObject = (RexxObject *)((ULONG)markObject + objOffset); SetObjectLive(markObject); /* Then Mark this object as live. */ *pMarkObject = markObject; /* now set this back again */ } After markObject is set to markObject + objOffset, it is not a valid pointer. If I just run the program and the debugger opens at the memory access, I see that. But, if I run rexx under the debugger (devenv /debugexe rexx .\TestArg.rex) and set a break point at the function, the break point is never hit. rexx runs and exits with -3. And of course, if I retokenize the test program using the rexxc built at the same same time as the interpreter, there is no crash, it runs fine. ---------------------------------------------------------------------- Comment By: Mark Miesfeld (miesfeld) Date: 2007-07-16 21:28 Message: Logged In: YES user_id=191588 Originator: YES File Added: TestArg.rex ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=684730&aid=1755232&group_id=119701 |