Mercurial > hg > release > icedtea-web-1.8
changeset 1512:15ec93640c20
Rust launchers now spawn jvm
* rust-launcher/src/jvm_from_properties_resolver.rs: implemented new trait method (spawn_java_process). Stub only. Will panic
* rust-launcher/src/main.rs: java from found java_dir is launched. Process is awaited, its return returned.
* rust-launcher/src/os_access.rs: trait method of (spawn_java_process) add and implemented for linux.
author | Jiri Vanek <jvanek@redhat.com> |
---|---|
date | Wed, 10 Oct 2018 14:29:03 +0200 |
parents | 88f126034b7b |
children | 9cd716e9fed0 |
files | ChangeLog rust-launcher/src/jvm_from_properties_resolver.rs rust-launcher/src/main.rs rust-launcher/src/os_access.rs |
diffstat | 4 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Oct 02 18:32:02 2018 +0200 +++ b/ChangeLog Wed Oct 10 14:29:03 2018 +0200 @@ -1,3 +1,10 @@ +2018-10-10 Jiri Vanek <jvanek@redhat.com> + + Rust launchers now spawn jvm + * rust-launcher/src/jvm_from_properties_resolver.rs: implemented new trait method (spawn_java_process). Stub only. Will panic + * rust-launcher/src/main.rs: java from found java_dir is launched. Process is awaited, its return returned. + * rust-launcher/src/os_access.rs: trait method of (spawn_java_process) add and implemented for linux. + 2018-10-01 Jiri Vanek <jvanek@redhat.com> * rust-launcher/src/main.rs: new method of (is_debug_on) based on cmd line determining verbosity. (main) return of is_debug_on used for os_access::Linux::new call.
--- a/rust-launcher/src/jvm_from_properties_resolver.rs Tue Oct 02 18:32:02 2018 +0200 +++ b/rust-launcher/src/jvm_from_properties_resolver.rs Wed Oct 10 14:29:03 2018 +0200 @@ -94,6 +94,10 @@ fn get_registry_jdk(&self) -> Option<std::path::PathBuf> { None } + + fn spawn_java_process(&self, jre_dir: &std::path::PathBuf, args: &Vec<String>) -> std::process::Child { + panic!("not implemented"); + } } #[test]
--- a/rust-launcher/src/main.rs Tue Oct 02 18:32:02 2018 +0200 +++ b/rust-launcher/src/main.rs Wed Oct 10 14:29:03 2018 +0200 @@ -65,4 +65,10 @@ write!(&mut info2, "{}", "selected jre: ").expect("unwrap failed"); write!(&mut info2, "{}", java_dir.display()).expect("unwrap failed"); os.info(&info2); + let mut child = os.spawn_java_process(&java_dir, &(env::args().skip(1).collect())); + let ecode = child.wait().expect("failed to wait on child"); + let code = ecode.code().expect("code should be always here"); + std::process::exit(code) } + +
--- a/rust-launcher/src/os_access.rs Tue Oct 02 18:32:02 2018 +0200 +++ b/rust-launcher/src/os_access.rs Wed Oct 10 14:29:03 2018 +0200 @@ -5,6 +5,7 @@ fn log(&self, s: &str); fn info(&self, s: &str); fn get_registry_jdk(&self) -> Option<std::path::PathBuf>; + fn spawn_java_process(&self, jre_dir: &std::path::PathBuf, args: &Vec<String>) -> std::process::Child; } pub struct Linux { @@ -31,4 +32,23 @@ fn get_registry_jdk(&self) -> Option<std::path::PathBuf> { None } + + fn spawn_java_process(&self, jre_dir: &std::path::PathBuf, args: &Vec<String>) -> std::process::Child { + let mut bin_java = jre_dir.clone(); + bin_java.push("bin"); + bin_java.push("java"); + let mut cmd = std::process::Command::new(&bin_java); + for ar in args.into_iter() { + cmd.arg(ar); + } + cmd.stdin(std::process::Stdio::inherit()); + cmd.stdout(std::process::Stdio::inherit()); + cmd.stderr(std::process::Stdio::inherit()); + let res = cmd.spawn(); + match res { + Ok(child) => child, + Err(_) => panic!("Error spawning JVM process, \ + java executable: [{}], arguments: [{:?}]", bin_java.into_os_string().to_str().expect("path should unwrap"), args) + } + } }