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)