[
https://issues.apache.org/jira/browse/TAP5-277?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12639444#action_12639444
]
Howard M. Lewis Ship commented on TAP5-277:
-------------------------------------------
I've been trying to pursue this; my development JDK doesn't seem to have an
issue.
Here's some code, adapted from a JDK bug report, to see if things are working
correctly:
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Test ReentrantReadWrite Lock. This code shows how we cannot regain a read
lock if a write lock times out.
* Adapted from http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6571733.
*/
public class ValidateReentrantReadWriteLockBugFixed implements Runnable
{
private static final int THREAD_COUNT = 10;
final static ReadWriteLock lock = new ReentrantReadWriteLock(false);
final static Runnable blocker = new Runnable()
{
public void run()
{
log("Acquire Read (blocker)");
lock.readLock().lock();
sleep(20);
log("Release Read (blocker)");
lock.readLock().unlock();
}
};
public void run()
{
log("Acquire Read (initial)");
lock.readLock().lock();
log("Release Read (for upgrade)");
lock.readLock().unlock();
log("Try For Write");
try
{
boolean gotWrite = lock.writeLock().tryLock(20,
TimeUnit.MILLISECONDS);
if (gotWrite)
{
log("Got Write");
sleep(5);
log("Unlocking write");
lock.writeLock().unlock();
}
else
{
log("**** Write timed out");
}
}
catch (InterruptedException e)
{
log("Interrupted");
}
log("Re-Obtain Read (after write lock released)");
lock.readLock().lock();
log("Release Read");
lock.readLock().unlock();
log("EXIT Try");
}
static void sleep(int millis)
{
try
{
Thread.sleep(millis);
}
catch (InterruptedException ex)
{ // Ignore.
}
}
static void log(String s)
{
System.out.printf("%s: %s%n", Thread.currentThread().getName(), s);
}
public static void main(String[] args)
{
for (int i = 0; i < THREAD_COUNT; i++)
{
new Thread(blocker, "Blocker" + i).start();
new Thread(new ValidateReentrantReadWriteLockBugFixed(), "TryWrite"
+ i).start();
}
}
}
On my machine, this code executes and completes normally, with a mix of
successful locks and lock timeouts.
Please compile and execute this code in your target environment.
> Request threads hang at ConcurrentBarrier.withRead() on multi-processor
> machine
> -------------------------------------------------------------------------------
>
> Key: TAP5-277
> URL: https://issues.apache.org/jira/browse/TAP5-277
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-ioc
> Affects Versions: 5.0.15
> Reporter: Wendell Ruotsi
>
> At some point, my pages stop responding - before the request even gets logged
> - looking through the threads, I see them hung (3 of them here). On a single
> processor machine, I haven't seen this. This happens with both Tomcat and
> Jetty.
> Name: http-80-1
> State: WAITING on [EMAIL PROTECTED]
> Total blocked: 0 Total waited: 10
> Stack trace:
> sun.misc.Unsafe.park(Native Method)
> java.util.concurrent.locks.LockSupport.park(Unknown Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown
> Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(Unknown
> Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(Unknown
> Source)
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(Unknown
> Source)
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:73)
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
> $RequestHandler_11cf8146628.service($RequestHandler_11cf8146628.java)
> $RequestHandler_11cf814661f.service($RequestHandler_11cf814661f.java)
> org.apache.tapestry5.services.TapestryModule$16.service(TapestryModule.java:1005)
> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
> $HttpServletRequestHandler_11cf8146620.service($HttpServletRequestHandler_11cf8146620.java)
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> $HttpServletRequestFilter_11cf814661d.service($HttpServletRequestFilter_11cf814661d.java)
> $HttpServletRequestHandler_11cf8146620.service($HttpServletRequestHandler_11cf8146620.java)
> $HttpServletRequestHandler_11cf814661c.service($HttpServletRequestHandler_11cf814661c.java)
> org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:179)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> java.lang.Thread.run(Unknown Source)
> Name: http-80-2
> State: WAITING on [EMAIL PROTECTED]
> Total blocked: 1 Total waited: 16
> Stack trace:
> sun.misc.Unsafe.park(Native Method)
> java.util.concurrent.locks.LockSupport.park(Unknown Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown
> Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(Unknown
> Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(Unknown
> Source)
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(Unknown
> Source)
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.restoreReadLock(ConcurrentBarrier.java:173)
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.tryWithWrite(ConcurrentBarrier.java:243)
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:87)
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83)
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
> $RequestHandler_11cf8146628.service($RequestHandler_11cf8146628.java)
> $RequestHandler_11cf814661f.service($RequestHandler_11cf814661f.java)
> org.apache.tapestry5.services.TapestryModule$16.service(TapestryModule.java:1005)
> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
> $HttpServletRequestHandler_11cf8146620.service($HttpServletRequestHandler_11cf8146620.java)
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> $HttpServletRequestFilter_11cf814661d.service($HttpServletRequestFilter_11cf814661d.java)
> $HttpServletRequestHandler_11cf8146620.service($HttpServletRequestHandler_11cf8146620.java)
> $HttpServletRequestHandler_11cf814661c.service($HttpServletRequestHandler_11cf814661c.java)
> org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:179)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> java.lang.Thread.run(Unknown Source)
> Name: http-80-3
> State: WAITING on [EMAIL PROTECTED]
> Total blocked: 0 Total waited: 1
> Stack trace:
> sun.misc.Unsafe.park(Native Method)
> java.util.concurrent.locks.LockSupport.park(Unknown Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown
> Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(Unknown
> Source)
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(Unknown
> Source)
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(Unknown
> Source)
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:73)
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
> $RequestHandler_11cf8146628.service($RequestHandler_11cf8146628.java)
> $RequestHandler_11cf814661f.service($RequestHandler_11cf814661f.java)
> org.apache.tapestry5.services.TapestryModule$16.service(TapestryModule.java:1005)
> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
> $HttpServletRequestHandler_11cf8146620.service($HttpServletRequestHandler_11cf8146620.java)
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> $HttpServletRequestFilter_11cf814661d.service($HttpServletRequestFilter_11cf814661d.java)
> $HttpServletRequestHandler_11cf8146620.service($HttpServletRequestHandler_11cf8146620.java)
> $HttpServletRequestHandler_11cf814661c.service($HttpServletRequestHandler_11cf814661c.java)
> org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:179)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> java.lang.Thread.run(Unknown Source)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]