| 308 | |
| 309 | struct JavaDebuggableGuard { |
| 310 | JavaDebuggableGuard() { |
| 311 | while (true) { |
| 312 | size_t expected = 0; |
| 313 | if (count.compare_exchange_strong(expected, 1, std::memory_order_acq_rel, |
| 314 | std::memory_order_acquire)) { |
| 315 | Runtime::Current()->SetJavaDebuggable( |
| 316 | Runtime::RuntimeDebugState::kJavaDebuggableAtInit); |
| 317 | count.fetch_add(1, std::memory_order_release); |
| 318 | count.notify_all(); |
| 319 | break; |
| 320 | } |
| 321 | if (expected == 1) { |
| 322 | count.wait(expected, std::memory_order_acquire); |
| 323 | continue; |
| 324 | } |
| 325 | if (count.compare_exchange_strong(expected, expected + 1, std::memory_order_acq_rel, |
| 326 | std::memory_order_relaxed)) { |
| 327 | break; |
| 328 | } |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | ~JavaDebuggableGuard() { |
| 333 | while (true) { |
nothing calls this directly
no test coverage detected