From bf560986f0fe26f45dc8f8cc0f03ed27e09a4f8d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 31 May 2018 13:22:54 -0400 Subject: [PATCH] renderer: nullify device if open fails Since commit e4f86e3c we query the renderer device straight from the renderer plugin. Unfortunately, we continue to use that device name even after the renderer fails to open and the plugin gets unloaded. This commit changes the code to go back to using the original device name in that scenario. --- src/libply-splash-core/ply-renderer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c index b9059ef3..dcc19b6e 100644 --- a/src/libply-splash-core/ply-renderer.c +++ b/src/libply-splash-core/ply-renderer.c @@ -51,6 +51,7 @@ struct _ply_renderer ply_renderer_type_t type; char *device_name; + char *plugin_device_name; ply_terminal_t *terminal; uint32_t input_source_is_open : 1; @@ -100,6 +101,9 @@ ply_renderer_free (ply_renderer_t *renderer) const char * ply_renderer_get_device_name (ply_renderer_t *renderer) { + if (renderer->plugin_device_name != NULL) + return renderer->plugin_device_name; + return renderer->device_name; } @@ -156,8 +160,8 @@ ply_renderer_load_plugin (ply_renderer_t *renderer, } if (renderer->plugin_interface->get_device_name != NULL) { - free (renderer->device_name); - renderer->device_name = strdup (renderer->plugin_interface->get_device_name (renderer->backend)); + free (renderer->plugin_device_name); + renderer->plugin_device_name = strdup (renderer->plugin_interface->get_device_name (renderer->backend)); } return true; @@ -170,6 +174,9 @@ ply_renderer_unload_plugin (ply_renderer_t *renderer) assert (renderer->plugin_interface != NULL); assert (renderer->module_handle != NULL); + free (renderer->plugin_device_name); + renderer->plugin_device_name = NULL; + ply_close_module (renderer->module_handle); renderer->plugin_interface = NULL; renderer->module_handle = NULL;