RFR(S): JDK-8054194 jstack crash: assert(handle != NULL) failed: JNI handle should not be null
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Tue Aug 26 17:00:40 UTC 2014
On 8/26/14 8:25 AM, Dmitry Samersoff wrote:
> Serguei,
>
> On 2014-08-26 14:58, serguei.spitsyn at oracle.com wrote:
>> Dmitry,
>>
>> I doubt, this webrev fixes the issue.
>> At least, I can't see it yet.
>>
>> It looks like the assert is because the imagePath_ID or symbolPath_ID
>> were not initialized properly.
> If imagePath_ID or symbolPath_ID is NULL we get a crash, not assert.
>
> Assert happens if (and only if) path is NULL on call to
> env->GetStringUTFChars(path, &isCopy); at ll. 316, 321
>
> I verified it manually by setting these variables to different values.
Nice.
But how do we get path == null from one of the statements below ?
Is it because of the clazz value?
path = (jstring) env->GetStaticObjectField(clazz, imagePath_ID);
buf = env->GetStringUTFChars(path, &isCopy); <======== ???
CHECK_EXCEPTION_(false);
AutoJavaString imagePath(env, path, buf);
path = (jstring) env->GetStaticObjectField(clazz, symbolPath_ID);
buf = env->GetStringUTFChars(path, &isCopy); <======== ???
CHECK_EXCEPTION_(false);
>
>> But there is no clear explanation yet how this could happen.
>> Maybe, the conclusion above was wrong, but some prove is needed and/or
>> another possible root cause.
>>
>> Also, Staffan is right, about killing the remote process.
>> The remote process has no relation to the fix.
> I can reproduce the problem (intermittently, once in couple of hours) by
> two scripts running in two separate windows - first script runs and
> kills Java2D demo second one runs jps and jstack -F against Java2D demo.
>
> After the fix, problem is not reproducible anymore.
>
> But I'll put more efforts to understand what is going wrong with jstack
> process.
Good.
Thanks,
Serguei
>
> -Dmitry
>
>> Thanks,
>> Serguei
>>
>>
>> On 8/25/14 3:58 AM, Staffan Larsen wrote:
>>> Dmitry,
>>>
>>> Your changes look good (except missing spaces after commas). But what I do not understand is how this relates to the bug. The code in setImageAndSymbolPath() is not looking at the remote process, it’s just setting up data in the jstack process. How does killing the remote process affect this code? What am I missing?
>>>
>>> /Staffan
>>>
>>> On 21 aug 2014, at 14:56, Dmitry Samersoff <dmitry.samersoff at oracle.com> wrote:
>>>
>>>> Hi Everyone,
>>>>
>>>> Please review small agent changes:
>>>>
>>>> http://cr.openjdk.java.net/~dsamersoff/JDK-8054194/webrev.01/
>>>>
>>>> Under windows, If jstack attempts to attach to java process that is
>>>> being killed by someone else, GetStaticObjectField might return NULL.
>>>>
>>>> -Dmitry
>>>>
>>>> --
>>>> Dmitry Samersoff
>>>> Oracle Java development team, Saint Petersburg, Russia
>>>> * I would love to change the world, but they won't give me the sources.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20140826/6166b0a0/attachment.html>
More information about the serviceability-dev
mailing list