diff options
author | Ray Strode <rstrode@redhat.com> | 2013-12-11 12:53:38 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2013-12-11 13:00:02 -0500 |
commit | 6e7dc7bf622100505ea26f31baca432122d72179 (patch) | |
tree | 183a77d1f664d28d8d6eb43b282839ec3a0e761f | |
parent | 1a0bfabbef58ec00f24f407f2a85ddd436cc3196 (diff) |
device-manager: protect against local console seat getting created more than once
We watch for udev events even after forcing fall back, so we need to
make sure we don't allocate two seats for the local console if we
fallback then get a late event.
-rw-r--r-- | src/libply-splash-core/ply-device-manager.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 1ad1466d..c4993c87 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -47,6 +47,7 @@ struct _ply_device_manager ply_event_loop_t *loop; ply_hashtable_t *terminals; ply_terminal_t *local_console_terminal; + ply_seat_t *local_console_seat; ply_list_t *seats; struct udev *udev_context; struct udev_monitor *udev_monitor; @@ -572,6 +573,16 @@ create_seat_for_terminal_and_renderer_type (ply_device_manager_t *manager, ply_renderer_type_t renderer_type) { ply_seat_t *seat; + bool is_local_terminal = false; + + if (terminal != NULL && manager->local_console_terminal == terminal) + is_local_terminal = true; + + if (is_local_terminal && manager->local_console_seat != NULL) + { + ply_trace ("trying to create seat for local console when one already exists"); + return; + } ply_trace ("creating seat for %s (renderer type: %u) (terminal: %s)", device_path? : "", renderer_type, terminal? ply_terminal_get_name (terminal): "none"); @@ -586,6 +597,9 @@ create_seat_for_terminal_and_renderer_type (ply_device_manager_t *manager, ply_list_append_data (manager->seats, seat); + if (is_local_terminal) + manager->local_console_seat = seat; + if (manager->seat_added_handler != NULL) manager->seat_added_handler (manager->seat_event_handler_data, seat); } |