From 9d8b15f1bf4a045a6eaddaab88384eb4b2c0841d Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 25 Nov 2019 11:58:04 -0500 Subject: [PATCH] Don't panic if surfman initialization fails. --- components/servo/lib.rs | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/components/servo/lib.rs b/components/servo/lib.rs index d201bc2d757..39c84f4e38e 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -510,7 +510,7 @@ where webrender_api_sender, webxr_main_thread.registry(), player_context, - Some(webgl_threads), + webgl_threads, webvr_chan, webvr_constellation_sender, glplayer_threads, @@ -1023,7 +1023,7 @@ fn create_webgl_threads( webxr_main_thread: &mut webxr::MainThreadRegistry, external_image_handlers: &mut WebrenderExternalImageHandlers, external_images: Arc>, -) -> WebGLThreads +) -> Option where W: WindowMethods + 'static + ?Sized, { @@ -1033,18 +1033,33 @@ where #[cfg(not(target_os = "windows"))] let (device, context) = unsafe { if opts::get().headless { - let (device, context) = SWDevice::from_current_context() - .expect("Failed to create software graphics context!"); + let (device, context) = match SWDevice::from_current_context() { + Ok(a) => a, + Err(e) => { + warn!("Failed to create software graphics context: {:?}", e); + return None; + }, + }; (Device::Software(device), Context::Software(context)) } else { - let (device, context) = HWDevice::from_current_context() - .expect("Failed to create hardware graphics context!"); + let (device, context) = match HWDevice::from_current_context() { + Ok(a) => a, + Err(e) => { + warn!("Failed to create hardware graphics context: {:?}", e); + return None; + }, + }; (Device::Hardware(device), Context::Hardware(context)) } }; #[cfg(target_os = "windows")] - let (device, context) = - unsafe { Device::from_current_context().expect("Failed to create graphics context!") }; + let (device, context) = match unsafe { Device::from_current_context() } { + Ok(a) => a, + Err(e) => { + warn!("Failed to create graphics context: {:?}", e); + return None; + }, + }; let gl_type = match window.gl().get_type() { gleam::gl::GlType::Gl => sparkle::gl::GlType::Gl, @@ -1077,5 +1092,5 @@ where webrender.set_output_image_handler(output_handler); } - webgl_threads + Some(webgl_threads) }