|
25 | 25 |
|
26 | 26 | /* |
27 | 27 | * =========================================================================== |
28 | | - * (c) Copyright IBM Corp. 2021, 2024 All Rights Reserved |
| 28 | + * (c) Copyright IBM Corp. 2021, 2025 All Rights Reserved |
29 | 29 | * =========================================================================== |
30 | 30 | */ |
31 | 31 |
|
@@ -2426,21 +2426,59 @@ public State getState() { |
2426 | 2426 | return threadState(); |
2427 | 2427 | } |
2428 | 2428 |
|
| 2429 | + /** |
| 2430 | + * Returns the translation from a J9VMThread state to a Thread::State. |
| 2431 | + * |
| 2432 | + * @return this thread's state. |
| 2433 | + * |
| 2434 | + * @see State |
| 2435 | + */ |
| 2436 | + private State translateJ9VMThreadStateToThreadState(int status) { |
| 2437 | + switch (status) { |
| 2438 | + case 1: // J9VMTHREAD_STATE_RUNNING |
| 2439 | + return State.RUNNABLE; |
| 2440 | + case 2: // J9VMTHREAD_STATE_BLOCKED |
| 2441 | + return State.BLOCKED; |
| 2442 | + case 4: // J9VMTHREAD_STATE_WAITING |
| 2443 | + case 0x80: // J9VMTHREAD_STATE_PARKED |
| 2444 | + return State.WAITING; |
| 2445 | + case 8: // J9VMTHREAD_STATE_SLEEPING |
| 2446 | + case 64: // J9VMTHREAD_STATE_WAITING_TIMED |
| 2447 | + case 0x100: // J9VMTHREAD_STATE_PARKED_TIMED |
| 2448 | + return State.TIMED_WAITING; |
| 2449 | + case 32: // J9VMTHREAD_STATE_DEAD |
| 2450 | + return State.TERMINATED; |
| 2451 | + default: |
| 2452 | + synchronized (interruptLock) { |
| 2453 | + if (eetop == NO_REF) { |
| 2454 | + return State.TERMINATED; |
| 2455 | + } |
| 2456 | + return State.values()[getStateImpl(eetop)]; |
| 2457 | + } |
| 2458 | + } |
| 2459 | + } |
| 2460 | + |
2429 | 2461 | /** |
2430 | 2462 | * Returns the state of this thread. |
2431 | 2463 | * This method can be used instead of getState as getState is not final and |
2432 | 2464 | * so can be overridden to run arbitrary code. |
2433 | 2465 | */ |
2434 | 2466 | State threadState() { |
2435 | | - synchronized (interruptLock) { |
| 2467 | + if (started) { |
2436 | 2468 | if (eetop == NO_REF) { |
2437 | | - if (isDead()) { |
2438 | | - return State.TERMINATED; |
| 2469 | + return State.TERMINATED; |
| 2470 | + } |
| 2471 | + if (holder == null) { |
| 2472 | + synchronized (interruptLock) { |
| 2473 | + if (eetop == NO_REF) { |
| 2474 | + return State.TERMINATED; |
| 2475 | + } |
| 2476 | + return State.values()[getStateImpl(eetop)]; |
2439 | 2477 | } |
2440 | | - return State.NEW; |
2441 | 2478 | } |
2442 | | - return State.values()[getStateImpl(eetop)]; |
| 2479 | + return translateJ9VMThreadStateToThreadState(holder.threadStatus); |
2443 | 2480 | } |
| 2481 | + return State.NEW; |
2444 | 2482 | } |
2445 | 2483 |
|
2446 | 2484 | /** |
|
0 commit comments