[ 
https://issues.apache.org/jira/browse/TAP5-2799?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ben Weidig reassigned TAP5-2799:
--------------------------------

    Assignee: Ben Weidig

> 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
>            Assignee: Ben Weidig
>            Priority: Major
>
> 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