harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xiao-Feng Li" <xiaofeng...@gmail.com>
Subject [class loading] what's the expected behavior when a static method is invoked before its class is initialized?
Date Sun, 04 Jan 2009 06:59:36 GMT
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

Mime
View raw message