*fix
diff --git a/plugins/org.eclipse.dltk.ruby.launching/src/org/eclipse/dltk/ruby/internal/launching/RubyGenericInstall.java b/plugins/org.eclipse.dltk.ruby.launching/src/org/eclipse/dltk/ruby/internal/launching/RubyGenericInstall.java
index 09b02c6..6c19668 100644
--- a/plugins/org.eclipse.dltk.ruby.launching/src/org/eclipse/dltk/ruby/internal/launching/RubyGenericInstall.java
+++ b/plugins/org.eclipse.dltk.ruby.launching/src/org/eclipse/dltk/ruby/internal/launching/RubyGenericInstall.java
@@ -52,32 +52,49 @@
 					.createInterpreterConfig(exeEnv, builderFile, builderFile
 							.getParent());
 			// config.addInterpreterArg("-KU"); //$NON-NLS-1$
-			Process process = ScriptLaunchUtil.runScriptWithInterpreter(exeEnv,
-					RubyGenericInstall.this.getInstallLocation()
+			final Process process = ScriptLaunchUtil.runScriptWithInterpreter(
+					exeEnv, RubyGenericInstall.this.getInstallLocation()
 							.getAbsolutePath(), config);
 
-			BufferedReader input = null;
-			try {
-				input = new BufferedReader(new InputStreamReader(process
-						.getInputStream()));
+			Thread readerThread = new Thread(new Runnable() {
+				public void run() {
+					BufferedReader input = null;
+					try {
+						input = new BufferedReader(new InputStreamReader(
+								process.getInputStream()));
 
-				String line = null;
-				try {
-					while ((line = input.readLine()) != null) {
-						lines.add(line);
-					}
-				} catch (IOException e) {
-					if( DLTKCore.DEBUG ) {
-						e.printStackTrace();
+						String line = null;
+						try {
+							while ((line = input.readLine()) != null) {
+								lines.add(line);
+							}
+						} catch (IOException e) {
+							if (DLTKCore.DEBUG) {
+								e.printStackTrace();
+							}
+						}
+
+					} finally {
+						if (input != null) {
+							try {
+								input.close();
+							} catch (IOException e) {
+								if (DLTKCore.DEBUG) {
+									e.printStackTrace();
+								}
+							}
+						}
 					}
 				}
-
-				return (String[]) lines.toArray(new String[lines.size()]);
-			} finally {
-				if (input != null) {
-					input.close();
+			});
+			try {
+				readerThread.join(10000);
+			} catch (InterruptedException e) {
+				if (DLTKCore.DEBUG) {
+					e.printStackTrace();
 				}
 			}
+			return (String[]) lines.toArray(new String[lines.size()]);
 		}
 
 		private void parseLines(String[] lines) {