If both programs use %alloc, and try to use more memory than allocated they can step on each other, but they won't step on each other's global data space which is somewhere else. Bad code like this where you try to use more memory than allocated can cause other issues as well. The next allocate from the same heap may overwrite data in "value" because it goes out and gets the next piece of memory that is 16 bit alligned. I don't believe it actually allocates more from the heap unless it needs to. The first allocation grabs a large chunk of memory and assigns it to your activation group. If your based variable is larger than the amount of heap allocated, you might not see an error because you are still within your activation group space, but if you try to write off the end of the actually allocated space, you will get errors. Maybe boundary errors, maybe pointer errors, but in either case, they are likely to be intermittant. One thing a job cannot do is write outside it's space SLS or not. Not sure if a program in an activation group can write outside the activation group's space, haven't tried that.
Mark Murphy
STAR BASE Consulting, Inc.
mmurphy@xxxxxxxxxxxxxxx
-----Zachary Johnson <ZJohnson@xxxxxxxxxxxxx> wrote: -----
To: "RPG programming on the IBM i / System i (rpg400-l@xxxxxxxxxxxx)" <rpg400-l@xxxxxxxxxxxx>
From: Zachary Johnson <ZJohnson@xxxxxxxxxxxxx>
Date: 03/31/2015 11:58AM
Subject: Protecting my application from memory problems
Hi all,
Is there a way that I can protect my application from other programs down the line doing memory over writes. Separate activation groups will separate the heaps but I'm not 100% certain this will solve my problem because of SLS.
Here is a scenario, assume these are using the default SLS heap. PGMA is my app and PEP and PGMB is another app that I am calling:
PGMA running activation group 'GROUP1'
Calls PGMB activation group *CALLER.
If PGMB does something like
D value s 20a Based(ptr)
ptr = %Alloc(10) ;
Clear value;
Return;
This potentially causes PGMA to fail (through no fault of his own) due to the memory over write. I'm thinking I can use a different activation group to protect myself from PGMB doing something stupid. He may fail eventually but it won't affect PGMA.
PGMA activation group 'GROUP1'
Calls PGMA1 activation group 'GROUP2'
Calls PGMB activation group *CALLER.
This would create a boundary between PGMA and PGMB right?
Thanks for any input.
Zach
NOTICE: This electronic mail message and any files transmitted with it are intended
exclusively for the individual or entity to which it is addressed. The message,
together with any attachment, may contain confidential and/or privileged information.
Any unauthorized review, use, printing, saving, copying, disclosure or distribution
is strictly prohibited. If you have received this message in error, please
immediately advise the sender by reply email and delete all copies.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact
[javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.