[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    PING: Unexpected ArithmeticException at sun.jvm.hotspot.utilities.CompactHashTable
From:       KUBOTA Yuji <kubota.yuji () gmail ! com>
Date:       2016-02-22 12:31:27
Message-ID: CABU-27OngawMU1gSUZGx84U=qkGo_HYfFsa8z6edHgKM6jr0qQ () mail ! gmail ! com
[Download RAW message or body]

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.yuji@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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic