harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Beyer" <ndbe...@apache.org>
Subject Re: [class loading] what's the expected behavior when a static method is invoked before its class is initialized?
Date Sun, 04 Jan 2009 17:20:12 GMT
On Sun, Jan 4, 2009 at 5:26 AM, Xiao-Feng Li <xiaofeng.li@gmail.com> wrote:
> Thanks. Then it is an issue blocking EUT3.5.
>
> Can we simply do not invoke any static method of a class under initialization?
>

I don't think that's going to work, as that would result in the same
error in Eclipse we see today, which is a NPE exception because a
field isn't populated. If the static method isn't invoked, then the
field will still be null and we'd still have the same error.

> This needs to add a check in the prolog of the static method on the
> initialization status of the owning class. It should not incur serious
> performance issue since it is a memory load plus a check.
>
> Is this VM SPEC expected behavior?

Could any of the IBM folks on the list get some advice from some class
loader experts?

-Nathan

>
> Thanks,
> xiaofeng
>
> On Sun, Jan 4, 2009 at 6:29 PM, chunrong lai <chunronglai@gmail.com> wrote:
>> hi, xiaofeng:
>>    Observing similar class initializing trace in the logfile of EUT35, I
>> see HARMONY can not pass EUT35 if we do not fix HARMONY-6020.
>>
>>    I did a quick test to modify some usings of the return non-inited value,
>> for example, processing of the bytecode of AALOAD. The test does make
>> Harmony pass some similar tests but still fail in other consuming cases. I
>> think that we just can not manually cover all of the consuming cases so we
>> need to fix the issue in the producing places. I am still trying this.
>> Lai, chunrong
>> Managed Runtime Technology Center, Intel
>> On Sun, Jan 4, 2009 at 2:59 PM, Xiao-Feng Li <xiaofeng.li@gmail.com> wrote:
>>
>>> See https://issues.apache.org/jira/browse/HARMONY-6020
>>>
>>> A static method is invoked when its owning class is under
>>> initialization. Should we simply return without really executing any
>>> code of the method?
>>>
>>> In normal case, I think the calling thread will wait till the class
>>> initialization is done, then continue the invocation. In this case,
>>> the calling thread is the initializing thread, and this invocation
>>> actually is part of the initialization sequence.
>>>
>>> I personally would like to throw an exception since I regard the code
>>> as problematic. But if RI can pass the test case, and more importantly
>>> if EUT depends on it, we probably should find a solution.
>>>
>>> Chunrong, do you know if EUT can pass (or continue) when this issue is
>>> resolved?
>>>
>>> Thanks,
>>> xiaofeng
>>>
>>> On Sun, Jan 4, 2009 at 2:46 PM, Xiao-Feng Li (JIRA) <jira@apache.org>
>>> wrote:
>>> >
>>> >    [
>>> https://issues.apache.org/jira/browse/HARMONY-6020?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12660536#action_12660536]
>>> >
>>> > Xiao-Feng Li commented on HARMONY-6020:
>>> > ---------------------------------------
>>> >
>>> > When we look at this class definition:
>>> >
>>> >  class Parent {
>>> >    private static final Child[] childCache = new Child[5];
>>> >
>>> >    public static Child createChild(){
>>> >        return childCache[0];
>>> >    }
>>> >  }
>>> >
>>> > It is clear that, the semantics expectation is, childCache should be
>>> assigned a value when class Parent is ready (i.e., initialized). And this
>>> value should be assigned to childCache before anybody can access any
>>> Parent's method, e.g., createChild(). This is the semantics expectation. I
>>> guess we need to ensure this semantics.
>>> >
>>> > Can we simply let this Child clinit() execute in this way: When it tries
>>> to call Parent.createChild() and finds Parent is under initialization, it
>>> simply returns null to ROOT without really invoking createChild().
>>> >
>>> > According to the JVM spec 2.17.4, it requires any static method
>>> invocation must happen after the class is "initialized." The problem is, how
>>> to deal with the situation when a static method is invoked when the owning
>>> class is under initialization.
>>> >
>>> > Thanks,
>>> > xiaofeng
>>> >
>>> >
>>> >> [DRLVM] Cyclical class dependency causes a failure not seen in RI
>>> >> -----------------------------------------------------------------
>>> >>
>>> >>                 Key: HARMONY-6020
>>> >>                 URL: https://issues.apache.org/jira/browse/HARMONY-6020
>>> >>             Project: Harmony
>>> >>          Issue Type: Bug
>>> >>          Components: DRLVM
>>> >>    Affects Versions: 5.0M8
>>> >>         Environment: Win Vista 32-bit
>>> >>            Reporter: Nathan Beyer
>>> >>            Assignee: Chunrong Lai
>>> >>         Attachments: cycle-project.zip
>>> >>
>>> >>
>>> >> If two classes have a cyclical dependency, some unexpected results may
>>> occur, which are not seen on RI (Sun 6u10).
>>> >
>>> > --
>>> > This message is automatically generated by JIRA.
>>> > -
>>> > You can reply to this email to add a comment to the issue online.
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Xiao-Feng Li
>>> Managed Runtime Technology Center, Intel
>>>
>>
>
>
>
> --
> Managed Runtime Technology Center, Intel
>

Mime
View raw message