harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elena Semukhina (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-3253) [drlvm][thread manager] Thread.join() does not ensure the TERMINATED state of a thread
Date Wed, 28 Feb 2007 12:46:57 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-3253?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12476572
] 

Elena Semukhina commented on HARMONY-3253:
------------------------------------------

I tried the patch and see that the test now passes.
I only have a question: why do you keep the following code in Thread.getState():

        if (0 != (state & VMThreadManager.JVMTI_THREAD_STATE_TERMINATED)) {         
            return State.TERMINATED;

Isn't it redundant now?

> [drlvm][thread manager] Thread.join() does not ensure the TERMINATED state of a thread
> --------------------------------------------------------------------------------------
>
>                 Key: HARMONY-3253
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3253
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Elena Semukhina
>         Attachments: accurate-terminated-state.patch
>
>
>  The kernel test ThreadTest.testInterruptTerminated() fails intermittently with the message
"interrupt status has not changed to true" when interrupting a terminated thread. This could
happen when a thread exited join() but its state at that moment was not TERMINATED.
> The following test shows up that the state of a thread after termination is not always
TERMINATED.
> public class TestGetStateJoined {
>     public static void main(String args[]) {
>         int count = 100;
>         for (int i = 0; i < count; i++) {
>             Thread t = new Thread();
>             t.start();
>             try {
>                 t.join();
>             } catch (InterruptedException e) {
>             }
>             Thread.State ts = t.getState();
>             System.out.println("state : " + ts);
>         }
>     }
> }
> The test alternately prints "RUNNABLE" and "TERMINATED" on DRLVM:
> > $DRLVM -showversion TestGetStateJoined
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or
its licensors, as applicable.
> java version "1.5.0" 
> pre-alpha : not complete or compatible
> svn = r512139, (Feb 27 2007), Linux/ia32/gcc 3.3.3, debug build
> http://incubator.apache.org/harmony
> state : TERMINATED
> state : RUNNABLE
> state : TERMINATED
> state : TERMINATED
> state : TERMINATED
> state : RUNNABLE
> state : TERMINATED
> ...
> while on RI it always prints "TERMINATED":
> > $RI -showversion TestGetStateJoined
> java version "1.5.0_08"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
> Java HotSpot(TM) Server VM (build 1.5.0_08-b03, mixed mode)
>  
> state : TERMINATED
> state : TERMINATED
> state : TERMINATED
> ....

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message