ThreadPoolExecutor keepAliveTime != 0 || allowCoreThreadTimeOut (2)
Pavel Rappo
pavel.rappo at oracle.com
Tue May 6 09:42:48 UTC 2014
The previous email I sent appeared to have no patch attached to it. I will add it inlined this time. Sorry for that.
Thanks
-Pavel
diff -r b7cb13e9f459 tests-custom/src/main/java/org/openjdk/jcstress/tests/executors/ThreadPoolExecutorKeepAliveTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/executors/ThreadPoolExecutorKeepAliveTest.java Tue May 06 10:24:30 2014 +0100
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.jcstress.tests.executors;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.infra.results.LongResult2;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+ at JCStressTest
+ at State
+public class ThreadPoolExecutorKeepAliveTest {
+
+ public final ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 2, 1L,
+ TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(2));
+
+ @Actor
+ public void actor1() {
+ try {
+ pool.allowCoreThreadTimeOut(true);
+ } catch (IllegalArgumentException ignored) {}
+ }
+
+ @Actor
+ public void actor2() {
+ try {
+ pool.setKeepAliveTime(0, TimeUnit.MILLISECONDS);
+ } catch (IllegalArgumentException ignored) {}
+ }
+
+ @Arbiter
+ public void actor3(LongResult2 r) {
+ r.r1 = pool.allowsCoreThreadTimeOut() ? 1 : 0;
+ r.r2 = pool.getKeepAliveTime(TimeUnit.MILLISECONDS);
+ }
+}
diff -r b7cb13e9f459 tests-custom/src/main/resources/org/openjdk/jcstress/desc/executors.xml
--- a/tests-custom/src/main/resources/org/openjdk/jcstress/desc/executors.xml Mon May 05 23:05:17 2014 +0400
+++ b/tests-custom/src/main/resources/org/openjdk/jcstress/desc/executors.xml Tue May 06 10:24:30 2014 +0100
@@ -1,6 +1,6 @@
<!--
- Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@@ -54,5 +54,40 @@
</unmatched>
</test>
+ <test name="org.openjdk.jcstress.tests.executors.ThreadPoolExecutorKeepAliveTest">
+ <contributed-by>Pavel Rappo (pavel.rappo at oracle.com)</contributed-by>
+ <description>
+ Tests if ThreadPoolExecutor invariant can be violated:
+ keepAliveTime == 0 ⇒ !allowCoreThreadTimeOut
+ </description>
+ <case>
+ <match>[1, 1]</match>
+ <expect>ACCEPTABLE</expect>
+ <description>
+ allowCoreThreadTimeOut had changed, and keepAliveTime failed to change.
+ </description>
+ </case>
+ <case>
+ <match>[0, 0]</match>
+ <expect>ACCEPTABLE</expect>
+ <description>
+ keepAliveTime had changed, and allowCoreThreadTimeOut failed to change.
+ </description>
+ </case>
+ <case>
+ <match>[1, 0]</match>
+ <expect>ACCEPTABLE_INTERESTING</expect>
+ <description>
+ The update under race can break the
+ (keepAliveTime == 0 ⇒ !allowCoreThreadTimeOut) invariant.
+ </description>
+ </case>
+ <unmatched>
+ <expect>FORBIDDEN</expect>
+ <description>
+ This case is not expected.
+ </description>
+ </unmatched>
+ </test>
-</testsuite>
\ No newline at end of file
+</testsuite>
More information about the jcstress-dev
mailing list