https://issues.apache.org/bugzilla/show_bug.cgi?id=44544
Summary: pseudo-deadlock in Redirector.java caused by over-
aggressive use of synchronized keyword
Product: Ant
Version: 1.7.0
Platform: PC
OS/Version: Windows Server 2003
Status: NEW
Severity: normal
Priority: P2
Component: Core tasks
AssignedTo: [email protected]
ReportedBy: [EMAIL PROTECTED]
I found this by using the <java> task. The symptom is that <java> task std
output can appear hung even.
both handleOutput and handleInput methods (as well as many others) are
synchronized and handleInput can block waiting for some number of bytes to be
read. While this happens, handleOutput and other methods will block.
So if <java> appears to be hung, keep typing at the command line and hitting
return.
I workedaround this by subclassing Java.java in a horribly hackish way as
package com.teneo.esa.ant;
import java.io.InputStream;
import java.io.IOException;
import org.apache.tools.ant.taskdefs.Java;
/**
* @author bloch
*/
public class JavaWithWorkaround extends Java {
private InputStream _s;
/**
* [EMAIL PROTECTED]
*/
protected void setupRedirector() {
super.setupRedirector();
_s = redirector.getInputStream();
}
/**
* [EMAIL PROTECTED]
*/
public int handleInput(byte[] buffer, int offset, int length)
throws IOException {
// Should work whether or not redirector.inputStream == null:
int n = _s.available();
if (n == 0) {
// Throttle
try {
Thread.sleep(1);
} catch (InterruptedException ie) {
// Ignore on purpose
}
return 0;
}
if (length > n) {
length = n;
}
return super.handleInput(buffer, offset, length);
}
}
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.