To be completely accurate, we are developing a new component for an
existing product. The existing product is written entirely in Assembler
and is not compatible with LE. I would love to not use CEEPIPI, but
that's a non-starter. The new component needs to use a couple of APIs
that are only provided in C and C++ and require LE. Were it not for the
LE requirement, we would have used someone else's C/C++ compiler/library
that plays more nicely with Assembler.
I suspect that your suggestion of init_sub_dp, start_seq, call_sub, and
end_seq will still get the same behavior in some cases, e.g., an abend
in the driving program anywhere between two start_seq and end_seq. In
that case, we would just be reconfiguring the problem, not really fixing it.
Steve Comstock wrote:
Gord Tomlin wrote:
Definitely, the key item is the meaning of "dormant". Clearly, the
environment "exists" until it is destroyed by the term call. The
question is what should happen when the environment exists but is
dormant.
IBM states in the description of init_sub that it "sets the
environment dormant so that exceptions are percolated out of it." The
issue is whether it is correct for the LE recovery routines to alter
the abend information for an abend that occurs while the environment
is dormant. Since it is a documented that callers of CEEPIPI not be LE
compliant, it is illogical for LE to alter the abend information for
an abend that occurs in this non LE-compliant environment.
The idea of terminating the environment after every subroutine
eliminates one of the main benefits of using CEEPIPI, that being the
avoidance of the overhead of creating and destroying the LE
environment around every subroutine call.
[snip old stuff]
A couple of things: perhaps you can re-examine the need for
PIPI. I've never been a big fan and always consider it to be
a temporary solution to a problem, until one has the time to
get all the subprograms LE-conforming. So I was surprised
when you wrote you were developing a new application that
used PIPI.
Also, if you can do the init_sub_dp option, then do start_seq
and keep calling subroutines with call_sub, and then do
end_seq then term keeps you from having to break down the
environment every time. Of course, it may not work in your
situation, based on your logic needs.
Finally, I recommend you talk with John Monti of the LE group.
He really knows the product and all the developers. If you
want to do that, drop me a line off list and I'll pass his
contact info to you (don't want to publish his email publicly,
to avoid a rash of emails to him).
<add>
Of course, don't overlook the training option:
"Using LE Services in z/OS" - 3 days
http://www.trainersfriend.com/Language_Environment_courses/m512descr.htm
as well as
"Secrets of Inter-Language Communication in z/OS" - 3.5 days
http://www.trainersfriend.com/Language_Environment_courses/m520descr.htm
</add>
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html