[#5227] Fix race-condition in PooledByteBufAllocatorTest
Motivation: PooledByteBufAllocatorTest.testNumThreadCachesWithNoDirrectArenas() had a race as it just used LockSupport.parkNanos(). We should better use a CountdownLatch and so be sure we really have init everything. Modifications: Replace LockSupport.parkNanos(...) with CountdownLatch usage Result: No more race in test.
This commit is contained in:
parent
66a0f2a68c
commit
c6edc3709e
@ -126,7 +126,7 @@ public class PooledByteBufAllocatorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNumThreadCachesWithNoDirectArenas() {
|
public void testNumThreadCachesWithNoDirectArenas() throws InterruptedException {
|
||||||
int numHeapArenas = 1;
|
int numHeapArenas = 1;
|
||||||
final PooledByteBufAllocator allocator =
|
final PooledByteBufAllocator allocator =
|
||||||
new PooledByteBufAllocator(numHeapArenas, 0, 8192, 1);
|
new PooledByteBufAllocator(numHeapArenas, 0, 8192, 1);
|
||||||
@ -171,17 +171,20 @@ public class PooledByteBufAllocatorTest {
|
|||||||
LockSupport.parkNanos(MILLISECONDS.toNanos(100));
|
LockSupport.parkNanos(MILLISECONDS.toNanos(100));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CountDownLatch createNewThreadCache(final PooledByteBufAllocator allocator) {
|
private static CountDownLatch createNewThreadCache(final PooledByteBufAllocator allocator)
|
||||||
|
throws InterruptedException {
|
||||||
final CountDownLatch latch = new CountDownLatch(1);
|
final CountDownLatch latch = new CountDownLatch(1);
|
||||||
|
final CountDownLatch cacheLatch = new CountDownLatch(1);
|
||||||
Thread t = new FastThreadLocalThread(new Runnable() {
|
Thread t = new FastThreadLocalThread(new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ByteBuf buf = allocator.newHeapBuffer(1024, 1024);
|
ByteBuf buf = allocator.newHeapBuffer(1024, 1024);
|
||||||
for (int i = 0; i < buf.capacity(); i++) {
|
|
||||||
buf.writeByte(0);
|
// Countdown the latch after we allocated a buffer. At this point the cache must exists.
|
||||||
}
|
cacheLatch.countDown();
|
||||||
|
|
||||||
|
buf.writeZero(buf.capacity());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
latch.await();
|
latch.await();
|
||||||
@ -196,8 +199,8 @@ public class PooledByteBufAllocatorTest {
|
|||||||
});
|
});
|
||||||
t.start();
|
t.start();
|
||||||
|
|
||||||
// Wait a bit for the thread & thread cache to be created.
|
// Wait until we allocated a buffer and so be sure the thread was started and the cache exists.
|
||||||
LockSupport.parkNanos(MILLISECONDS.toNanos(100));
|
cacheLatch.await();
|
||||||
|
|
||||||
return latch;
|
return latch;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user