Dmitry, Thank you for your kindly sponsorship!
- Yuji 2016-03-07 20:48 GMT+09:00 Dmitry Samersoff <dmitry.samers...@oracle.com>: > Yuji, > > CR number is JDK-8151368 > > -Dmitry > > On 2016-02-22 15:31, KUBOTA Yuji wrote: >> Hi all, >> >> Could you please review this patch? >> I do not have any account at openjdk now, so I need a sponsor. >> >> Thanks, >> Yuji >> >> 2015-12-18 15:27 GMT+09:00 KUBOTA Yuji <kubota.y...@gmail.com>: >>> Hi all, >>> >>> I caught an unexpected java.lang.ArithmeticException by CLHSDB through >>> jhsdb as below. >>> >>> ----- >>> ./jhsdb clhsdb --pid 16809 >>> Attaching to process 16809, please wait... >>> hsdb> class java/lang/ArithmeticException >>> java/lang/ArithmeticException @0x0000000100011958 >>> hsdb> class java >>> class not found: java >>> hsdb> class java/lang >>> Error: java.lang.ArithmeticException: / by zero >>> ----- >>> >>> I think that CLHSDB returns "class not found: java/lang". But >>> ArithmetricException is returned instead. >>> CLHSDB tries to search the given class name from the regular symbol >>> table and the shared symbol table. >>> And called the probe function of the shared symbol table does not >>> support a case of the empty bucket such as below expression >>> >>>> long index = hash % bucketCount(); >>> >>> then, throws ArithmetricException. >>> >>> The stack trace of this java.lang.ArithmeticException is here. >>> ------ >>> java.lang.ArithmeticException: / by zero >>> at >>> sun.jvm.hotspot.utilities.CompactHashTable.probe(CompactHashTable.java:89) >>> at sun.jvm.hotspot.memory.SymbolTable.probe(SymbolTable.java:97) >>> at sun.jvm.hotspot.memory.SymbolTable.probe(SymbolTable.java:75) >>> at >>> sun.jvm.hotspot.memory.SystemDictionary.find(SystemDictionary.java:149) >>> at >>> sun.jvm.hotspot.utilities.SystemDictionaryHelper.findInstanceKlass(SystemDictionaryHelper.java:107) >>> at >>> jdk.nashorn.internal.scripts.Script$Recompilation$2402$7541A$sa.main$jclass(sa.js:247) >>> at >>> jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:625) >>> at >>> jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:511) >>> at >>> jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) >>> at >>> jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199) >>> at >>> jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:383) >>> at >>> jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190) >>> at >>> sun.jvm.hotspot.utilities.soql.JSJavaScriptEngine.call(JSJavaScriptEngine.java:78) >>> at >>> sun.jvm.hotspot.CommandProcessor$52.doit(CommandProcessor.java:1755) >>> at >>> sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1951) >>> at >>> sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1921) >>> at sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1801) >>> at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:99) >>> at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:40) >>> at sun.jvm.hotspot.SALauncher.runCLHSDB(SALauncher.java:134) >>> at sun.jvm.hotspot.SALauncher.main(SALauncher.java:334) >>> ------ >>> >>> I have created a patch from jdk9/dev/hotspot (changeset: >>> 9625:de592ea5f7ba) as below, and checked to return "class not found >>> java/lang" correctly. Please review it. >>> >>> diff --git >>> a/agent/src/share/classes/sun/jvm/hotspot/utilities/CompactHashTable.java >>> b/agent/src/share/classes/sun/jvm/hotspot/utilities/CompactHashTable.java >>> --- >>> a/agent/src/share/classes/sun/jvm/hotspot/utilities/CompactHashTable.java >>> +++ >>> b/agent/src/share/classes/sun/jvm/hotspot/utilities/CompactHashTable.java >>> @@ -86,6 +86,10 @@ >>> Address baseAddress = baseAddressField.getValue(addr); >>> Address bucket = bucketsField.getValue(addr); >>> Address bucketEnd = bucket; >>> + >>> + if (bucketCount() == 0) { >>> + return null; >>> + } >>> long index = hash % bucketCount(); >>> int bucketInfo = (int)bucket.getCIntegerAt(index * uintSize, >>> uintSize, true); >>> int bucketOffset = bucketOffset(bucketInfo); >>> >>> >>> Thanks, >>> Yuji > > > -- > Dmitry Samersoff > Oracle Java development team, Saint Petersburg, Russia > * I would love to change the world, but they won't give me the sources.