https://bz.apache.org/bugzilla/show_bug.cgi?id=58179
Bug ID: 58179
Summary: Atomicity violation
Product: Tomcat 7
Version: 7.0.63
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: dev@tomcat.apache.org
Reporter: baiguangd...@gmail.com
My name is Bai Guangdong, a research fellow from National University of
Singapore. I find an atomicity violation similar to bug 53498.
The problem occurs in the same file
java/org/apache/catalina/core/ApplicationContext.java. Look at the code snippet
below.
L791 oldValue = attributes.get(name);
L792 if (oldValue != null)
L793 replaced = true;
L794 attributes.put(name, value);
... ...
L801 if (replaced)
L802 event =
L803 new
ServletContextAttributeEvent(context.getServletContext(),
L804 name, oldValue);
L805 else
L806 event =
L807 new
ServletContextAttributeEvent(context.getServletContext(),
L808 name, value);
... ...
L816 if (replaced) {
L817 context.fireContainerEvent
L818 ("beforeContextAttributeReplaced", listener);
L819 listener.attributeReplaced(event);
L820
context.fireContainerEvent("afterContextAttributeReplaced",
L821listener);
L822 } else {
L823
context.fireContainerEvent("beforeContextAttributeAdded",
L824listener);
L825 listener.attributeAdded(event);
L826
context.fireContainerEvent("afterContextAttributeAdded",
L827listener);
Suppose two threads T1 and T2 executes this code snippet with the same key
("name"). Initially, "attributes" is empty. T1 executes line 791 and "oldValue"
in T1 becomes null. Before T1 executes line 794, T2 executes 791 and "oldValue"
in T2 becomes null as well. Then T1 executes line 794, and later T2 replaces
T1's "value" at line 794. Afterwards, both T1 and T2 fire the
"beforeContextAttributeAdded" event at line 823. However, in the above
situation, "replaced" in T2 should be true and "beforeContextAttributeReplaced"
should be fired at line 817.
--
You are receiving this mail because:
You are the assignee for the bug.
-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org