This is an automated email from the ASF dual-hosted git repository.
kfujino pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push:
new d14d690 Fix race condition when saving and recycling session in
PersistentValve.
d14d690 is described below
commit d14d690144aa8250a36ab6aed37f50fdb1b4bddf
Author: KeiichiFujino <[email protected]>
AuthorDate: Tue Sep 15 22:42:27 2020 +0900
Fix race condition when saving and recycling session in PersistentValve.
---
.../apache/catalina/valves/PersistentValve.java | 29 +++++++++++-----------
webapps/docs/changelog.xml | 8 ++++++
2 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/java/org/apache/catalina/valves/PersistentValve.java
b/java/org/apache/catalina/valves/PersistentValve.java
index 7734e26..df94820 100644
--- a/java/org/apache/catalina/valves/PersistentValve.java
+++ b/java/org/apache/catalina/valves/PersistentValve.java
@@ -170,22 +170,21 @@ public class PersistentValve extends ValveBase {
if (manager instanceof StoreManager) {
Session session = manager.findSession(newsessionId);
Store store = ((StoreManager) manager).getStore();
- if (store != null && session != null &&
session.isValid() &&
- !isSessionStale(session,
System.currentTimeMillis())) {
- store.save(session);
- ((StoreManager) manager).removeSuper(session);
- session.recycle();
- } else {
- if (container.getLogger().isDebugEnabled()) {
- container.getLogger().debug("newsessionId
store: " +
- store + " session: " + session +
- " valid: " +
- (session == null ? "N/A" :
Boolean.toString(
- session.isValid())) +
- " stale: " + isSessionStale(session,
- System.currentTimeMillis()));
- }
+ synchronized (session) {
+ if (store != null && session != null &&
session.isValid()
+ && !isSessionStale(session,
System.currentTimeMillis())) {
+ store.save(session);
+ ((StoreManager) manager).removeSuper(session);
+ session.recycle();
+ } else {
+ if (container.getLogger().isDebugEnabled()) {
+ container.getLogger()
+ .debug("newsessionId store: " +
store + " session: " + session + " valid: "
+ + (session == null ? "N/A"
: Boolean.toString(session.isValid()))
+ + " stale: " +
isSessionStale(session, System.currentTimeMillis()));
+ }
+ }
}
} else {
if (container.getLogger().isDebugEnabled()) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index f378ad6..328941f 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -45,6 +45,14 @@
issues do not "pop up" wrt. others).
-->
<section name="Tomcat 8.5.59 (markt)" rtext="in development">
+ <subsection name="Catalina">
+ <changelog>
+ <fix>
+ Fix race condition when saving and recycling session in
+ <code>PersistentValve</code>. (kfujino)
+ </fix>
+ </changelog>
+ </subsection>
<subsection name="Coyote">
<changelog>
<fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]