private static bool AwaitParked(ThreadRepository.ThreadInfo thread, long timeout, TimeUnit unit) { bool parked = false; for (long end = DateTimeHelper.CurrentUnixTimeMillis() + unit.toMillis(timeout); DateTimeHelper.CurrentUnixTimeMillis() < end;) { StackTraceElement frame = thread.StackTrace[0]; if ("park".Equals(frame.MethodName) && frame.ClassName.EndsWith("Unsafe")) { if (thread.State.name().EndsWith("WAITING")) { parked = true; break; } } } return(parked); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldBlockOnLockedLock() throws Exception //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldBlockOnLockedLock() { // given LockService locks = new ReentrantLockService(); LockNode lockSameNode = new LockNode(locks, 17); ThreadRepository.Events events = Threads.events(); ThreadRepository.Signal ready = Threads.signal(); // when using (Lock ignored = locks.AcquireNodeLock(17, LockService_LockType.WriteLock)) { ThreadRepository.ThreadInfo thread = Threads.execute(ready, lockSameNode, events.Trigger("locked"), lockSameNode.release); ready.AwaitNow(); // then assertTrue(AwaitParked(thread, 5, TimeUnit.SECONDS)); assertTrue(events.Snapshot().Count == 0); } events.AssertInOrder("locked"); }