Alex Craddock created TAP5-2799:
-----------------------------------

             Summary: Thread Lockup when trying to read from a Session Object
                 Key: TAP5-2799
                 URL: https://issues.apache.org/jira/browse/TAP5-2799
             Project: Tapestry 5
          Issue Type: Bug
          Components: tapestry-http
    Affects Versions: 5.8.7
            Reporter: Alex Craddock


I am not 100% sure how to recreate this but one of our servers froze up on the 
443 port, when I looked into it and checked a thread dump I noticed 24 threads 
all in this stack.

 

 
{code:java}
"http-nio-443-exec-25" #95 daemon prio=5 os_prio=0 cpu=6249001.07ms 
elapsed=138173.76s tid=0x00007fd974035800 nid=0x6288f waiting on condition  
[0x00007fd929edb000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@11.0.25/Native Method)
        - parking to wait for  <0x000000047a350910> (a 
java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
        at 
java.util.concurrent.locks.LockSupport.park(java.base@11.0.25/LockSupport.java:194)
        at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(java.base@11.0.25/AbstractQueuedSynchronizer.java:885)
        at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(java.base@11.0.25/AbstractQueuedSynchronizer.java:917)
        at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@11.0.25/AbstractQueuedSynchronizer.java:1240)
        at 
java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(java.base@11.0.25/ReentrantReadWriteLock.java:959)
        at 
org.apache.tapestry5.http.internal.services.TapestrySessionFactoryImpl$SessionLockImpl.acquireWriteLock(TapestrySessionFactoryImpl.java:110)
        at 
org.apache.tapestry5.http.internal.services.SessionImpl.getAttribute(SessionImpl.java:50)
        at 
org.apache.tapestry5.http.internal.services.ClusteredSessionImpl.getAttribute(ClusteredSessionImpl.java:56)
 {code}
 

 

Which seemed a bit odd to me. When I looked into the code for 
"org.apache.tapestry5.http.internal.services.SessionImpl" I noticed this

 
{code:java}
public Object getAttribute(String name) {
    this.lock.acquireWriteLock();
    return this.session.getAttribute(name);
}

public List<String> getAttributeNames() {
    this.lock.acquireReadLock();
    return InternalUtils.toList(this.session.getAttributeNames());
}

public void setAttribute(String name, Object value) {
    this.lock.acquireWriteLock();
    this.session.setAttribute(name, value);
} {code}
I am not sure why, but I think it's a bug that when you are calling 
getAttribute, that it should only apply a read lock rather than a write lock. 
Not sure if this will solve my issue but I think this should be looked into.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to