Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Possible VaadinSession deadlock when invalidating HTTP session#5558

Closed
vaadin-bot opened this issue Aug 18, 2014 · 5 comments
Closed

Possible VaadinSession deadlock when invalidating HTTP session #5558

vaadin-bot opened this issue Aug 18, 2014 · 5 comments
Labels
Milestone

Comments

@vaadin-bot
Copy link
Collaborator

Originally by @jdahlstrom


VaadinService.lockSession:

protected void lockSession(WrappedSession wrappedSession) { Lock lock = getSessionLock(wrappedSession); lock.lock(); // (1) wrappedSession.getAttribute(getLockAttributeName()); // (2) } 

If between (1) and (2) the servlet container asynchronously initiates session invalidation, the relevant threads may deadlock if/as the container has to internally lock the HttpSession first. Execution path that results in deadlock:

 THREAD 1 THREAD 2 ----------------------------------------------------------------------- VaadinService.lockSession | VaadinSession lock (1) | SUCCESS | +----------- CONTEXT SWITCH -----------+ | v HttpSession invalidate | HttpSession lock | VaadinService.fireSessionDestroy | VaadinSession lock | +--------- CONTEXT SWITCH -----< BLOCKS, T1 OWNS | v wrappedSession getAttribute (2) | HttpSession lock | BLOCKS, T2 OWNS 

Proposed solution: change the accessSynchronously call in fireSessionDestroy to asynchronous access - this would fix the related ticket #12346 as well.


Imported from https://dev.vaadin.com/ issue #14452

@vaadin-bot
Copy link
CollaboratorAuthor

Originally by @alump


Changing accessSynchronously to access resolved deadlock issues seen with WebSphere 8.5 + CA Wily Introscope + Vaadin 7.1.5

@vaadin-bot
Copy link
CollaboratorAuthor

Originally by proaccountapp


Updated prioritization date.

@vaadin-bot
Copy link
CollaboratorAuthor

Originally by CodingFabian


I can report that this is true. it just happened on our production system

Name[AsyncTask-Thread-141]Thread ID[48026] Deadlocked on Lock[java.util.concurrent.locks.ReentrantLock$NonfairSync@57db4518] held by thread [http-apr-8080-exec-57] Thread ID[41079] Thread stack [ sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214) java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290) com.vaadin.server.VaadinSession.lock(VaadinSession.java:989) com.vaadin.server.VaadinSession.accessSynchronously(VaadinSession.java:1345) com.vaadin.server.VaadinService.fireSessionDestroy(VaadinService.java:449) com.vaadin.server.VaadinSession.valueUnbound(VaadinSession.java:323) org.apache.catalina.session.StandardSession.removeAttributeInternal(StandardSession.java:1813) org.apache.catalina.session.StandardSession.expire(StandardSession.java:901) org.apache.catalina.session.StandardSession.expire(StandardSession.java:788) org.apache.catalina.session.StandardSession.invalidate(StandardSession.java:1292) org.apache.catalina.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:176) com.vaadin.server.WrappedHttpSession.invalidate(WrappedHttpSession.java:102) 

@vaadin-bot
Copy link
CollaboratorAuthor

Originally by CodingFabian


review is here: https://dev.vaadin.com/review/#/c/4849/

@vaadin-bot
Copy link
CollaboratorAuthor

Originally by [email protected]


patch review: https://dev.vaadin.com/review/#/c/4849/

@vaadin-botvaadin-bot added this to the Vaadin 7.3.3 milestone Dec 10, 2016
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant
@vaadin-bot