FELIX-946: Apply Derek Baum patch on gogo
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@787270 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/gogo/src/aQute/threadio/ThreadIOImpl.java b/gogo/src/aQute/threadio/ThreadIOImpl.java
index 314671a..55b5ae3 100644
--- a/gogo/src/aQute/threadio/ThreadIOImpl.java
+++ b/gogo/src/aQute/threadio/ThreadIOImpl.java
@@ -16,14 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
+// DWB20: ThreadIO should check and reset IO if something (e.g. jetty) overrides
package aQute.threadio;
import java.io.*;
+import java.util.logging.Logger;
import org.osgi.service.component.*;
import org.osgi.service.threadio.*;
public class ThreadIOImpl implements ThreadIO {
+ static private final Logger log = Logger.getLogger(ThreadIOImpl.class.getName());
ThreadPrintStream err = new ThreadPrintStream(System.err);
ThreadPrintStream out = new ThreadPrintStream(System.out);
ThreadInputStream in = new ThreadInputStream(System.in);
@@ -51,7 +54,25 @@
System.setErr(err);
}
+ private void checkIO() { // derek
+ if (System.in != in) {
+ log.fine("ThreadIO: eek! who's set System.in=" + System.in);
+ System.setIn(in);
+ }
+
+ if (System.out != out) {
+ log.fine("ThreadIO: eek! who's set System.out=" + System.out);
+ System.setOut(out);
+ }
+
+ if (System.err != err) {
+ log.fine("ThreadIO: eek! who's set System.err=" + System.err);
+ System.setErr(err);
+ }
+ }
+
public void close() {
+ checkIO(); // derek
Marker top = this.current.get();
if ( top == null )
throw new IllegalStateException("No thread io active");
@@ -71,6 +92,7 @@
assert in != null;
assert out != null;
assert err != null;
+ checkIO(); // derek
Marker marker = new Marker(this,in,out,err, current.get());
this.current.set(marker);
marker.activate();