From: <es...@us...> - 2008-09-25 04:58:51
|
Revision: 351 http://columba.svn.sourceforge.net/columba/?rev=351&view=rev Author: eschman Date: 2008-09-25 04:58:40 +0000 (Thu, 25 Sep 2008) Log Message: ----------- [bug]use a thread for reading data, otherwise write operations from gpg may block and prevent it from finishing Modified Paths: -------------- jscf/trunk/src/java/org/waffel/jscf/gpg/GPGStatement.java jscf/trunk/src/test/org/waffel/jscf/gpg/GPGEncryptTest.java jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementFailTest.java jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementTest.java Modified: jscf/trunk/src/java/org/waffel/jscf/gpg/GPGStatement.java =================================================================== --- jscf/trunk/src/java/org/waffel/jscf/gpg/GPGStatement.java 2008-09-25 04:56:16 UTC (rev 350) +++ jscf/trunk/src/java/org/waffel/jscf/gpg/GPGStatement.java 2008-09-25 04:58:40 UTC (rev 351) @@ -200,17 +200,28 @@ String[] obj = new String[0]; // starting process Process p = this.executeCommand(cmdList.toArray(obj)); + + StreamGlobber errStream = new StreamGlobber(p.getErrorStream()); + StreamGlobber resStream = new StreamGlobber(p.getInputStream()); + + errStream.start(); + resStream.start(); + // write the pgpMessage out StreamUtils.streamCopy(message, p.getOutputStream()); p.getOutputStream().close(); + errStream.join(); + resStream.join(); resultSet.setReturnValue(p.waitFor()); - String error = StreamUtils.readInString(p.getErrorStream()) - .toString(); - resultSet - .setErrorStream(new ByteArrayInputStream(error.getBytes())); - resultSet - .setResultStream(new ByteArrayInputStream(error.getBytes())); + + String error = StreamUtils.readInString(errStream.getRetStream()).toString(); + resultSet.setErrorStream(new ByteArrayInputStream(error.getBytes())); + resultSet.setResultStream(new ByteArrayInputStream(error.getBytes())); + + p.getInputStream().close(); + p.getErrorStream().close(); + p.destroy(); fout.close(); tempFile.delete(); Modified: jscf/trunk/src/test/org/waffel/jscf/gpg/GPGEncryptTest.java =================================================================== --- jscf/trunk/src/test/org/waffel/jscf/gpg/GPGEncryptTest.java 2008-09-25 04:56:16 UTC (rev 350) +++ jscf/trunk/src/test/org/waffel/jscf/gpg/GPGEncryptTest.java 2008-09-25 04:58:40 UTC (rev 351) @@ -1,10 +1,6 @@ package org.waffel.jscf.gpg; -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.FileInputStream; -import java.io.InputStream; import java.util.Properties; import org.waffel.jscf.JSCFConnection; Modified: jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementFailTest.java =================================================================== --- jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementFailTest.java 2008-09-25 04:56:16 UTC (rev 350) +++ jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementFailTest.java 2008-09-25 04:58:40 UTC (rev 351) @@ -18,14 +18,11 @@ */ package org.waffel.jscf.gpg; -import java.io.ByteArrayInputStream; - import junit.framework.TestCase; import org.waffel.jscf.JSCFConnection; import org.waffel.jscf.JSCFDriverManager; import org.waffel.jscf.JSCFResultSet; -import org.waffel.jscf.JSCFStatement; /** * This class should test for failings. @@ -43,7 +40,6 @@ public void testProgramNotFound() throws Exception { try { JSCFConnection pgpCon = null; - JSCFResultSet res = null; JSCFDriverManager.registerJSCFDriver(new GPGDriver()); pgpCon = JSCFDriverManager.getConnection("jscf:gpg::/fail/gpg", "testid", "test"); Modified: jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementTest.java =================================================================== --- jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementTest.java 2008-09-25 04:56:16 UTC (rev 350) +++ jscf/trunk/src/test/org/waffel/jscf/gpg/GPGStatementTest.java 2008-09-25 04:58:40 UTC (rev 351) @@ -310,7 +310,6 @@ */ public void testCheckPassphrase() throws Exception { JSCFConnection pgpCon = null; - JSCFResultSet res = null; pgpCon = JSCFDriverManager .getConnection("jscf:gpg::/usr/bin/gpg:testid:test"); JSCFStatement stmt = pgpCon.createStatement(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |