APAR status
Closed as program error.
Error description
During the evaluation of an XPath in a JavaCompute node it is possible for Java objects to be garbage collected before native code has finished using them. This can cause unsafe storage access leading to an abend. A typical stack is shown below: #0 0x7fbb054fc61b in ?? #1 0x7fbb054fc951 in ImbAbend::printStackForCurrentThread(int, bool, void const*, void*, char const*) #2 0x7fbb052b2e89 in ImbAbend::dumpCurrentStacksToFile(void const*, int) #3 0x7fbb052b2853 in ImbAbend::dumpToFile(char*, char const*, int, char const*, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, void const*) #4 0x7fbb052b1c24 in ImbAbend::logSystemErrorInternal(char const*, int, char const*, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, void const*, bool) #5 0x7fbb052b1eb5 in ImbAbend::logSystemErrorAndTerminateProcessInternal(char const*, int, char const*, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, void const*, bool) #6 0x7fbb052af221 in ImbAbend::signalHandlerInternal(int, siginfo_t*, void*) #7 0x7fbb052af0dc in ImbAbendSignalHandler #8 0x7fbb02c5c3d0 in ?? #9 0x7fbb0586f1bf in ImbThreadSafeCount::increment() #10 0x7fbb0586f4ce in ImbWstring::linkToBuffer(ImbWstring::ImbRemoteBuffer*) #11 0x7fbb0586d79a in ImbWstring::assign(ImbWstring const&) #12 0x4254ef in ImbWstring::operator=(ImbWstring const&) #13 0x7fbaff522c19 in ImbXPathEngine::substituteNamespace(ImbXPathEngineContext*, ImbWstring*, bool) #14 0x7fbaff522cc9 in ImbXPathEngine::nameMatches(ImbXPathEngineContext*, ImbXPathNodetest*, ImbSyntaxElement*, bool) #15 0x7fbaff523a3b in ImbXPathEngine::parentNodeTest(ImbXPathEngineContext*, ImbXPathNodetest*, ImbSyntaxElement*, ImbSyntaxElement*) #16 0x7fbaff52540c in ImbXPathEngine::nodesetAxisAncestor(ImbXPathEngineContext*, ImbXPathNodetest*, int, ImbSyntaxElement*, ImbXPathValue&, int) #17 0x7fbaff51ded3 in ImbXPathEngine::executeNodetest(ImbXPathEngineContext*, int, ImbXPathNodetest*, int, ImbSyntaxElement*, ImbXPathValue&) #18 0x7fbaff51e334 in ImbXPathEngine::executeStep(ImbXPathEngineContext*, ImbXPathStep*, ImbXPathValue&, bool) #19 0x7fbaff51e732 in ImbXPathEngine::executePath(ImbXPathEngineContext*, ImbXPathLocationPath*, ImbSyntaxElement*, ImbXPathValue&) #20 0x7fbaff51d247 in ImbXPathEngine::evaluateExpression(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int) #21 0x7fbaff53224a in ImbXPathEngine::evaluateFunctionNot(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int, ImbXPathValue&) #22 0x7fbaff51cdf3 in ImbXPathEngine::evaluateExpression(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int) #23 0x7fbaff51db6c in ImbXPathEngine::filterPredicate(ImbXPathEngineContext*, ImbXPathPredicate*, ImbXPathValue&, bool) #24 0x7fbaff51e3d0 in ImbXPathEngine::executeStep(ImbXPathEngineContext*, ImbXPathStep*, ImbXPathValue&, bool) #25 0x7fbaff51e59f in ImbXPathEngine::executeStep(ImbXPathEngineContext*, ImbXPathStep*, ImbXPathValue&, bool) #26 0x7fbaff51e732 in ImbXPathEngine::executePath(ImbXPathEngineContext*, ImbXPathLocationPath*, ImbSyntaxElement*, ImbXPathValue&) #27 0x7fbaff51d247 in ImbXPathEngine::evaluateExpression(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int) #28 0x7fbaff51c452 in ImbXPathEngine::evaluate(ImbWstring const&, ImbSyntaxElement*, ImbSyntaxElement*, ImbNamespaceBindings*, ImbXPathVariables*, bool) #29 0x7fbafeba72b2 in Java_com_ibm_broker_plugin_MbMessage__1evaluateXPath__JLjava_lan g_String_2JJJ #30 0x7fbac8054101 in ?? Additional Symptom(s) Search Keyword(s):
Local fix
Ensure that any MbXPath, MbNamespace or MbXPathVariables objects are referenced in the Java compute node after the call to evaluateXPath. For example by modifying code such as this: // get namespace MbNamespaceBindings nsBindings = new MbNamespaceBindings(); nsBindings.setDefaultNamespace(tempMessage.getRootElement().getL astChild().getFirstChild().getNamespace()); //Note that we use a deliberately expensive XPath here, we are forcing every tree node //to be visited so that we give the Java garbage colelctor a chance to get in Object objects = tempMessage.evaluateXPath("//*[not(ancestor::X)]", nsBindings); to read: // get namespace MbNamespaceBindings nsBindings = new MbNamespaceBindings(); nsBindings.setDefaultNamespace(tempMessage.getRootElement().getL astChild().getFirstChild().getNamespace()); //Note that we use a deliberately expensive XPath here, we are forcing every tree node //to be visited so that we give the Java garbage colelctor a chance to get in Object objects = tempMessage.evaluateXPath("//*[not(ancestor::X)]", nsBindings); //Reference the namespace bindings again to keep them in scope nsBindings.toString();
Problem summary
**************************************************************** USERS AFFECTED: All users of WebSphere Message Broker version 8.0.0.7 and above or IBM Integration Bus version 9.0.0.6 or 10.0.0.0 and above using XPath from a JavaCompute Node Platforms affected: z/OS, MultiPlatform **************************************************************** PROBLEM DESCRIPTION: During the evaluation of an XPath in a JavaCompute node it is possible for Java objects to be garbage collected before native code has finished using them. This can cause unsafe storage access leading to an abend. A typical stack is shown below: #0 0x7fbb054fc61b in ?? #1 0x7fbb054fc951 in ImbAbend::printStackForCurrentThread(int, bool, void const*, void*, char const*) #2 0x7fbb052b2e89 in ImbAbend::dumpCurrentStacksToFile(void const*, int) #3 0x7fbb052b2853 in ImbAbend::dumpToFile(char*, char const*, int, char const*, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, void const*) #4 0x7fbb052b1c24 in ImbAbend::logSystemErrorInternal(char const*, int, char const*, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, void const*, bool) #5 0x7fbb052b1eb5 in ImbAbend::logSystemErrorAndTerminateProcessInternal(char const*, int, char const*, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, ImbAbend::Insert const&, void const*, bool) #6 0x7fbb052af221 in ImbAbend::signalHandlerInternal(int, siginfo_t*, void*) #7 0x7fbb052af0dc in ImbAbendSignalHandler #8 0x7fbb02c5c3d0 in ?? #9 0x7fbb0586f1bf in ImbThreadSafeCount::increment() #10 0x7fbb0586f4ce in ImbWstring::linkToBuffer(ImbWstring::ImbRemoteBuffer*) #11 0x7fbb0586d79a in ImbWstring::assign(ImbWstring const&) #12 0x4254ef in ImbWstring::operator=(ImbWstring const&) #13 0x7fbaff522c19 in ImbXPathEngine::substituteNamespace(ImbXPathEngineContext*, ImbWstring*, bool) #14 0x7fbaff522cc9 in ImbXPathEngine::nameMatches(ImbXPathEngineContext*, ImbXPathNodetest*, ImbSyntaxElement*, bool) #15 0x7fbaff523a3b in ImbXPathEngine::parentNodeTest(ImbXPathEngineContext*, ImbXPathNodetest*, ImbSyntaxElement*, ImbSyntaxElement*) #16 0x7fbaff52540c in ImbXPathEngine::nodesetAxisAncestor(ImbXPathEngineContext*, ImbXPathNodetest*, int, ImbSyntaxElement*, ImbXPathValue&, int) #17 0x7fbaff51ded3 in ImbXPathEngine::executeNodetest(ImbXPathEngineContext*, int, ImbXPathNodetest*, int, ImbSyntaxElement*, ImbXPathValue&) #18 0x7fbaff51e334 in ImbXPathEngine::executeStep(ImbXPathEngineContext*, ImbXPathStep*, ImbXPathValue&, bool) #19 0x7fbaff51e732 in ImbXPathEngine::executePath(ImbXPathEngineContext*, ImbXPathLocationPath*, ImbSyntaxElement*, ImbXPathValue&) #20 0x7fbaff51d247 in ImbXPathEngine::evaluateExpression(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int) #21 0x7fbaff53224a in ImbXPathEngine::evaluateFunctionNot(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int, ImbXPathValue&) #22 0x7fbaff51cdf3 in ImbXPathEngine::evaluateExpression(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int) #23 0x7fbaff51db6c in ImbXPathEngine::filterPredicate(ImbXPathEngineContext*, ImbXPathPredicate*, ImbXPathValue&, bool) #24 0x7fbaff51e3d0 in ImbXPathEngine::executeStep(ImbXPathEngineContext*, ImbXPathStep*, ImbXPathValue&, bool) #25 0x7fbaff51e59f in ImbXPathEngine::executeStep(ImbXPathEngineContext*, ImbXPathStep*, ImbXPathValue&, bool) #26 0x7fbaff51e732 in ImbXPathEngine::executePath(ImbXPathEngineContext*, ImbXPathLocationPath*, ImbSyntaxElement*, ImbXPathValue&) #27 0x7fbaff51d247 in ImbXPathEngine::evaluateExpression(ImbXPathEngineContext*, ImbXPathExpression*, ImbSyntaxElement*, int, int) #28 0x7fbaff51c452 in ImbXPathEngine::evaluate(ImbWstring const&, ImbSyntaxElement*, ImbSyntaxElement*, ImbNamespaceBindings*, ImbXPathVariables*, bool) #29 0x7fbafeba72b2 in Java_com_ibm_broker_plugin_MbMessage__1evaluateXPath__JLjava_lan g_String_2JJJ #30 0x7fbac8054101 in ?? There are a number of resource name changes between WebSphere Message Broker and IBM Integration Bus Version 9.0. For details visit http://pic.dhe.ibm.com/infocenter/wmbhelp/v9r0m0/topic/com.ibm.e tools.mft.doc/bb23814_.htm
Problem conclusion
The XPath processor no longer abends under load. --------------------------------------------------------------- The fix is targeted for delivery in the following PTFs: Version Maintenance Level v10.0 10.0.0.8 v8.0 8.0.0.9 v9.0 9.0.0.7 The latest available maintenance can be obtained from: http://www-01.ibm.com/support/docview.wss?rs=849&uid=swg27006041 If the maintenance level is not yet available,information on its planned availability can be found on: http://www-1.ibm.com/support/docview.wss?rs=849&uid=swg27006308 ---------------------------------------------------------------
Temporary fix
Comments
APAR Information
APAR number
IT18337
Reported component name
INTEGRATION BUS
Reported component ID
5724J0540
Reported release
A00
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2016-12-09
Closed date
2017-01-19
Last modified date
2017-01-19
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
INTEGRATION BUS
Fixed component ID
5724J0540
Applicable component levels
RA00 PSY
UP
[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSNQK6","label":"IBM Integration Bus"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.0","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
23 March 2020