Commit Graph
4 Commits
Author SHA1 Message Date
Yixuan Wang c96f3489d6 [fix](sync_point) Fix heap-use-after-free in SyncPoint during program exit (#61040)
### What problem does this PR solve?

The SyncPoint singleton was being destroyed during program exit while
background bthread timers were still accessing it, causing
heap-use-after-free.

Changed get_instance() to return a never-destructed heap-allocated
pointer
instead of a stack-allocated static object to prevent destruction order
issues.

This is a standard pattern for singletons accessed by background
threads.

```
11:47:40       #0 0x5582a963153d in operator new(unsigned long) (/root/doris/cloud/ut_build_ASAN/test/recycler_test+0x122b53d) (BuildId: 1191affa24589f52)
11:47:40       #1 0x5582ab0aa52f in doris::SyncPoint::SyncPoint() /root/doris/common/cpp/sync_point.cpp:77:9
11:47:40       #2 0x5582ab0aa46b in doris::SyncPoint::get_instance() /root/doris/common/cpp/sync_point.cpp:73:20
11:47:40       #3 0x5582aae33ee8 in doris::cloud::memkv::Transaction::get(std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>, std::unique_ptr<doris::cloud::RangeGetIterator, std::default_delete<doris::cloud::RangeGetIterator>>*, bool, int) /root/doris/cloud/src/meta-store/mem_txn_kv.cpp:276:5
11:47:40       #4 0x5582a968f49f in doris::cloud::txn_get(doris::cloud::TxnKv*, std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>, std::unique_ptr<doris::cloud::RangeGetIterator, std::default_delete<doris::cloud::RangeGetIterator>>&) /root/doris/cloud/src/recycler/recycler.cpp:99:18
11:47:40       #5 0x5582a9657090 in doris::cloud::InstanceRecycler::scan_and_recycle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string_view<char, std::char_traits<char>>, std::function<int (std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>)>, std::function<int ()>) /root/doris/cloud/src/recycler/recycler.cpp:2976:23
11:47:40       #6 0x5582a9686153 in doris::cloud::InstanceRecycler::recycle_rowsets() /root/doris/cloud/src/recycler/recycler.cpp:2587:15
11:47:40       #7 0x5582a96a8d47 in doris::cloud::RecyclerTest_recycle_empty_Test::TestBody() /root/doris/cloud/test/recycler_test.cpp:1136:5
```
2026-03-16 22:28:17 +08:00
Gavin Chou de856351f9 [fix](syncpoint) Fix incorrect syncpoint 'has_point()' intorduced by (#43461) (#43784)
Related PR: #43461
2024-11-12 21:29:10 +08:00
deardeng 92e4857309 [fix](sync point) Fix sync point not reg but construct default value (#43461)
Fix open ENABLE_INJECTION_POINT complie switch, be log

```
W20241107 11:43:11.205868   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.275723   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.415167   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.484220   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.553351   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.622395   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.691509   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.830601   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.899286   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:11.967985   788 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:13.841727  1032 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:13.945942  1032 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:14.156761  1032 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:38.900395  3064 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:39.397446  3064 status.h:423] meet error status: [IO_ERROR]inject io error
W20241107 11:43:39.896116  3064 status.h:423] meet error status: [IO_ERROR]inject io error
```

For example, in the BE code:
```
TEST_SYNC_POINT_RETURN_WITH_VALUE("LocalFileReader::read_at_impl",
                                   Status::IOError("inject io error"))
```

However, this sync point is not used in the BE, although it is used in
the unit tests. But this macro, when expanded, will construct a default
value, and Status::IOError will print the stack log as soon as it is
constructed.
2024-11-12 10:23:52 +08:00
plat1ko bca8b07d7b [refactor](cloud) Extract SyncPoint to common cpp (#37165)
## Proposed changes

Extract SyncPoint to common cpp directory. Some code shared between BE
and Cloud will gradually be extracted to the `$repo_root/common/cpp`
directory in the future.
2024-07-09 17:07:59 +08:00