[GH-ISSUE #1471] ThreadSanitizer race #775

Closed
opened 2026-03-04 01:48:41 +03:00 by kerem · 2 comments
Owner

Originally created by @gaul on GitHub (Nov 7, 2020).
Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/1471

Found when running test/run_tests_using_sanitizers.sh:

WARNING: ThreadSanitizer: data race (pid=59691)
  Write of size 1 at 0x7b0c000418a1 by thread T28 (mutexes: write M751110787032930080):
    #0 PageList::ClearAllModified() /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:717:28 (s3fs+0x5f2516)
    #1 FdEntity::RowFlush(char const*, bool) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:1346:18 (s3fs+0x5eaac8)
    #2 FdEntity::Flush(bool) /home/gaul/work/s3fs-fuse/src/./fdcache_entity.h:114:53 (s3fs+0x55ef62)
    #3 s3fs_flush(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2335:23 (s3fs+0x53eb02)
    #4 <null> <null> (libfuse.so.2+0xed13)

  Previous read of size 1 at 0x7b0c000418a1 by thread T3:
    #0 PageList::BytesModified() const /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:696:18 (s3fs+0x5f2331)
    #1 FdEntity::BytesModified() const /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:1179:21 (s3fs+0x5e88f2)
    #2 s3fs_write(char const*, char const*, unsigned long, long, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cp
p:2287:37 (s3fs+0x53e3ef)
    #3 fuse_fs_write_buf <null> (libfuse.so.2+0xe8d9)

  Location is heap block of size 40 at 0x7b0c00041880 allocated by thread T3:
    #0 operator new(unsigned long) <null> (s3fs+0x52706c)
    #1 __gnu_cxx::new_allocator<std::_List_node<fdpage> >::allocate(unsigned long, void const*) /bin/../lib/gcc/x86_64-
redhat-linux/10/../../../../include/c++/10/ext/new_allocator.h:115:27 (s3fs+0x5eecf7)
    #2 std::allocator_traits<std::allocator<std::_List_node<fdpage> > >::allocate(std::allocator<std::_List_node<fdpage
> >&, unsigned long) /bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/alloc_traits.h:460:20 (s3fs
+0x5eec7c)
    #3 std::__cxx11::_List_base<fdpage, std::allocator<fdpage> >::_M_get_node() /bin/../lib/gcc/x86_64-redhat-linux/10/
../../../../include/c++/10/bits/stl_list.h:442:16 (s3fs+0x5ee9d0)
    #4 std::_List_node<fdpage>* std::__cxx11::list<fdpage, std::allocator<fdpage> >::_M_create_node<fdpage const&>(fdpa
ge const&) /bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_list.h:634:21 (s3fs+0x5ee83e)
    #5 void std::__cxx11::list<fdpage, std::allocator<fdpage> >::_M_insert<fdpage const&>(std::_List_iterator<fdpage>,
fdpage const&) /bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_list.h:1911:18 (s3fs+0x5f5a34
)   
    #6 std::__cxx11::list<fdpage, std::allocator<fdpage> >::push_back(fdpage const&) /bin/../lib/gcc/x86_64-redhat-linu
x/10/../../../../include/c++/10/bits/stl_list.h:1212:15 (s3fs+0x5f5410)
    #7 raw_add_compress_fdpage_list(std::__cxx11::list<fdpage, std::allocator<fdpage> >&, fdpage&, bool, bool, bool, bo
ol) /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:53:18 (s3fs+0x5f59d4)
    #8 raw_compress_fdpage_list(std::__cxx11::list<fdpage, std::allocator<fdpage> > const&, bool, bool, bool, bool) /ho
me/gaul/work/s3fs-fuse/src/fdcache_page.cpp:106:9 (s3fs+0x5f537e)
    #9 compress_fdpage_list(std::__cxx11::list<fdpage, std::allocator<fdpage> > const&) /home/gaul/work/s3fs-fuse/src/f
dcache_page.cpp:123:12 (s3fs+0x5f067f)
    #10 PageList::Compress() /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:388:13 (s3fs+0x5f05f3)
    #11 PageList::SetPageLoadedStatus(long, long, PageList::page_status, bool) /home/gaul/work/s3fs-fuse/src/fdcache_pa
ge.cpp:495:27 (s3fs+0x5f107d)
    #12 FdEntity::Write(char const*, long, unsigned long) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:1506:18 (s3f
s+0x5ecc36)
    #13 s3fs_write(char const*, char const*, unsigned long, long, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.c
pp:2283:24 (s3fs+0x53e222)
    #14 fuse_fs_write_buf <null> (libfuse.so.2+0xe8d9)

  Mutex M751110787032930080 is already destroyed.

  Thread T28 (tid=60228, running) created by thread T27 at:
    #0 pthread_create <null> (s3fs+0x4e0acd)
    #1 <null> <null> (libfuse.so.2+0xb49b)

  Thread T3 (tid=59703, running) created by thread T2 at:
    #0 pthread_create <null> (s3fs+0x4e0acd)
    #1 <null> <null> (libfuse.so.2+0xb49b)

SUMMARY: ThreadSanitizer: data race /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:717:28 in PageList::ClearAllModified
()
Originally created by @gaul on GitHub (Nov 7, 2020). Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/1471 Found when running `test/run_tests_using_sanitizers.sh`: ``` WARNING: ThreadSanitizer: data race (pid=59691) Write of size 1 at 0x7b0c000418a1 by thread T28 (mutexes: write M751110787032930080): #0 PageList::ClearAllModified() /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:717:28 (s3fs+0x5f2516) #1 FdEntity::RowFlush(char const*, bool) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:1346:18 (s3fs+0x5eaac8) #2 FdEntity::Flush(bool) /home/gaul/work/s3fs-fuse/src/./fdcache_entity.h:114:53 (s3fs+0x55ef62) #3 s3fs_flush(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2335:23 (s3fs+0x53eb02) #4 <null> <null> (libfuse.so.2+0xed13) Previous read of size 1 at 0x7b0c000418a1 by thread T3: #0 PageList::BytesModified() const /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:696:18 (s3fs+0x5f2331) #1 FdEntity::BytesModified() const /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:1179:21 (s3fs+0x5e88f2) #2 s3fs_write(char const*, char const*, unsigned long, long, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cp p:2287:37 (s3fs+0x53e3ef) #3 fuse_fs_write_buf <null> (libfuse.so.2+0xe8d9) Location is heap block of size 40 at 0x7b0c00041880 allocated by thread T3: #0 operator new(unsigned long) <null> (s3fs+0x52706c) #1 __gnu_cxx::new_allocator<std::_List_node<fdpage> >::allocate(unsigned long, void const*) /bin/../lib/gcc/x86_64- redhat-linux/10/../../../../include/c++/10/ext/new_allocator.h:115:27 (s3fs+0x5eecf7) #2 std::allocator_traits<std::allocator<std::_List_node<fdpage> > >::allocate(std::allocator<std::_List_node<fdpage > >&, unsigned long) /bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/alloc_traits.h:460:20 (s3fs +0x5eec7c) #3 std::__cxx11::_List_base<fdpage, std::allocator<fdpage> >::_M_get_node() /bin/../lib/gcc/x86_64-redhat-linux/10/ ../../../../include/c++/10/bits/stl_list.h:442:16 (s3fs+0x5ee9d0) #4 std::_List_node<fdpage>* std::__cxx11::list<fdpage, std::allocator<fdpage> >::_M_create_node<fdpage const&>(fdpa ge const&) /bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_list.h:634:21 (s3fs+0x5ee83e) #5 void std::__cxx11::list<fdpage, std::allocator<fdpage> >::_M_insert<fdpage const&>(std::_List_iterator<fdpage>, fdpage const&) /bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_list.h:1911:18 (s3fs+0x5f5a34 ) #6 std::__cxx11::list<fdpage, std::allocator<fdpage> >::push_back(fdpage const&) /bin/../lib/gcc/x86_64-redhat-linu x/10/../../../../include/c++/10/bits/stl_list.h:1212:15 (s3fs+0x5f5410) #7 raw_add_compress_fdpage_list(std::__cxx11::list<fdpage, std::allocator<fdpage> >&, fdpage&, bool, bool, bool, bo ol) /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:53:18 (s3fs+0x5f59d4) #8 raw_compress_fdpage_list(std::__cxx11::list<fdpage, std::allocator<fdpage> > const&, bool, bool, bool, bool) /ho me/gaul/work/s3fs-fuse/src/fdcache_page.cpp:106:9 (s3fs+0x5f537e) #9 compress_fdpage_list(std::__cxx11::list<fdpage, std::allocator<fdpage> > const&) /home/gaul/work/s3fs-fuse/src/f dcache_page.cpp:123:12 (s3fs+0x5f067f) #10 PageList::Compress() /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:388:13 (s3fs+0x5f05f3) #11 PageList::SetPageLoadedStatus(long, long, PageList::page_status, bool) /home/gaul/work/s3fs-fuse/src/fdcache_pa ge.cpp:495:27 (s3fs+0x5f107d) #12 FdEntity::Write(char const*, long, unsigned long) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:1506:18 (s3f s+0x5ecc36) #13 s3fs_write(char const*, char const*, unsigned long, long, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.c pp:2283:24 (s3fs+0x53e222) #14 fuse_fs_write_buf <null> (libfuse.so.2+0xe8d9) Mutex M751110787032930080 is already destroyed. Thread T28 (tid=60228, running) created by thread T27 at: #0 pthread_create <null> (s3fs+0x4e0acd) #1 <null> <null> (libfuse.so.2+0xb49b) Thread T3 (tid=59703, running) created by thread T2 at: #0 pthread_create <null> (s3fs+0x4e0acd) #1 <null> <null> (libfuse.so.2+0xb49b) SUMMARY: ThreadSanitizer: data race /home/gaul/work/s3fs-fuse/src/fdcache_page.cpp:717:28 in PageList::ClearAllModified () ```
kerem closed this issue 2026-03-04 01:48:42 +03:00
Author
Owner

@gaul commented on GitHub (May 28, 2021):

We experienced a different crash/race here:

https://github.com/s3fs-fuse/s3fs-fuse/runs/2685590875

<!-- gh-comment-id:850219067 --> @gaul commented on GitHub (May 28, 2021): We experienced a different crash/race here: https://github.com/s3fs-fuse/s3fs-fuse/runs/2685590875
Author
Owner

@gaul commented on GitHub (May 28, 2021):

I reproduced a different ThreadSanitizer trace:

WARNING: ThreadSanitizer: data race (pid=491448)
  Write of size 8 at 0x7b480009c378 by thread T33 (mutexes: write M52, write M234885679745188608, write M235167154721899424):
    #0 std::_Rb_tree_header::_M_reset() /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:208:27 (s3fs+0x556c3d)
    #1 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator=(std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:1752:12 (s3fs+0x59deb4)
    #2 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator=(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_map.h:319:37 (s3fs+0x59b4a9)
    #3 FdEntity::Open(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:352:22 (s3fs+0x5dec35)
    #4 FdManager::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache.cpp:515:18 (s3fs+0x5d336e)
    #5 AutoFdEntity::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache_auto.cpp:103:47 (s3fs+0x5f8eed)
    #6 s3fs_open(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2287:31 (s3fs+0x53f8d0)
    #7 fuse_fs_open <null> (libfuse.so.2+0xd538)

  Previous read of size 8 at 0x7b480009c378 by thread T8:
    #0 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_mbegin() const /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:735:64 (s3fs+0x5576b1)
    #1 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_begin() /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:739:16 (s3fs+0x5573d5)
    #2 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:1270:31 (s3fs+0x557295)
    #3 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_map.h:1259:21 (s3fs+0x556ea5)
    #4 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_map.h:517:17 (s3fs+0x556d7c)
    #5 FdEntity::SetMCtime(timespec, timespec, bool) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:709:5 (s3fs+0x5e1613)
    #6 s3fs_open(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2295:14 (s3fs+0x53f9b0)
    #7 fuse_fs_open <null> (libfuse.so.2+0xd538)

  Location is heap block of size 384 at 0x7b480009c300 allocated by thread T8:
    #0 operator new(unsigned long) <null> (s3fs+0x52a2cc)
    #1 FdManager::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache.cpp:493:15 (s3fs+0x5d31c1)
    #2 AutoFdEntity::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache_auto.cpp:103:47 (s3fs+0x5f8eed)
    #3 s3fs_open(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2287:31 (s3fs+0x53f8d0)
    #4 fuse_fs_open <null> (libfuse.so.2+0xd538)

  Mutex M52 (0x000001118b20) created at:
    #0 pthread_mutex_init <null> (s3fs+0x4c6a63)
    #1 FdManager::FdManager() /home/gaul/work/s3fs-fuse/src/fdcache.cpp:359:27 (s3fs+0x5d1893)
    #2 __cxx_global_var_init /home/gaul/work/s3fs-fuse/src/fdcache.cpp:90:28 (s3fs+0x47707b)
    #3 _GLOBAL__sub_I_fdcache.cpp /home/gaul/work/s3fs-fuse/src/fdcache.cpp (s3fs+0x477161)
    #4 __libc_csu_init <null> (s3fs+0x60076c)

  Mutex M234885679745188608 is already destroyed.

  Mutex M235167154721899424 is already destroyed.

  Thread T33 (tid=492440, running) created by thread T32 at:
    #0 pthread_create <null> (s3fs+0x4e29c1)
    #1 <null> <null> (libfuse.so.2+0xc39b)

  Thread T8 (tid=492421, running) created by thread T1 at:
    #0 pthread_create <null> (s3fs+0x4e29c1)
    #1 <null> <null> (libfuse.so.2+0xc39b)

SUMMARY: ThreadSanitizer: data race /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:208:27 in std::_Rb_tree_header::_M_reset()
<!-- gh-comment-id:850225925 --> @gaul commented on GitHub (May 28, 2021): I reproduced a different ThreadSanitizer trace: ``` WARNING: ThreadSanitizer: data race (pid=491448) Write of size 8 at 0x7b480009c378 by thread T33 (mutexes: write M52, write M234885679745188608, write M235167154721899424): #0 std::_Rb_tree_header::_M_reset() /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:208:27 (s3fs+0x556c3d) #1 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator=(std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:1752:12 (s3fs+0x59deb4) #2 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator=(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_map.h:319:37 (s3fs+0x59b4a9) #3 FdEntity::Open(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:352:22 (s3fs+0x5dec35) #4 FdManager::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache.cpp:515:18 (s3fs+0x5d336e) #5 AutoFdEntity::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache_auto.cpp:103:47 (s3fs+0x5f8eed) #6 s3fs_open(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2287:31 (s3fs+0x53f8d0) #7 fuse_fs_open <null> (libfuse.so.2+0xd538) Previous read of size 8 at 0x7b480009c378 by thread T8: #0 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_mbegin() const /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:735:64 (s3fs+0x5576b1) #1 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_begin() /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:739:16 (s3fs+0x5573d5) #2 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:1270:31 (s3fs+0x557295) #3 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_map.h:1259:21 (s3fs+0x556ea5) #4 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_map.h:517:17 (s3fs+0x556d7c) #5 FdEntity::SetMCtime(timespec, timespec, bool) /home/gaul/work/s3fs-fuse/src/fdcache_entity.cpp:709:5 (s3fs+0x5e1613) #6 s3fs_open(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2295:14 (s3fs+0x53f9b0) #7 fuse_fs_open <null> (libfuse.so.2+0xd538) Location is heap block of size 384 at 0x7b480009c300 allocated by thread T8: #0 operator new(unsigned long) <null> (s3fs+0x52a2cc) #1 FdManager::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache.cpp:493:15 (s3fs+0x5d31c1) #2 AutoFdEntity::Open(char const*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*, long, long, bool, bool, bool) /home/gaul/work/s3fs-fuse/src/fdcache_auto.cpp:103:47 (s3fs+0x5f8eed) #3 s3fs_open(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2287:31 (s3fs+0x53f8d0) #4 fuse_fs_open <null> (libfuse.so.2+0xd538) Mutex M52 (0x000001118b20) created at: #0 pthread_mutex_init <null> (s3fs+0x4c6a63) #1 FdManager::FdManager() /home/gaul/work/s3fs-fuse/src/fdcache.cpp:359:27 (s3fs+0x5d1893) #2 __cxx_global_var_init /home/gaul/work/s3fs-fuse/src/fdcache.cpp:90:28 (s3fs+0x47707b) #3 _GLOBAL__sub_I_fdcache.cpp /home/gaul/work/s3fs-fuse/src/fdcache.cpp (s3fs+0x477161) #4 __libc_csu_init <null> (s3fs+0x60076c) Mutex M234885679745188608 is already destroyed. Mutex M235167154721899424 is already destroyed. Thread T33 (tid=492440, running) created by thread T32 at: #0 pthread_create <null> (s3fs+0x4e29c1) #1 <null> <null> (libfuse.so.2+0xc39b) Thread T8 (tid=492421, running) created by thread T1 at: #0 pthread_create <null> (s3fs+0x4e29c1) #1 <null> <null> (libfuse.so.2+0xc39b) SUMMARY: ThreadSanitizer: data race /usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/bits/stl_tree.h:208:27 in std::_Rb_tree_header::_M_reset() ```
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/s3fs-fuse#775
No description provided.