Skip to content

Commit 3f3fee0

Browse files
author
KeiichiFujino
committed
Fix race condition when saving and recycling session in PersistentValve.
1 parent d381d87 commit 3f3fee0

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

java/org/apache/catalina/valves/PersistentValve.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -170,22 +170,20 @@ public void invoke(Request request, Response response)
170170
if (manager instanceof StoreManager) {
171171
Session session = manager.findSession(newsessionId);
172172
Store store = ((StoreManager) manager).getStore();
173-
if (store != null && session != null && session.isValid() &&
174-
!isSessionStale(session, System.currentTimeMillis())) {
175-
store.save(session);
176-
((StoreManager) manager).removeSuper(session);
177-
session.recycle();
178-
} else {
179-
if (container.getLogger().isDebugEnabled()) {
180-
container.getLogger().debug("newsessionId store: " +
181-
store + " session: " + session +
182-
" valid: " +
183-
(session == null ? "N/A" : Boolean.toString(
184-
session.isValid())) +
185-
" stale: " + isSessionStale(session,
186-
System.currentTimeMillis()));
173+
synchronized (session) {
174+
if (store != null && session != null && session.isValid()
175+
&& !isSessionStale(session, System.currentTimeMillis())) {
176+
store.save(session);
177+
((StoreManager) manager).removeSuper(session);
178+
session.recycle();
179+
} else {
180+
if (container.getLogger().isDebugEnabled()) {
181+
container.getLogger()
182+
.debug("newsessionId store: " + store + " session: " + session + " valid: "
183+
+ (session == null ? "N/A" : Boolean.toString(session.isValid()))
184+
+ " stale: " + isSessionStale(session, System.currentTimeMillis()));
185+
}
187186
}
188-
189187
}
190188
} else {
191189
if (container.getLogger().isDebugEnabled()) {

webapps/docs/changelog.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
The health check valve will now check the state of its associated
5252
containers to report availability. (remm)
5353
</update>
54+
<fix>
55+
Fix race condition when saving and recycling session in
56+
<code>PersistentValve</code>. (kfujino)
57+
</fix>
5458
</changelog>
5559
</subsection>
5660
<subsection name="Coyote">

0 commit comments

Comments
 (0)