Threads (input thread or threads started by libraries such as pango) can (indirectly) call getenv during set_gnome_env
I just had gnome-shell crash on startup because of what looks like an attempt by the input thread to call getenv
while the main thread is in set_gnome_env
, which called setenv
just before the crash, which is not thread-safe. We should probably delay starting the input thread until we are done setting environment variables, because we can't guarantee that there isn't a library used directly or indirectly that could be using getenv
at some point.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 __GI_getenv (name=0x7fcdda0e7588 "STEMD_DEVICE_VERIFY_SYSFS") at getenv.c:84
84 if (name_start == ep_start && !strncmp (*ep + 2, name, len)
Thread 1 (Thread 0x7fcd9d7fa6c0 (LWP 1044857)):
#0 __GI_getenv (name=0x7fcdda0e7588 "STEMD_DEVICE_VERIFY_SYSFS") at getenv.c:84
#1 0x00007fcdda0d114a in device_set_syspath () at /lib64/libudev.so.1
#2 0x00007fcdda0d18ea in sd_device_new_from_syspath () at /lib64/libudev.so.1
#3 0x00007fcdda0d631e in enumerator_scan_dir_and_add_devices () at /lib64/libudev.so.1
#4 0x00007fcdda0d674f in enumerator_scan_dir () at /lib64/libudev.so.1
#5 0x00007fcdda0d7365 in udev_enumerate_scan_devices () at /lib64/libudev.so.1
#6 0x00007fcddae97b6b in g_udev_client_query_by_subsystem () at /lib64/libgudev-1.0.so.0
#7 0x00007fcddaebbb7b in libwacom_new_from_path () at /lib64/libwacom.so.9
#8 0x00007fcddc08c9e7 in meta_input_device_constructed () at /lib64/libmutter-11.so.0
#9 0x00007fcddd516d18 in g_object_new_internal () at /lib64/libgobject-2.0.so.0
#10 0x00007fcddd518973 in g_object_new_valist () at /lib64/libgobject-2.0.so.0
#11 0x00007fcddd518fcd in g_object_new () at /lib64/libgobject-2.0.so.0
#12 0x00007fcddc19689a in process_events () at /lib64/libmutter-11.so.0
#13 0x00007fcddc197dca in meta_event_dispatch () at /lib64/libmutter-11.so.0
#14 0x00007fcddcf39c3f in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#15 0x00007fcddcf8f3c8 in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
#16 0x00007fcddcf3920f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#17 0x00007fcddc190600 in input_thread () at /lib64/libmutter-11.so.0
#18 0x00007fcddcf63772 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#19 0x00007fcddbeaef9d in start_thread (arg=<optimized out>) at pthread_create.c:442
#20 0x00007fcddbf305d0 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
Thread 5 (Thread 0x7fcdd857a5c0 (LWP 1044829)):
#0 0x00007fcddbf22d2f in __GI___poll (fds=0x55a7b799b610, nfds=1, timeout=25000) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007fcddcf8f33d in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
#2 0x00007fcddcf3920f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3 0x00007fcddd128e7f in g_dbus_connection_send_message_with_reply_sync () at /lib64/libgio-2.0.so.0
#4 0x00007fcddd136c1f in g_dbus_connection_call_sync_internal () at /lib64/libgio-2.0.so.0
#5 0x00007fcddd136e87 in g_dbus_connection_call_sync () at /lib64/libgio-2.0.so.0
#6 0x00007fcddc14b377 in set_gnome_env.lto_priv () at /lib64/libmutter-11.so.0
#7 0x00007fcddc0d5c55 in meta_context_start () at /lib64/libmutter-11.so.0
#8 0x000055a7b59bfdf5 in main ()