You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Thomas Krieger (JIRA)" <ji...@apache.org> on 2015/09/24 11:27:04 UTC
[jira] [Created] (CXF-6609) Data Race in
org/apache/cxf/transport/http/HTTPConduit.prepare
Thomas Krieger created CXF-6609:
-----------------------------------
Summary: Data Race in org/apache/cxf/transport/http/HTTPConduit.prepare
Key: CXF-6609
URL: https://issues.apache.org/jira/browse/CXF-6609
Project: CXF
Issue Type: Bug
Components: Transports
Affects Versions: 3.1.2
Environment: windows jdk 1.8
Reporter: Thomas Krieger
Priority: Minor
When using the demo.hw.server.HelloWorld client from different threads a data race occurs in org/apache/cxf/transport/http/HTTPConduit.prepare:
if (this.authSupplier == null) {
this.authSupplier = createAuthSupplier(effectiveAuthPolicy.getAuthorizationType());
}
I would suggest to make the field authSupplier volatile.
Here is my Test client:
public class TestCxfClient extends MultiThreadedOneInstanceTemplate {
private static final QName SERVICE_NAME
= new QName("http://server.hw.demo/", "HelloWorld");
private static final QName PORT_NAME
= new QName("http://server.hw.demo/", "HelloWorldPort");
private final HelloWorld hw;
public TestCxfClient(HelloWorld hw) {
super();
this.hw = hw;
}
public void exec()
{
System.out.println(hw.sayHi("World"));
}
public static void main(String[] args) throws Exception {
Service service = Service.create(SERVICE_NAME);
// Endpoint Address
String endpointAddress = "http://localhost:8080/java_first_jaxws/services/hello_world";
// If web service deployed on Tomcat (either standalone or embedded)
// as described in sample README, endpoint should be changed to:
// String endpointAddress = "http://localhost:8080/java_first_jaxws/services/hello_world";
// Add a port to the Service
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloWorld hw = service.getPort(HelloWorld.class);
(new TestCxfClient(hw)).test();
}
}
public abstract class MultiThreadedOneInstanceTemplate implements Runnable {
private final AtomicInteger threadCount = new AtomicInteger();
public void test() throws Exception
{
for(int i = 0; i < 2 ;i++)
{
Thread thread = new Thread(this, "Thread " + i);
this.threadCount.incrementAndGet();
thread.start();
}
while( this.threadCount.get() > 0 )
{
Thread.sleep(1000);
}
Thread.sleep(10 * 1000);
}
public void run()
{
exec();
threadCount.decrementAndGet();
}
protected abstract void exec();
}
Data Race was found by http://vmlens.com
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)