× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



G'day Len,

See below interspersed.


[mailto:midrange-l-bounces@xxxxxxxxxxxx]On Behalf Of Len Lester
Sent: Friday, 1 October 2010 7:00 AM
Program A calls Program B which calls Program C.

Programs B and C are in an activation group.

Program A can be instructed to RCLACTGRP the group which
contains B and C.

If I re-compile program C the replacement object is in use until I
instruct program A to RCLACTGRP before calling program B.

For "the replacement object" I think you mean "the renamed object in library QRPLOBJ".


After that, the new version of program C is in use.

This doesn't work for program B. THe replacement object stays in use
and the new version of the program is not used.

See previous response.


If I re-compile C again and instruct program A again to
RCLACTGRP, the
new version of program C is put into use but the replacement
object for
B remains on the call stack.

See previous response.


The WRKJOB command verifies that B and C are in the same activation
group and the program A has deleted the activation group.

Why won't the new version of program B come into use?

I assume that at least program A is RPG. This is probably because program A is holding on to a pointer to the original program B (renamed and in library QRPLOBJ).

Once upon a time program A would have asked the operating system to re-resolve the pointer to program B each time program A called program B. At some point this was changed.

From then on it changed, probably for performance reasons:

If program A is calling program B as a literal, then the pointer to program B is set only once - under the covers at the beginning of program A.

If program A is calling program B as a variable, then the pointer to program B is set the first time program A calls it, then each subsequent time the call is made from that line of code, if the same program (B) is to be called, then the pointer is not reset, that is the previous pointer value is re-used.

I believe that this explains your results. I find that signing off or rerouting the interactive job fixes the "problem". RCLACTGRP of program A's activation group, or RCLRSC may also do something if program A is in the default activation group.



Both Program B and Program C call program D which is in the default
activation group.

Other programs besides A call Program B.



Regards,

Kevin Wright

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.