In z/OS V2R1, Language Environment (LE) introduced optimization changes to the dynamic_cast call that allowed the possibility of an incorrect return value. After upgrading z/OS to V2R1, you may experience abends in WebSphere Message Broker or IBM Integration Bus on a fairly frequent basis. These abends might occur at various points in a message flow, as the message is propagated from one node to the next.

It is recommended that all users of WebSphere Message Broker or IBM Integration Bus on z/OS that have upgraded to z/OS V2R1 request and apply PTF UI17014.

WebSphere Message Broker or IBM Integration Bus make use of the C++ dynamic_cast call to obtain a pointer to a specific object subtype. This object is obtained from a pointer to a generic supertype that contains specific context information relevant to the message flow node that is currently being executed.

In z/OS V2R1, Language Environment (LE) introduced optimization changes to the dynamic_cast call that resulted in a small timing window that allowed the possibility of an incorrect return value.

As a result, you might get an abend when WebSphere Message Broker or IBM Integration Bus attempts to access an object of the casted type and this is not a valid object.  WebSphere Message Broker or IBM Integration Bus tries to access an invalid storage address and this results in the abend(s).

This issue is resolved by z/OS APAR PI15855 and is available in PTF UI17014. Further details of APAR PI15855 can be found at:
PI15855: DYNAMIC_CAST NOT RETURNING THE CORRECT POINTER

Though the abend stack might look different each time, the root cause is usually the same. Below is a list of some of the commonly occurring traceback stacks, containing the last calls on each of the stacks, that are the result of APAR PI15855:

1.
ImbConfigurableServicesData::refreshShadow(ImbThreadContext*
ImbConfigurableServices::refresh(ImbThreadContext*)     

2.
ImbSemaphoreBase::Semaphore::Semaphore(ImbSemaphoreBase&,Imb
CpContext::loadDictionary(const ImbWstring&)            
CpContext::initialize(MtiImbSyntaxElement*)             

3.
ImbNamedLogSource::logName() const                       
ImbOwnedLogSource::logName() const                       
ImbRRSContextPreserver::¬ĮImbRRSContextPreserver()¬†¬†¬†¬†¬†¬†¬†

4.
ImbJniNode::EvaluationContext::deleteMessage(ImbMessage*,boo
c::Java_com_ibm_broker_plugin_MbMessage                 

5.
ImbJniNode::getEvaluationContext(ImbThreadContext*)
c::Java_com_ibm_broker_plugin_MbMessage

6.
ImbConverter::ImbConverterCache::find(const std::pair<unsign
ImbConverter::setCodepage(unsigned int,int,ImbThreadContext*

7.
ImbActivityLogThreadContext::getLogThreadBuffer(const ImbWst
ImbActivityLog::addEntry(const ImbActivityLogEntry&)   

Join The Discussion

Your email address will not be published. Required fields are marked *