|
On May 17, 2016, at 12:26 PM, Needles,Stephen J <SNEEDLES@xxxxxxxxxxxxxxxx> wrote:
Jon,
Hopefully, this is the info you wanted.
CA_PPSDS is the pointer to the failing program's PSDS. When I run the test, the dump from the failing Condition Handler (MCH3601) shows:
CA_PPSDS POINTER SPP:C5E6E7D61E6470B0
But it also says that the pointer is non-addressable in the DS.
COMM_AREA DS
CA_CALLINGPGM CHAR(10) NOT ADDRESSABLE
CA_DUMPFLAG CHAR(1) NOT ADDRESSABLE
CA_ERRCONTRACT CHAR(10) NOT ADDRESSABLE
CA_ERRENTRYDATE ZONED(8,0) NOT ADDRESSABLE
CA_ERRENTRYTIME ZONED(6,0) NOT ADDRESSABLE
CA_PPSDS POINTER NOT ADDRESSABLE
CA_RUNID CHAR(100) NOT ADDRESSABLE
CA_SERVICEPGM CHAR(10) NOT ADDRESSABLE
CA_SQLCODE CHAR(10) NOT ADDRESSABLE
CA_SUBPROCEDURE CHAR(32) NOT ADDRESSABLE
Steve Needles
-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Jon Paris
Sent: Tuesday, May 17, 2016 10:21 AM
To: Rpg400 Rpg400-L <rpg400-l@xxxxxxxxxxxx>
Subject: Re: %ADDR() in a DS is not resolving to the correct value.
Glad you have a work around - but it would still be nice to know the info I mentioned.
Jon Paris
www.partner400.com
www.SystemiDeveloper.com
On May 17, 2016, at 11:16 AM, Needles,Stephen J <SNEEDLES@xxxxxxxxxxxxxxxx> wrote:
If I add an eval as the 1st line of code in the c-spec to set the address, all is well.
Eval CA_pPsds = %ADDR(PGM_PSDS);
And then the value carries through to the conditionhandler just fine.
Steve Needles | IT Architect | Specialized Distribution | Northland
Insurance Travelers
385 Washington | SB03N
St. Paul, MN 55102
W: 651.310.4203
-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Jon
Paris
Sent: Tuesday, May 17, 2016 9:55 AM
To: Rpg400 Rpg400-L <rpg400-l@xxxxxxxxxxxx>
Subject: Re: %ADDR() in a DS is not resolving to the correct value.
The system will tell you the pointer is null - but have you looked at the underlying numeric value? The system regards a pointer as null if its tag bit is not set regardless of the value within the pointer.
I suggest you try defining a second pointer in the program (stand-alone) using the same initialization. At the point of failure if the underlying hex values of the two fields are identical but the new field is a valid pointer and the DS one is not then it means that DS has been copied by a non-pointer move. That at least gives you something to look for.
I would also suggest placing a watch breakpoint on the DS pointer to see exactly when it is getting nuked.
Jon Paris
www.partner400.com
www.SystemiDeveloper.com
On May 17, 2016, at 10:02 AM, Needles,Stephen J <SNEEDLES@xxxxxxxxxxxxxxxx> wrote:
Jon,
No particular reason for the definition being the way that it is.
Only that IBM's examples show the definition in this way.
(http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rzasc/sc0925
0 7346.htm%23hcndhd - see the CommArea definition)
Keep in mind that the pointer's value is assigned in the failing program and it is NULL. The condition handler is successfully receiving the NULL value.
Also that this process is and has been in use for years.
I've provided a stripped down example to IBM with the PMR and they were able to duplicate the MCH3601 error.
Steve Needles
-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of
Jon Paris
Sent: Monday, May 16, 2016 2:16 PM
To: Rpg400 Rpg400-L <rpg400-l@xxxxxxxxxxxx>
Subject: Re: %ADDR() in a DS is not resolving to the correct value.
CA_pPsds appears to be DEFINED within a DS. Any particular reason for that?
If, for example, a copy at the DS level took place in the code that would leave the value in the pointer intact but nullify it as a pointer. Any chance that is happening somewhere in the code?
By “copy” I include the DS being passed as a parm with Const where the sending an proto definitions are not a 100% match. That would cause a copy to be made prior to the call.
Jon Paris
www.partner400.com
www.SystemiDeveloper.com
On May 16, 2016, at 2:26 PM, Needles,Stephen J <SNEEDLES@xxxxxxxxxxxxxxxx> wrote:
The service program *IS* the condition handler.
Running the program; not the tame one, but the feral one; the pointer...
D CA_pPsds * INZ(%ADDR(PGM_PSDS))
Has this value: CA_PPSDS = SPP:*NULL
It should be populated at this point as we are into the c-specs at this point. Nothing has had an opportunity to step on the value either.
I'm stripping things to the bone for the PMR. I'll post more stuff as I carve away the noise. Perhaps I'll stumble on something the developer did to make this fail.
The register is registered and de-registered with each program execution.
The call stack is fine...no contamination. It will fail in a pristine job.
Steve Needles
-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of
Hiebert, Chris
Sent: Monday, May 16, 2016 11:58 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: RE: %ADDR() in a DS is not resolving to the correct value.
-- I don't think that the *SRVPGM angle has anything to do with the error as my tame test program works just fine.
Steve are you saying that the Service Program is *using* the condition handler?
Or are you saying that the service program *is* the condition handler?
Do you unregister your condition handlers?
Could there be in issue where the condition handler is being triggered for a program that no longer exists on the call stack.
In which the previously pointed to PSDS is no longer allocated?
Chris Hiebert
Senior Programmer/Analyst
Disclaimer: Any views or opinions presented are solely those of the author and do not necessarily represent those of the company.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take
a moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
________________________________
This communication, including attachments, is confidential, may be subject to legal privileges, and is intended for the sole use of the addressee. Any use, duplication, disclosure or dissemination of this communication, other than by the addressee, is prohibited. If you have received this communication in error, please notify the sender immediately and delete or destroy this communication and all copies.
TRVDiscDefault::1201
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take
a moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
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.