Return-Path: Delivered-To: apmail-felix-commits-archive@www.apache.org Received: (qmail 88634 invoked from network); 1 Jun 2010 15:44:06 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 1 Jun 2010 15:44:06 -0000 Received: (qmail 99726 invoked by uid 500); 1 Jun 2010 15:44:05 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 99704 invoked by uid 500); 1 Jun 2010 15:44:05 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 99697 invoked by uid 99); 1 Jun 2010 15:44:05 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Jun 2010 15:44:05 +0000 X-ASF-Spam-Status: No, hits=-1846.2 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Jun 2010 15:44:05 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 32AB8238899C; Tue, 1 Jun 2010 15:43:45 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r950123 - /felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java Date: Tue, 01 Jun 2010 15:43:45 -0000 To: commits@felix.apache.org From: dbaum@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100601154345.32AB8238899C@eris.apache.org> Author: dbaum Date: Tue Jun 1 15:43:44 2010 New Revision: 950123 URL: http://svn.apache.org/viewvc?rev=950123&view=rev Log: fixed lock contention in piped writer when reader doesn't read all input (FELIX-2380) Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java?rev=950123&r1=950122&r2=950123&view=diff ============================================================================== --- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java (original) +++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java Tue Jun 1 15:43:44 2010 @@ -23,6 +23,7 @@ import java.io.InputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.io.PrintStream; +import java.lang.reflect.Method; import java.util.List; import org.apache.felix.service.command.Converter; @@ -43,7 +44,7 @@ public class Pipe extends Thread public static Object[] mark() { - Object[] mark = {tIn.get(), tOut.get(), tErr.get() }; + Object[] mark = { tIn.get(), tOut.get(), tErr.get() }; return mark; } @@ -101,7 +102,7 @@ public class Pipe extends Thread tOut.set(out); tErr.set(err); closure.session().threadIO().setStreams(in, out, err); - + try { result = closure.executeStatement(statement); @@ -124,16 +125,23 @@ public class Pipe extends Thread try { - if (in instanceof PipedInputStream) - { - in.close(); - } if (pout != null) { pout.close(); } + + if (in instanceof PipedInputStream) + { + in.close(); + + // avoid writer waiting when reader has given up (FELIX-2380) + Method m = in.getClass().getDeclaredMethod("receivedLast", + (Class[]) null); + m.setAccessible(true); + m.invoke(in, (Object[]) null); + } } - catch (IOException e) + catch (Exception e) { e.printStackTrace(); }