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&)