Bug 250311

Summary: devel/glib20: lock getfsent() usage to fix x11-fm/thunar crashes
Product: Ports & Packages Reporter: sigsys
Component: Individual Port(s)Assignee: Dima Panov <fluffy>
Status: Closed FIXED    
Severity: Affects Many People CC: bar, bugsfreebsd, desktop, fernape, fluffy, rozhuk.im, tijl, xfce
Priority: --- Keywords: needs-qa
Version: LatestFlags: fernape: maintainer-feedback? (desktop)
Hardware: Any   
OS: Any   
See Also: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=250794
Attachments:
Description Flags
add lock and cache none

Description sigsys 2020-10-13 04:26:45 UTC
I had thunar crashing from time to time (especially in large directories) due to concurrent use of getfsent() (which is not thread-safe).

(gdb) bt
#0  _flockfile (fp=0x0) at /usr/src/lib/libc/stdio/_flock_stub.c:68
#1  0x000000080bf59deb in fgets (buf=0x80bf8ff90 "\n", n=1024, fp=0x0) at /usr/src/lib/libc/stdio/fgets.c:61
#2  0x000000080be7a1b4 in fstabscan () at /usr/src/lib/libc/gen/fstab.c:121
#3  0x000000080be7a03c in getfsent () at /usr/src/lib/libc/gen/fstab.c:227
#4  0x000000080a181c28 in g_unix_mount_points_get () at /usr/local/lib/libgio-2.0.so.0
#5  0x000000080a181da9 in g_unix_mount_point_at () at /usr/local/lib/libgio-2.0.so.0
#6  0x000000080a1e0811 in  () at /usr/local/lib/libgio-2.0.so.0
#7  0x000000080a1e0624 in  () at /usr/local/lib/libgio-2.0.so.0
#8  0x000000080a1e4235 in  () at /usr/local/lib/libgio-2.0.so.0
#9  0x000000080a1e3d4e in  () at /usr/local/lib/libgio-2.0.so.0
#10 0x000000080a116a88 in g_file_enumerator_next_file () at /usr/local/lib/libgio-2.0.so.0
#11 0x000000000027ca39 in  ()
#12 0x000000000027c1ed in  ()
#13 0x00000000002a54ee in  ()
#14 0x0000000801f97b86 in  () at /usr/local/lib/libexo-2.so.0
#15 0x000000080a12bd9e in  () at /usr/local/lib/libgio-2.0.so.0
#16 0x000000080a15fc45 in  () at /usr/local/lib/libgio-2.0.so.0
#17 0x000000080ae6b483 in  () at /usr/local/lib/libglib-2.0.so.0
#18 0x000000080ae6a272 in  () at /usr/local/lib/libglib-2.0.so.0
#19 0x0000000806d1afac in thread_start (curthread=0x87f425400) at /usr/src/lib/libthr/thread/thr_create.c:292
#20 0x0000000000000000 in  ()


Adding this patch fixes the problem.

devel/glib20/files/patch-gio_gunixmounts.c

--- gio/gunixmounts.c.orig	2020-10-01 09:17:53.138733000 -0400
+++ gio/gunixmounts.c	2020-10-13 00:14:04.413638000 -0400
@@ -1389,6 +1389,8 @@
 
 #elif (defined(HAVE_GETVFSSTAT) || defined(HAVE_GETFSSTAT)) && defined(HAVE_FSTAB_H) && defined(HAVE_SYS_MOUNT_H)
 
+G_LOCK_DEFINE_STATIC(getfsent);
+
 static GList *
 _g_get_unix_mount_points (void)
 {
@@ -1433,6 +1435,7 @@
 #endif
 #endif
   
+  G_LOCK (getfsent);
   while ((fstab = getfsent ()) != NULL)
     {
       gboolean is_read_only = FALSE;
@@ -1468,6 +1471,7 @@
     }
   
   endfsent ();
+  G_UNLOCK (getfsent);
   
   return g_list_reverse (return_list);
 }
Comment 1 Dima Panov freebsd_committer freebsd_triage 2020-10-14 17:12:04 UTC
(hat: desktop) Looks pretty good, needs more testing. Grab it.
Comment 2 Tijl Coosemans freebsd_committer freebsd_triage 2020-10-15 09:37:16 UTC
(In reply to sigsys from comment #0)
I think you have to acquire the lock earlier, before the setfsent call.
Comment 3 sigsys 2020-10-15 17:16:15 UTC
(In reply to Tijl Coosemans from comment #2)
Oops you're right.

Better to move the call down while at it? No need to protect the sysctls.

--- gio/gunixmounts.c.orig	2020-10-01 09:17:53.138733000 -0400
+++ gio/gunixmounts.c	2020-10-15 13:05:40.628175000 -0400
@@ -1389,6 +1389,8 @@
 
 #elif (defined(HAVE_GETVFSSTAT) || defined(HAVE_GETFSSTAT)) && defined(HAVE_FSTAB_H) && defined(HAVE_SYS_MOUNT_H)
 
+G_LOCK_DEFINE_STATIC(getfsent);
+
 static GList *
 _g_get_unix_mount_points (void)
 {
@@ -1400,9 +1402,6 @@
   struct stat sb;
 #endif
   
-  if (!setfsent ())
-    return NULL;
-
   return_list = NULL;
   
 #ifdef HAVE_SYS_SYSCTL_H
@@ -1433,6 +1432,11 @@
 #endif
 #endif
   
+  G_LOCK (getfsent);
+  if (!setfsent ()) {
+    G_UNLOCK (getfsent);
+    return NULL;
+  }
   while ((fstab = getfsent ()) != NULL)
     {
       gboolean is_read_only = FALSE;
@@ -1468,6 +1472,7 @@
     }
   
   endfsent ();
+  G_UNLOCK (getfsent);
   
   return g_list_reverse (return_list);
 }
Comment 4 Tomasz Sowa 2020-10-16 03:21:54 UTC
I have got a similar problem with x11-fm/caja:

#0  strlcpy (dst=0x7fffde9f2280 "\300\b \t\b", src=<optimized out>, dsize=<optimized out>) at /disk2Tb/usr/src/lib/libc/string/strlcpy.c:39
39				if ((*dst++ = *src++) == '\0')
[Current thread is 1 (LWP 100454)]
(gdb) bt
#0  strlcpy (dst=0x7fffde9f2280 "\300\b \t\b", src=<optimized out>, dsize=<optimized out>) at /disk2Tb/usr/src/lib/libc/string/strlcpy.c:39
#1  0x00000008019bc50e in fstabscan () at /disk2Tb/usr/src/lib/libc/gen/fstab.c:184
#2  0x00000008019bc20c in getfsent () at /disk2Tb/usr/src/lib/libc/gen/fstab.c:227
#3  0x000000080161ec06 in _g_get_unix_mount_points () at ../gio/gunixmounts.c:1436
#4  0x000000080161eab8 in g_unix_mount_points_get (time_read=0x0) at ../gio/gunixmounts.c:1660
#5  0x000000080161edc9 in g_unix_mount_point_at (mount_path=0x8055a4fe0 "/disk4T", time_read=0x0) at ../gio/gunixmounts.c:1687
#6  0x00000008016b1754 in ignore_trash_mount (mount=0x808f2fe30) at ../gio/glocalfile.c:1789
#7  0x00000008016ac9cb in ignore_trash_path (topdir=0x8055a4f80 "/disk4T") at ../gio/glocalfile.c:1814
#8  0x00000008016ac74a in _g_local_file_has_trash_dir (dirname=0x80912f3e0 "/home/tomek/2/kopie", dir_dev=176) at ../gio/glocalfile.c:1850
#9  0x00000008016b2a8a in _g_local_file_info_get_parent_info (dir=0x80912f3e0 "/home/tomek/2/kopie", attribute_matcher=0x807a05ea0, parent_info=0x7fffde9f2e28) at ../gio/glocalfileinfo.c:880
#10 0x00000008016ae2d5 in g_local_file_query_info
    (file=0x805d4c120, attributes=0x8072633c0 "standard::*,access::*,mountable::*,time::*,unix::*,owner::*,selinux::*,thumbnail::*,id::filesystem,trash::orig-path,trash::deletion-date,metadata::*", flags=G_FILE_QUERY_INFO_NONE, cancellable=0x0, error=0x7fffde9f2f30) at ../gio/glocalfile.c:1217
#11 0x0000000801567c19 in g_file_query_info
    (file=0x805d4c120, attributes=0x8072633c0 "standard::*,access::*,mountable::*,time::*,unix::*,owner::*,selinux::*,thumbnail::*,id::filesystem,trash::orig-path,trash::deletion-date,metadata::*", flags=G_FILE_QUERY_INFO_NONE, cancellable=0x0, error=0x7fffde9f2f30) at ../gio/gfile.c:1286
#12 0x0000000801575ccd in query_info_async_thread (task=0x8091551c0 [GTask], object=0x805d4c120, task_data=0x807a4b9d0, cancellable=0x0) at ../gio/gfile.c:5534
#13 0x00000008015eb4d3 in g_task_thread_pool_thread (thread_data=0x8091551c0, pool_data=0x0) at ../gio/gtask.c:1417
#14 0x000000080187b3c7 in g_thread_pool_thread_proxy (data=0x805581260) at ../glib/gthreadpool.c:354
#15 0x0000000801879a35 in g_thread_proxy (data=0x805c92800) at ../glib/gthread.c:820
#16 0x000000080143afec in thread_start (curthread=0x805ea0300) at /disk2Tb/usr/src/lib/libthr/thread/thr_create.c:292
#17 0x0000000000000000 in  ()

The first patch fixed the problem.
Comment 5 Tijl Coosemans freebsd_committer freebsd_triage 2020-10-16 18:02:25 UTC
(In reply to sigsys from comment #3)
> Better to move the call down while at it? No need to protect the sysctls.
Yes, looks good to me.  It's unlikely that setfsent fails so calling it early to be able to return early on failure doesn't gain much in practice.
Comment 6 Ivan Rozhuk 2020-10-17 12:31:51 UTC
Core file '/tmp/thunar.01.core' (x86_64) was loaded.
(lldb) bt all
* thread #1, name = 'pool-Thunar', stop reason = signal SIGSEGV
  * frame #0: 0x000000080151786f libc.so.7`_flockfile + 15
    frame #1: 0x00000008014fbb5f libc.so.7`fgets + 63
    frame #2: 0x0000000801418f94 libc.so.7`___lldb_unnamed_symbol151$$libc.so.7 + 148
    frame #3: 0x0000000801418e1c libc.so.7`getfsent + 28
    frame #4: 0x0000000801146546 libgio-2.0.so.0`g_unix_mount_points_get + 310
    frame #5: 0x0000000801146639 libgio-2.0.so.0`g_unix_mount_point_at + 25
    frame #6: 0x00000008011a83f1 libgio-2.0.so.0`___lldb_unnamed_symbol2970$$libgio-2.0.so.0 + 145
    frame #7: 0x00000008011a8204 libgio-2.0.so.0`___lldb_unnamed_symbol2969$$libgio-2.0.so.0 + 196
    frame #8: 0x00000008011abfa5 libgio-2.0.so.0`___lldb_unnamed_symbol3032$$libgio-2.0.so.0 + 293
    frame #9: 0x00000008011ababb libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 91
    frame #10: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #11: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a633b0, file=0x0000000805bc7e80, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffde7f0e50) at thunar-io-scan-directory.c:112:14
    frame #12: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a633b0, param_values=0x0000000806e66670, error=0x00007fffde7f0ed0) at thunar-io-jobs.c:1250:15
    frame #13: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a633b0, error=0x00007fffde7f0ef0) at thunar-simple-job.c:119:13
    frame #14: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #15: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #16: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #17: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #18: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #19: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #2, name = 'thunar', stop reason = signal SIGSEGV
    frame #0: 0x00000008005474e9 libthr.so.3`pthread_getspecific + 41
    frame #1: 0x0000000801325145 libglib-2.0.so.0`___lldb_unnamed_symbol197$$libglib-2.0.so.0 + 37
    frame #2: 0x0000000801324b58 libglib-2.0.so.0`g_slice_alloc + 40
    frame #3: 0x000000080120e6f2 libgobject-2.0.so.0`g_signal_connect_data + 722
    frame #4: 0x000000000032f1bd Thunar`thunar_tree_model_item_load_idle(user_data=0x0000000806bd5f60) at thunar-tree-model.c:1438:11
    frame #5: 0x0000000801303d50 libglib-2.0.so.0`g_main_context_dispatch + 400
    frame #6: 0x00000008013040fa libglib-2.0.so.0`___lldb_unnamed_symbol119$$libglib-2.0.so.0 + 522
    frame #7: 0x00000008013041c6 libglib-2.0.so.0`g_main_context_iteration + 102
    frame #8: 0x000000080114dc8d libgio-2.0.so.0`g_application_run + 541
    frame #9: 0x000000000027610a Thunar`main(argc=2, argv=0x00007fffffffd938) at main.c:161:3
    frame #10: 0x0000000000264415 Thunar`_start + 261
  thread #3, name = 'pool-spawner', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8c libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 92
    frame #1: 0x000000080054f3bd libthr.so.3`___lldb_unnamed_symbol158$$libthr.so.3 + 605
    frame #2: 0x000000080135f525 libglib-2.0.so.0`g_cond_wait + 37
    frame #3: 0x00000008012cd0ab libglib-2.0.so.0`___lldb_unnamed_symbol15$$libglib-2.0.so.0 + 187
    frame #4: 0x00000008013321a8 libglib-2.0.so.0`___lldb_unnamed_symbol229$$libglib-2.0.so.0 + 72
    frame #5: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #6: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #4, name = 'gmain', stop reason = signal SIGSEGV
    frame #0: 0x00000008014bddea libc.so.7`__sys_poll + 10
    frame #1: 0x0000000800545b86 libthr.so.3`___lldb_unnamed_symbol38$$libthr.so.3 + 54
    frame #2: 0x00000008013040a2 libglib-2.0.so.0`___lldb_unnamed_symbol119$$libglib-2.0.so.0 + 434
    frame #3: 0x00000008013041c6 libglib-2.0.so.0`g_main_context_iteration + 102
    frame #4: 0x00000008013062c1 libglib-2.0.so.0`___lldb_unnamed_symbol124$$libglib-2.0.so.0 + 33
    frame #5: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #6: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #5, name = 'gdbus', stop reason = signal SIGSEGV
    frame #0: 0x00000008014bddea libc.so.7`__sys_poll + 10
    frame #1: 0x0000000800545b86 libthr.so.3`___lldb_unnamed_symbol38$$libthr.so.3 + 54
    frame #2: 0x00000008013040a2 libglib-2.0.so.0`___lldb_unnamed_symbol119$$libglib-2.0.so.0 + 434
    frame #3: 0x000000080130444f libglib-2.0.so.0`g_main_loop_run + 239
    frame #4: 0x00000008011933db libgio-2.0.so.0`___lldb_unnamed_symbol2748$$libgio-2.0.so.0 + 27
    frame #5: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #6: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #6, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8a libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 90
    frame #1: 0x000000080054b0f8 libthr.so.3`___lldb_unnamed_symbol111$$libthr.so.3 + 680
    frame #2: 0x0000000800549e70 libthr.so.3`_pthread_mutex_lock + 64
    frame #3: 0x000000080135eca7 libglib-2.0.so.0`g_mutex_lock + 23
    frame #4: 0x00000008011ac34c libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 572
    frame #5: 0x00000008011abcde libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 638
    frame #6: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #7: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a635f0, file=0x0000000805bc88e0, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdf7f8e50) at thunar-io-scan-directory.c:112:14
    frame #8: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a635f0, param_values=0x0000000806f47590, error=0x00007fffdf7f8ed0) at thunar-io-jobs.c:1250:15
    frame #9: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a635f0, error=0x00007fffdf7f8ef0) at thunar-simple-job.c:119:13
    frame #10: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #11: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #12: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #13: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #14: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #15: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #7, name = 'thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080151519a libc.so.7`___lldb_unnamed_symbol1518$$libc.so.7 + 714
    frame #1: 0x00000008011bd30b libgio-2.0.so.0`___lldb_unnamed_symbol3272$$libgio-2.0.so.0 + 779
    frame #2: 0x00000008011bcbff libgio-2.0.so.0`___lldb_unnamed_symbol3270$$libgio-2.0.so.0 + 335
    frame #3: 0x00000008011bb5cf libgio-2.0.so.0`___lldb_unnamed_symbol3266$$libgio-2.0.so.0 + 943
    frame #4: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #8, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8a libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 90
    frame #1: 0x000000080054b0f8 libthr.so.3`___lldb_unnamed_symbol111$$libthr.so.3 + 680
    frame #2: 0x0000000800549e70 libthr.so.3`_pthread_mutex_lock + 64
    frame #3: 0x000000080135eca7 libglib-2.0.so.0`g_mutex_lock + 23
    frame #4: 0x00000008011ac34c libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 572
    frame #5: 0x00000008011abd21 libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 705
    frame #6: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #7: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a63680, file=0x0000000805bc8a00, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdedf3e50) at thunar-io-scan-directory.c:112:14
    frame #8: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a63680, param_values=0x00000008060ffd50, error=0x00007fffdedf3ed0) at thunar-io-jobs.c:1250:15
    frame #9: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a63680, error=0x00007fffdedf3ef0) at thunar-simple-job.c:119:13
    frame #10: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #11: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #12: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #13: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #14: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #15: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #9, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8a libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 90
    frame #1: 0x000000080054b0f8 libthr.so.3`___lldb_unnamed_symbol111$$libthr.so.3 + 680
    frame #2: 0x0000000800549e70 libthr.so.3`_pthread_mutex_lock + 64
    frame #3: 0x000000080135eca7 libglib-2.0.so.0`g_mutex_lock + 23
    frame #4: 0x00000008011ac34c libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 572
    frame #5: 0x00000008011abcde libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 638
    frame #6: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #7: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a63560, file=0x0000000805bc88a0, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdf9f9e50) at thunar-io-scan-directory.c:112:14
    frame #8: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a63560, param_values=0x00000008062c8860, error=0x00007fffdf9f9ed0) at thunar-io-jobs.c:1250:15
    frame #9: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a63560, error=0x00007fffdf9f9ef0) at thunar-simple-job.c:119:13
    frame #10: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #11: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #12: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #13: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #14: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #15: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #10, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x00000008014aabaa libc.so.7`__sys_openat + 10
    frame #1: 0x0000000800545b1e libthr.so.3`___lldb_unnamed_symbol37$$libthr.so.3 + 158
    frame #2: 0x00000008013e9773 libc.so.7`open + 211
    frame #3: 0x00000008012ec043 libglib-2.0.so.0`___lldb_unnamed_symbol59$$libglib-2.0.so.0 + 67
    frame #4: 0x00000008011ac3f1 libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 737
    frame #5: 0x00000008011abd21 libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 705
    frame #6: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #7: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a63440, file=0x0000000805bc8760, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdf1f5e50) at thunar-io-scan-directory.c:112:14
    frame #8: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a63440, param_values=0x00000008062c8240, error=0x00007fffdf1f5ed0) at thunar-io-jobs.c:1250:15
    frame #9: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a63440, error=0x00007fffdf1f5ef0) at thunar-simple-job.c:119:13
    frame #10: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #11: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #12: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #13: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #14: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #15: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #11, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x00000008014fe14a libc.so.7`__sys_access + 10
    frame #1: 0x00000008011acb86 libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 2678
    frame #2: 0x00000008011abd21 libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 705
    frame #3: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #4: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a634d0, file=0x0000000805bc84a0, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdf3f6e50) at thunar-io-scan-directory.c:112:14
    frame #5: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a634d0, param_values=0x00000008060ffc60, error=0x00007fffdf3f6ed0) at thunar-io-jobs.c:1250:15
    frame #6: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a634d0, error=0x00007fffdf3f6ef0) at thunar-simple-job.c:119:13
    frame #7: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #8: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #9: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #10: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #11: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #12: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #12, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080151519a libc.so.7`___lldb_unnamed_symbol1518$$libc.so.7 + 714
    frame #1: 0x00000008011a8247 libgio-2.0.so.0`___lldb_unnamed_symbol2969$$libgio-2.0.so.0 + 263
    frame #2: 0x00000008011abfa5 libgio-2.0.so.0`___lldb_unnamed_symbol3032$$libgio-2.0.so.0 + 293
    frame #3: 0x00000008011ababb libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 91
    frame #4: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #5: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a63050, file=0x0000000805bc7f40, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdeff4e50) at thunar-io-scan-directory.c:112:14
    frame #6: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a63050, param_values=0x0000000805ddc8c0, error=0x00007fffdeff4ed0) at thunar-io-jobs.c:1250:15
    frame #7: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a63050, error=0x00007fffdeff4ef0) at thunar-simple-job.c:119:13
    frame #8: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #9: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #10: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #11: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #12: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #13: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #13, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8a libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 90
    frame #1: 0x000000080054b0f8 libthr.so.3`___lldb_unnamed_symbol111$$libthr.so.3 + 680
    frame #2: 0x0000000800549e70 libthr.so.3`_pthread_mutex_lock + 64
    frame #3: 0x000000080135eca7 libglib-2.0.so.0`g_mutex_lock + 23
    frame #4: 0x00000008011ac34c libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 572
    frame #5: 0x00000008011abd21 libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 705
    frame #6: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #7: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a630e0, file=0x0000000805bc7e60, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdebf2e50) at thunar-io-scan-directory.c:112:14
    frame #8: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a630e0, param_values=0x0000000806bd4c30, error=0x00007fffdebf2ed0) at thunar-io-jobs.c:1250:15
    frame #9: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a630e0, error=0x00007fffdebf2ef0) at thunar-simple-job.c:119:13
    frame #10: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #11: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #12: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #13: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #14: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #15: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #14, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080150629a libc.so.7`__sys_getdirentries + 10
    frame #1: 0x0000000801505ef8 libc.so.7`___lldb_unnamed_symbol1435$$libc.so.7 + 328
    frame #2: 0x0000000801505ff0 libc.so.7`readdir + 48
    frame #3: 0x00000008011abb5d libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 253
    frame #4: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #5: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x0000000806a63320, file=0x0000000805bc7d20, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffde9f1e50) at thunar-io-scan-directory.c:112:14
    frame #6: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x0000000806a63320, param_values=0x0000000806e66490, error=0x00007fffde9f1ed0) at thunar-io-jobs.c:1250:15
    frame #7: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x0000000806a63320, error=0x00007fffde9f1ef0) at thunar-simple-job.c:119:13
    frame #8: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #9: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #10: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #11: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #12: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #13: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #15, name = 'pool-Thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080151519a libc.so.7`___lldb_unnamed_symbol1518$$libc.so.7 + 714
    frame #1: 0x00000008011a8247 libgio-2.0.so.0`___lldb_unnamed_symbol2969$$libgio-2.0.so.0 + 263
    frame #2: 0x00000008011abfa5 libgio-2.0.so.0`___lldb_unnamed_symbol3032$$libgio-2.0.so.0 + 293
    frame #3: 0x00000008011ababb libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 91
    frame #4: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #5: 0x00000000002c3e69 Thunar`thunar_io_scan_directory(job=0x000000080613d3b0, file=0x0000000805bc83a0, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffde5efe50) at thunar-io-scan-directory.c:112:14
    frame #6: 0x00000000002c23e0 Thunar`_thunar_io_jobs_ls(job=0x000000080613d3b0, param_values=0x0000000806e666d0, error=0x00007fffde5efed0) at thunar-io-jobs.c:1250:15
    frame #7: 0x0000000000311467 Thunar`thunar_simple_job_execute(job=0x000000080613d3b0, error=0x00007fffde5efef0) at thunar-simple-job.c:119:13
    frame #8: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #9: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #10: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #11: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #12: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #13: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354

=========================================================================================================================================

* thread #1, name = 'pool-thunar', stop reason = signal SIGSEGV
  * frame #0: 0x0000000801518755 libc.so.7`strlcpy + 37
    frame #1: 0x000000080141911e libc.so.7`___lldb_unnamed_symbol151$$libc.so.7 + 542
    frame #2: 0x0000000801418e1c libc.so.7`getfsent + 28
    frame #3: 0x00000008011464a8 libgio-2.0.so.0`g_unix_mount_points_get + 152
    frame #4: 0x0000000801146639 libgio-2.0.so.0`g_unix_mount_point_at + 25
    frame #5: 0x00000008011a83f1 libgio-2.0.so.0`___lldb_unnamed_symbol2970$$libgio-2.0.so.0 + 145
    frame #6: 0x00000008011a8204 libgio-2.0.so.0`___lldb_unnamed_symbol2969$$libgio-2.0.so.0 + 196
    frame #7: 0x00000008011abfa5 libgio-2.0.so.0`___lldb_unnamed_symbol3032$$libgio-2.0.so.0 + 293
    frame #8: 0x00000008011ababb libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 91
    frame #9: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #10: 0x00000000002c3e69 thunar`thunar_io_scan_directory(job=0x0000000806968af0, file=0x0000000805bb4e00, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdedf3e50) at thunar-io-scan-directory.c:112:14
    frame #11: 0x00000000002c23e0 thunar`_thunar_io_jobs_ls(job=0x0000000806968af0, param_values=0x0000000806826380, error=0x00007fffdedf3ed0) at thunar-io-jobs.c:1250:15
    frame #12: 0x0000000000311467 thunar`thunar_simple_job_execute(job=0x0000000806968af0, error=0x00007fffdedf3ef0) at thunar-simple-job.c:119:13
    frame #13: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #14: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #15: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #16: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #17: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #18: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #2, name = 'thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080135ed31 libglib-2.0.so.0`g_mutex_unlock + 1
    frame #1: 0x0000000801211b02 libgobject-2.0.so.0`g_signal_emit_valist + 2210
    frame #2: 0x0000000801212196 libgobject-2.0.so.0`g_signal_emit + 134
    frame #3: 0x0000000800d7d5f4 libgtk-3.so.0`gtk_tree_model_row_inserted + 228
    frame #4: 0x00000000002cc28e thunar`thunar_list_model_files_added(folder=0x0000000805cc3d20, files=0x0000000805bc1c00, store=0x0000000806486720) at thunar-list-model.c:1320:15
    frame #5: 0x00000008011fa578 libgobject-2.0.so.0`g_closure_invoke + 200
    frame #6: 0x0000000801210db7 libgobject-2.0.so.0`___lldb_unnamed_symbol241$$libgobject-2.0.so.0 + 2631
    frame #7: 0x0000000801211d5f libgobject-2.0.so.0`g_signal_emit_valist + 2815
    frame #8: 0x0000000801212196 libgobject-2.0.so.0`g_signal_emit + 134
    frame #9: 0x00000000002b1a16 thunar`thunar_folder_finished(job=0x000000080620a410, folder=0x0000000805cc3d20) at thunar-folder.c:572:11
    frame #10: 0x00000008011fa578 libgobject-2.0.so.0`g_closure_invoke + 200
    frame #11: 0x0000000801210db7 libgobject-2.0.so.0`___lldb_unnamed_symbol241$$libgobject-2.0.so.0 + 2631
    frame #12: 0x0000000801211d5f libgobject-2.0.so.0`g_signal_emit_valist + 2815
    frame #13: 0x0000000801212196 libgobject-2.0.so.0`g_signal_emit + 134
    frame #14: 0x00000008003c907d libexo-2.so.0`___lldb_unnamed_symbol24$$libexo-2.so.0 + 141
    frame #15: 0x0000000801303d50 libglib-2.0.so.0`g_main_context_dispatch + 400
    frame #16: 0x00000008013040fa libglib-2.0.so.0`___lldb_unnamed_symbol119$$libglib-2.0.so.0 + 522
    frame #17: 0x00000008013041c6 libglib-2.0.so.0`g_main_context_iteration + 102
    frame #18: 0x000000080114dc8d libgio-2.0.so.0`g_application_run + 541
    frame #19: 0x000000000027610a thunar`main(argc=2, argv=0x00007fffffffd970) at main.c:161:3
    frame #20: 0x0000000000264415 thunar`_start + 261
  thread #3, name = 'pool-spawner', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8c libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 92
    frame #1: 0x000000080054f3bd libthr.so.3`___lldb_unnamed_symbol158$$libthr.so.3 + 605
    frame #2: 0x000000080135f525 libglib-2.0.so.0`g_cond_wait + 37
    frame #3: 0x00000008012cd0ab libglib-2.0.so.0`___lldb_unnamed_symbol15$$libglib-2.0.so.0 + 187
    frame #4: 0x00000008013321a8 libglib-2.0.so.0`___lldb_unnamed_symbol229$$libglib-2.0.so.0 + 72
    frame #5: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #6: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #4, name = 'gmain', stop reason = signal SIGSEGV
    frame #0: 0x00000008014bddea libc.so.7`__sys_poll + 10
    frame #1: 0x0000000800545b86 libthr.so.3`___lldb_unnamed_symbol38$$libthr.so.3 + 54
    frame #2: 0x00000008013040a2 libglib-2.0.so.0`___lldb_unnamed_symbol119$$libglib-2.0.so.0 + 434
    frame #3: 0x00000008013041c6 libglib-2.0.so.0`g_main_context_iteration + 102
    frame #4: 0x00000008013062c1 libglib-2.0.so.0`___lldb_unnamed_symbol124$$libglib-2.0.so.0 + 33
    frame #5: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #6: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #5, name = 'gdbus', stop reason = signal SIGSEGV
    frame #0: 0x000000080147f9d1 libc.so.7`__malloc + 1
    frame #1: 0x000000080130c173 libglib-2.0.so.0`g_malloc + 19
    frame #2: 0x00000008013274a3 libglib-2.0.so.0`g_memdup + 35
    frame #3: 0x00000008012d47df libglib-2.0.so.0`g_bytes_new + 31
    frame #4: 0x0000000801345d9d libglib-2.0.so.0`g_variant_new_byte + 45
    frame #5: 0x00000008011857b6 libgio-2.0.so.0`___lldb_unnamed_symbol2630$$libgio-2.0.so.0 + 1942
    frame #6: 0x00000008011854b2 libgio-2.0.so.0`___lldb_unnamed_symbol2630$$libgio-2.0.so.0 + 1170
    frame #7: 0x000000080118595a libgio-2.0.so.0`___lldb_unnamed_symbol2630$$libgio-2.0.so.0 + 2362
    frame #8: 0x0000000801184cf9 libgio-2.0.so.0`g_dbus_message_new_from_blob + 681
    frame #9: 0x000000080119395d libgio-2.0.so.0`___lldb_unnamed_symbol2750$$libgio-2.0.so.0 + 1069
    frame #10: 0x000000080112373b libgio-2.0.so.0`___lldb_unnamed_symbol1531$$libgio-2.0.so.0 + 43
    frame #11: 0x0000000801303d50 libglib-2.0.so.0`g_main_context_dispatch + 400
    frame #12: 0x00000008013040fa libglib-2.0.so.0`___lldb_unnamed_symbol119$$libglib-2.0.so.0 + 522
    frame #13: 0x000000080130444f libglib-2.0.so.0`g_main_loop_run + 239
    frame #14: 0x00000008011933db libgio-2.0.so.0`___lldb_unnamed_symbol2748$$libgio-2.0.so.0 + 27
    frame #15: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #16: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #6, name = 'pool-thunar', stop reason = signal SIGSEGV
    frame #0: 0x0000000800551e8c libthr.so.3`___lldb_unnamed_symbol189$$libthr.so.3 + 92
    frame #1: 0x000000080054f3bd libthr.so.3`___lldb_unnamed_symbol158$$libthr.so.3 + 605
    frame #2: 0x000000080135f6e7 libglib-2.0.so.0`g_cond_wait_until + 119
    frame #3: 0x00000008012cd07e libglib-2.0.so.0`___lldb_unnamed_symbol15$$libglib-2.0.so.0 + 142
    frame #4: 0x0000000801332e2a libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 122
    frame #5: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #6: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #7, name = 'thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080150629a libc.so.7`__sys_getdirentries + 10
    frame #1: 0x00000008011bd469 libgio-2.0.so.0`___lldb_unnamed_symbol3273$$libgio-2.0.so.0 + 89
    frame #2: 0x00000008011bd2d4 libgio-2.0.so.0`___lldb_unnamed_symbol3272$$libgio-2.0.so.0 + 724
    frame #3: 0x00000008011bcbff libgio-2.0.so.0`___lldb_unnamed_symbol3270$$libgio-2.0.so.0 + 335
    frame #4: 0x00000008011bb5cf libgio-2.0.so.0`___lldb_unnamed_symbol3266$$libgio-2.0.so.0 + 943
    frame #5: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #8, name = 'pool-thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080151519a libc.so.7`___lldb_unnamed_symbol1518$$libc.so.7 + 714
    frame #1: 0x00000008011ac195 libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 133
    frame #2: 0x00000008011abd21 libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 705
    frame #3: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #4: 0x00000000002c3e69 thunar`thunar_io_scan_directory(job=0x0000000806968940, file=0x0000000805bb4ac0, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdf3f6e50) at thunar-io-scan-directory.c:112:14
    frame #5: 0x00000000002c23e0 thunar`_thunar_io_jobs_ls(job=0x0000000806968940, param_values=0x0000000806480b00, error=0x00007fffdf3f6ed0) at thunar-io-jobs.c:1250:15
    frame #6: 0x0000000000311467 thunar`thunar_simple_job_execute(job=0x0000000806968940, error=0x00007fffdf3f6ef0) at thunar-simple-job.c:119:13
    frame #7: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #8: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #9: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #10: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #11: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #12: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #9, name = 'pool-thunar', stop reason = signal SIGSEGV
    frame #0: 0x00000008014fe14a libc.so.7`__sys_access + 10
    frame #1: 0x00000008011abf17 libgio-2.0.so.0`___lldb_unnamed_symbol3032$$libgio-2.0.so.0 + 151
    frame #2: 0x00000008011ababb libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 91
    frame #3: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #4: 0x00000000002c3e69 thunar`thunar_io_scan_directory(job=0x00000008069689d0, file=0x0000000805bb4b80, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdf1f5e50) at thunar-io-scan-directory.c:112:14
    frame #5: 0x00000000002c23e0 thunar`_thunar_io_jobs_ls(job=0x00000008069689d0, param_values=0x00000008064808c0, error=0x00007fffdf1f5ed0) at thunar-io-jobs.c:1250:15
    frame #6: 0x0000000000311467 thunar`thunar_simple_job_execute(job=0x00000008069689d0, error=0x00007fffdf1f5ef0) at thunar-simple-job.c:119:13
    frame #7: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #8: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #9: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #10: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #11: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #12: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #10, name = 'pool-thunar', stop reason = signal SIGSEGV
    frame #0: 0x00000008014e9bd6 libc.so.7`strsep + 22
    frame #1: 0x000000080141908b libc.so.7`___lldb_unnamed_symbol151$$libc.so.7 + 395
    frame #2: 0x0000000801418e1c libc.so.7`getfsent + 28
    frame #3: 0x0000000801146546 libgio-2.0.so.0`g_unix_mount_points_get + 310
    frame #4: 0x0000000801146639 libgio-2.0.so.0`g_unix_mount_point_at + 25
    frame #5: 0x00000008011a83f1 libgio-2.0.so.0`___lldb_unnamed_symbol2970$$libgio-2.0.so.0 + 145
    frame #6: 0x00000008011a8204 libgio-2.0.so.0`___lldb_unnamed_symbol2969$$libgio-2.0.so.0 + 196
    frame #7: 0x00000008011abfa5 libgio-2.0.so.0`___lldb_unnamed_symbol3032$$libgio-2.0.so.0 + 293
    frame #8: 0x00000008011ababb libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 91
    frame #9: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #10: 0x00000000002c3e69 thunar`thunar_io_scan_directory(job=0x0000000806968a60, file=0x0000000805bb4d20, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdeff4e50) at thunar-io-scan-directory.c:112:14
    frame #11: 0x00000000002c23e0 thunar`_thunar_io_jobs_ls(job=0x0000000806968a60, param_values=0x0000000806826b30, error=0x00007fffdeff4ed0) at thunar-io-jobs.c:1250:15
    frame #12: 0x0000000000311467 thunar`thunar_simple_job_execute(job=0x0000000806968a60, error=0x00007fffdeff4ef0) at thunar-simple-job.c:119:13
    frame #13: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #14: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #15: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #16: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #17: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #18: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
  thread #11, name = 'pool-thunar', stop reason = signal SIGSEGV
    frame #0: 0x000000080151519a libc.so.7`___lldb_unnamed_symbol1518$$libc.so.7 + 714
    frame #1: 0x00000008011ac195 libgio-2.0.so.0`___lldb_unnamed_symbol3035$$libgio-2.0.so.0 + 133
    frame #2: 0x00000008011abd21 libgio-2.0.so.0`___lldb_unnamed_symbol3028$$libgio-2.0.so.0 + 705
    frame #3: 0x00000008010d68a5 libgio-2.0.so.0`g_file_enumerator_next_file + 293
    frame #4: 0x00000000002c3e69 thunar`thunar_io_scan_directory(job=0x0000000806968b80, file=0x0000000805bb4b20, flags=G_FILE_QUERY_INFO_NONE, recursively=0, unlinking=0, return_thunar_files=1, error=0x00007fffdebf2e50) at thunar-io-scan-directory.c:112:14
    frame #5: 0x00000000002c23e0 thunar`_thunar_io_jobs_ls(job=0x0000000806968b80, param_values=0x0000000805d3db80, error=0x00007fffdebf2ed0) at thunar-io-jobs.c:1250:15
    frame #6: 0x0000000000311467 thunar`thunar_simple_job_execute(job=0x0000000806968b80, error=0x00007fffdebf2ef0) at thunar-simple-job.c:119:13
    frame #7: 0x00000008003c8c1c libexo-2.so.0`___lldb_unnamed_symbol22$$libexo-2.so.0 + 92
    frame #8: 0x00000008010ed364 libgio-2.0.so.0`___lldb_unnamed_symbol920$$libgio-2.0.so.0 + 52
    frame #9: 0x0000000801123465 libgio-2.0.so.0`___lldb_unnamed_symbol1526$$libgio-2.0.so.0 + 245
    frame #10: 0x0000000801332e58 libglib-2.0.so.0`___lldb_unnamed_symbol232$$libglib-2.0.so.0 + 168
    frame #11: 0x0000000801331b88 libglib-2.0.so.0`___lldb_unnamed_symbol224$$libglib-2.0.so.0 + 72
    frame #12: 0x0000000800543052 libthr.so.3`___lldb_unnamed_symbol1$$libthr.so.3 + 354
Comment 7 Ivan Rozhuk 2020-10-17 12:33:59 UTC
IMHO getfsent() is very legacy API, getmntinfo() can do same but threadsafe by design.

https://www.freebsd.org/cgi/man.cgi?query=getmntinfo&apropos=0&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports&arch=default&format=html
Comment 8 Tijl Coosemans freebsd_committer freebsd_triage 2020-10-17 16:41:24 UTC
(In reply to rozhuk.im from comment #7)
Use of getfsent is correct here.  Glib has two functions, one that returns "mount points" from /etc/fstab using getfsent and another that returns "mounts" using getfsstat (not getmntinfo).  If I understand the BUGS section in the getmntinfo manpage correctly it isn't thread safe.
Comment 9 Ivan Rozhuk 2020-10-17 21:33:44 UTC
Ugly glib`s gio strikes again...


(In reply to Tijl Coosemans from comment #8)

Yes, but getfsstat() looks like thread safe.
https://www.freebsd.org/cgi/man.cgi?query=getfsstat&sektion=2&apropos=0&manpath=FreeBSD+12.1-RELEASE+and+Ports 

Calling g_unix_mount_points_get() instead of g_unix_mounts_get() - very strange design for g_file_enumerator_next_file().
g_unix_mounts_get() - uses getfsstat().

g_unix_mount_points_get() - with parsing /etc/fstab looks like some staff for dbus or other software that should deal with mount/unmount only.
Comment 10 Ivan Rozhuk 2020-10-17 22:09:23 UTC
I dig inside this.

#5  0x000000080a181da9 in g_unix_mount_point_at () at /usr/local/lib/libgio-2.0.so.0
#6  0x000000080a1e0811 in  () at /usr/local/lib/libgio-2.0.so.0 - ignore_trash_mount()
#7  0x000000080a1e0624 in  () at /usr/local/lib/libgio-2.0.so.0 - ignore_trash_path()
#8  0x000000080a1e4235 in  () at /usr/local/lib/libgio-2.0.so.0 - g_local_file_trash() / _g_local_file_has_trash_dir()
#9  0x000000080a1e3d4e in  () at /usr/local/lib/libgio-2.0.so.0 - some proxy staff
#10 0x000000080a116a88 in g_file_enumerator_next_file () at /usr/local/lib/libgio-2.0.so.0

This code path check is "x-gvfs-notrash" present in mount options.

As for me, better to patch this:
GList *
g_unix_mount_points_get (guint64 *time_read)
{
  if (time_read)
    *time_read = get_mount_points_timestamp ();

  return _g_get_unix_mount_points ();
}

add lock and cache.
Comment 11 Ivan Rozhuk 2020-10-17 22:40:00 UTC
Created attachment 218846 [details]
add lock and cache

I hope this will fix crash and improve speed.

Test required, I build and run thunar with it, but it does not always crash so I'm not sure that issue fixed.
Comment 13 Tijl Coosemans freebsd_committer freebsd_triage 2020-10-19 18:31:35 UTC
fluffy, I think you should commit the patch from comment 3 while we wait for upstream to review the patch from comment 11.
Comment 14 Dima Panov freebsd_committer freebsd_triage 2020-10-19 22:29:39 UTC
(In reply to Tijl Coosemans from comment #13)
I think the same. Temporary patch will be landed in next hours
Comment 15 commit-hook freebsd_committer freebsd_triage 2020-10-19 23:33:59 UTC
A commit references this bug:

Author: fluffy
Date: Mon Oct 19 23:33:29 UTC 2020
New revision: 552776
URL: https://svnweb.freebsd.org/changeset/ports/552776

Log:
  devel/glib20: lock getfsent() usage to fix some consumers crashes

  Add temporary fix while more correct solution is cooking in GNOME repo
  (see details at https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1707)

  PR:		250311
  Submitted by:	sigsys@gmail.com
  Reviewed by:	tijl

Changes:
  head/devel/glib20/Makefile
  head/devel/glib20/files/patch-gio_gunixmounts.c
Comment 17 Ivan Rozhuk 2022-06-25 10:28:28 UTC
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1707 is merged
Comment 18 Ivan Rozhuk 2022-06-27 15:18:37 UTC
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1717
and
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2783
merged, waiting for next glib release to remove patches.
Comment 19 commit-hook freebsd_committer freebsd_triage 2022-07-18 23:33:49 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=943a699e47d7205726f1f77983fef0b5e6c82a56

commit 943a699e47d7205726f1f77983fef0b5e6c82a56
Author:     Dima Panov <fluffy@FreeBSD.org>
AuthorDate: 2022-07-18 23:25:26 +0000
Commit:     Dima Panov <fluffy@FreeBSD.org>
CommitDate: 2022-07-18 23:25:26 +0000

    devel/glib20: update to 2.72.3 maintenance release (+)

    While here, incorporate patches for lock getfsent() usage [1]

    Changelog:      https://gitlab.gnome.org/GNOME/glib/-/tags/2.72.3

    PR:             250311 [1]
    With hat:       desktop

 devel/glib20/Makefile           |   6 +--
 devel/glib20/distinfo           |   6 +--
 devel/glib20/files/kqueue_fnm.c | 116 +++++++++++++++++++++++++---------------
 3 files changed, 79 insertions(+), 49 deletions(-)
Comment 20 Ivan Rozhuk 2022-07-19 00:00:50 UTC
As far as I see latest commit also includes https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255707 so both PR can be closed.

Thanks!
Comment 21 Dima Panov freebsd_committer freebsd_triage 2022-07-19 00:12:49 UTC
(In reply to Ivan Rozhuk from comment #20)
Ah, indeed, I forgot to mention a second PR