DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5003>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5003

exec task does not return after executed command finished on Windows only

           Summary: exec task does not return after executed command
                    finished on Windows only
           Product: Ant
           Version: 1.4.1
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: Core tasks
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Exec command stays waiting for output and error streams to be closed even when 
executed command already finished.

This bug prevents Ant from execution of processes, that are not closing out and 
err stream correctly on Windows.

Small example is java class only executing its argument:
    public static void main (String args[]) throws Exception {
        Runtime.getRuntime().exec(args[0]);
        System.out.println("finished");
    }

and build.xml containing something like this:
        <exec executable="java" >
            <arg line=" -cp . test rmid"/>
        </exec>

This task starts rmid using test class, writes "finished" and stays hanged on 
Windows.
The same code on Linux(Solaris) starts rmid, writes "finshed" and realy 
finishes.

Main problem is waiting for error and output stream to be closed in 
org.apache.tools.ant.taskdefs.PumpStreamHandler method stop() code             
inputThread.join(); and errorThread.join();

Output with Full thread dump of blocked exec task is:
Buildfile: build.xml

test:
     [exec] finished
Full thread dump:

"Thread-1" daemon prio=5 tid=0x8b8ad48 nid=0x604 runnable [0x8f2f000..0x8f2fdbc]
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:166)
        at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java:99)
        at java.lang.Thread.run(Thread.java:484)

"Thread-0" daemon prio=5 tid=0x8b3da98 nid=0x57c runnable [0x8eef000..0x8eefdbc]
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:183)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:186)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:225)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:280)
        at java.io.FilterInputStream.read(FilterInputStream.java:93)
        at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java:99)
        at java.lang.Thread.run(Thread.java:484)

"Signal Dispatcher" daemon prio=10 tid=0x960620 nid=0x670 waiting on monitor 
[0..0]

"Finalizer" daemon prio=9 tid=0x95c880 nid=0x4e8 waiting on monitor 
[0x8daf000..0x8dafdbc]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:108)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:123)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:162)

"Reference Handler" daemon prio=10 tid=0x8af0368 nid=0x4fc waiting on monitor 
[0x8d6f000..0x8d6fdbc]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:110)

"main" prio=5 tid=0x284950 nid=0x60c waiting on monitor [0x6f000..0x6fc34]
        at java.lang.Object.wait(Native Method)
        at java.lang.Thread.join(Thread.java:930)
        at java.lang.Thread.join(Thread.java:983)
        at org.apache.tools.ant.taskdefs.PumpStreamHandler.stop
(PumpStreamHandler.java:111)
        at org.apache.tools.ant.taskdefs.LogStreamHandler.stop
(LogStreamHandler.java:85)
        at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:397)
        at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:250)
        at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:279)
        at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:177)
        at org.apache.tools.ant.Task.perform(Task.java:217)
        at org.apache.tools.ant.Target.execute(Target.java:184)
        at org.apache.tools.ant.Target.performTasks(Target.java:202)
        at org.apache.tools.ant.Project.executeTarget(Project.java:601)
        at org.apache.tools.ant.Project.executeTargets(Project.java:560)
        at org.apache.tools.ant.Main.runBuild(Main.java:454)
        at org.apache.tools.ant.Main.start(Main.java:153)
        at org.apache.tools.ant.Main.main(Main.java:176)

"VM Thread" prio=5 tid=0x8b5e1c0 nid=0x3c8 runnable

"VM Periodic Task Thread" prio=10 tid=0x95f320 nid=0x558 waiting on monitor
"Suspend Checker Thread" prio=10 tid=0x95fc70 nid=0x608 runnable

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to