GitHub user jaikiran opened a pull request:

    https://github.com/apache/ant-antlibs-antunit/pull/1

    Avoid potential thread safety issues in LogCapturer

    This commit is prompted by the exception I saw in one of the Ant Jenkins 
jobs which failed with:
    
    ```
    
/home/jenkins/jenkins-slave/workspace/Ant-Build-Matrix-master-Linux/OS/xenial/jdk/JDK
 1.8 (latest)/src/tests/antunit/taskdefs/exec/exec-test.xml:528: 
java.lang.NullPointerException
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:109)
        at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:155)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        at org.apache.tools.ant.Task.perform(Task.java:350)
        at java.util.Vector.forEach(Vector.java:1275)
        at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:67)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        at org.apache.tools.ant.Task.perform(Task.java:350)
        at 
org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:393)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        at org.apache.tools.ant.Task.perform(Task.java:350)
        at org.apache.tools.ant.Target.execute(Target.java:449)
        at org.apache.tools.ant.Target.performTasks(Target.java:470)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1392)
        at 
org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:36)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1253)
        at 
org.apache.ant.antunit.AntUnitScriptRunner.runTarget(AntUnitScriptRunner.java:224)
        at 
org.apache.ant.antunit.AntUnitScriptRunner.runSuite(AntUnitScriptRunner.java:303)
        at org.apache.ant.antunit.AntUnit.doFile(AntUnit.java:268)
        at org.apache.ant.antunit.AntUnit.doResourceCollection(AntUnit.java:247)
        at org.apache.ant.antunit.AntUnit.execute(AntUnit.java:218)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        at org.apache.tools.ant.Task.perform(Task.java:350)
        at org.apache.tools.ant.Target.execute(Target.java:449)
        at org.apache.tools.ant.Target.performTasks(Target.java:470)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1392)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1363)
        at 
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1253)
        at org.apache.tools.ant.Main.runBuild(Main.java:845)
        at org.apache.tools.ant.Main.startAnt(Main.java:228)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
    Caused by: java.lang.NullPointerException
        at java.util.LinkedList$ListItr.next(LinkedList.java:893)
        at org.apache.ant.antunit.LogCapturer.getLog(LogCapturer.java:178)
        at org.apache.ant.antunit.LogCapturer.getInfoLog(LogCapturer.java:114)
        at org.apache.ant.antunit.LogContains.eval(LogContains.java:81)
        at org.apache.ant.antunit.AssertTask.execute(AssertTask.java:71)
        at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        ... 48 more
    ```
    That specific race condition itself is somewhat handled by a previous 
commit in this project here 
https://github.com/apache/ant-antlibs-antunit/commit/7d62d95ab3a3df61937d2f66ad07fa75ed61aa75.
 But the `events` List is still susceptible to race conditions, hence this new 
commit.
    


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/jaikiran/ant-antlibs-antunit master

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/ant-antlibs-antunit/pull/1.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1
    
----
commit 2014f42d7e9c9b352ee381a67e89ec0d35b98acb
Author: Jaikiran Pai <jaikiran.pai@...>
Date:   2018-05-14T05:43:26Z

    Avoid potential thread safety issues in LogCapturer

----


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to