| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |\ \ \ |
|
| | |\ \ \
| | | |/
| | |/| |
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
https://github.com/ydb-platform/ydb/issues/41267
commit_hash:4b58b88908e09beb14aa1091377b5e099e0420eb
|
| | | | |
| | | |
| | | |
| | | | |
commit_hash:e8b2304f773f981dd79203f68a204671954ee399
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
types
For types that inherit TRefCountedBase virtually the original GetBasePtr implicitly converted T* to TRefCountedBase*, which requires reading the vptr of |*ptr| to find the vbase offset. The hazard protocol calls this with a ptr that another thread may have already retired, so the dereference was a heap-use-after-free.
Fix: TAtomicPtr now stores the typed pointer packed with the vbase offset (TPackedPtr / TTaggedPtr). The offset is computed once at Store time, when the caller still owns a strong reference and the vbase lookup is safe. Readers and the Drop path compute the canonical TRefCountedBase* address as |ptr + offset| without ever dereferencing |*ptr|.
THazardPtr::Acquire's T* overload is constrained to reject types that virtually inherit TRefCountedBase; such types must go through TAtomicPtr.
Adds a ASan regression test that triggered heap-use-after-free reliably on the buggy code with barrier-synchronised reader/writer threads.
commit_hash:0f15888a6224c9fbcf810d9093d82e3265a7210e
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Adds Google Benchmark microbenchmarks for the `TCallback` / `TPropagatingStorage` hot paths under `yt/yt/core/actions/benchmarks` (a `TTraceContext` is constructed at startup so the realistic production switch handler is active in every benchmark), then optimizes the path so that `TCallback::Run()` pays less per invocation.
## Headline benchmark deltas
Release build, single thread, trace-context switch handler registered:
| Benchmark | Trunk | Opt | Δ |
|--------------------------------------|--------|--------|-------|
| `BM_Capture_NoStorage` | 34 ns | 31 ns | -7% |
| `BM_Capture_EmptyStorage` | 38 ns | 35 ns | -6% |
| `BM_Capture_NonEmptyStorage` | 38 ns | 36 ns | -5% |
| `BM_Capture_NoPropagate_WithStorage` | 24 ns | 26 ns | noise |
| `BM_Run_NullPS` | 30 ns | 16 ns | **-46%** |
| `BM_Run_EmptyPS` | 74 ns | 44 ns | **-41%** |
| `BM_Run_NonEmptyPS` | 76 ns | 44 ns | **-41%** |
| `BM_Run_NoPropagate` | 2 ns | 2 ns | unchanged |
| `BM_CaptureAndRun_NullPS` | 67 ns | 52 ns | **-23%** |
| `BM_CaptureAndRun_NonEmptyPS` | 112 ns | 79 ns | **-30%** |
`BIND_NO_PROPAGATE` is unchanged.
## Changes vs trunk
### Manager dispatch
- `TPropagatingStorageManager` loses its `LeakySingleton` wrapper and becomes a `constinit` static in `NDetail`. The per-call double-checked-locking pointer load on every `TCallback::Run` goes away; access is now a plain address.
- `TPropagatingStorageManager::SwitchPropagatingStorage` stays out-of-line in the cpp to avoid bloating every `TCallback::Run` instantiation.
- `TPropagatingStorageGuard`'s ctor and dtor move from the cpp into the inl, so the install/restore call site goes directly to `PropagatingStorageManager.SwitchPropagatingStorage(...)` without the trunk's `TPropagatingStorageManager::Get()->...` member-pointer indirection.
### FLS pointer caching
- `TPropagatingStorageGuard` gains a `TFls*` cache populated on its first `SwitchPropagatingStorage` call and reused on its second. Drops one `Y_NO_INLINE` `GetCurrentFls()` call per `Run`.
- Inside `SwitchPropagatingStorage`, the `TFls*&` parameter is hoisted once into a local register at function entry so subsequent in-function uses don't go through the reference.
### Storage internals
- `TPropagatingStorage::Impl_` moves from `TIntrusivePtr<TImpl>` (private nested) to `TIntrusivePtr<TPropagatingStorageImpl>` (`NDetail`, defined in `propagating_storage-inl.h`). This lets the read paths — `IsNull`, `IsEmpty`, `FindRaw`, and the templated `Find` / `Has` — all inline at callers. Mutating ops (`ExchangeRaw`/`RemoveRaw`/`Clone`) stay out-of-line.
- `IsNull`, `IsEmpty`, `FindRaw`, `CurrentPropagatingStorage`, and `GetCurrentPropagatingStorage` move from cpp out-of-line definitions to inl inline definitions accordingly.
- `TPropagatingStorage`'s explicit special-member declarations are dropped (relying on implicit generation), except for the default ctor (`= default`) which has to stay declared because the private converting ctor would otherwise suppress it.
- `TPropagatingStorageImpl`'s copy ctor is hand-written (members init explicitly) because `TRefCounted`'s copy ctor is deleted; it preserves trunk's behavior that `Clone()` carries the signal subscriber lists alongside the data map.
### Trace-context lookup
- `TryGetTraceContextFromPropagatingStorage` is now defined inline in `trace_context-inl.h` (one definition; the previous `Fast` variant is merged in). Hot-path callers — `OnPropagatingStorageAfterSwitch` and the `YT_ASSERT` in `OnPropagatingStorageBeforeSwitch` — inline the lookup. An out-of-line copy is force-emitted via `[[gnu::used]]` so the GDB fiber printer (`devtools/gdb/yt_fibers_printer.py`) can still resolve the symbol at runtime.
### Inlining nudges
- `TPropagateMixin::MakePropagatingStorageGuard` gains `Y_FORCE_INLINE` so it actually inlines into `TBindState::Run` rather than being emitted as a separate weak symbol per instantiation.
- `TPropagatingStorage::IsNull` is also marked `[[gnu::used]]` for the same GDB-symbol-resolution reason as `TryGetTraceContextFromPropagatingStorage`.
commit_hash:86793cebfc5ff891affab25dcc67d987e553854c
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
Update tools: ya_bin, os_test_tool, test_tool, os_ya
commit_hash:4aacda62e7c55c55ae0cea427e403ef61fc44bdd
|
| | | | |
| | | |
| | | |
| | | | |
commit_hash:8d7a61a89d145f2cf8e01f4c370f0200b0b078ce
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
https://nda.ya.ru/t/FcvfNo6S7dUqfG
commit_hash:98e88ce3af3f38add41ac54cac9a1a310a5b0788
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Linter to check hardcoded russians constants in Yandex.Market services
(https://nda.ya.ru/t/8c2UwbII7dUqGz
commit_hash:4fa2ecfe2d7f49e5ea30fb7a80936248b76d31a0
|
| | | | |
| | | |
| | | | |
Co-authored-by: Vlad Kuznetsov <[email protected]>
|
| | | | |
| | | |
| | | |
| | | | |
Co-authored-by: ydbdoc-review <[email protected]>
Co-authored-by: sintjuri <[email protected]>
|
| | |_|/
|/| |
| | |
| | | |
https://github.com/ydb-platform/ydb/pull/36547 (#38048)
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | | |
Co-authored-by: Roman Kuzin <[email protected]>
|
| | | |
| | |
| | | |
Co-authored-by: Kirill Vasilenko <[email protected]>
|
| |\ \ \ |
|
| | | | | |
|
| |\ \ \ \ |
|
| | |/ / / |
|
| |/ / / |
|
| | | | |
|
| |/ / |
|
| |\ \ |
|
| | | | |
|
| |\ \ \ |
|
| | |/ / |
|
| |/ / |
|
| | | |
|
| | |
| |
| | |
Co-authored-by: ArtemTrofimushkin <[email protected]>
|
| | | |
|
| | | |
|
| | | |
|
| |\ \ |
|
| | | | |
|
| |\ \ \
| |/ /
|/| | |
|
| | |\| |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
## **AFL\+\+ integration into the fuzzing toolchain (replacing vanilla AFL)**
**Problem being solved:** compile fuzzing targets with the `--afl` flag, substituting the clang/clang\+\+ compiler with afl-clang-fast / afl-clang-fast\+\+.
The current vanilla AFL implementation is unmaintained and broken. The details were discussed here: <https://nda.ya.ru/t/lrUJhJBJ7dSnUG>.
In this PR, the vanilla AFL code has been removed, leaving only `aflpp_driver.cpp` (from the AFLplusplus repository), the code that helps convert libfuzzer-like fuzzing harnesses to afl\+\+. Compilation uses the afl\+\+ toolchain, which was added in advance to `build/external_resources/aflplusplus/`.
I had to make changes to the `devtools/ya` code, since I couldn't find any similar cases (selecting several compilers for a single platform depending on a flag). I chose not to register a new compiler, because afl-clang-fast is essentially a wrapper over clang with added passes — so I decided to select the compiler based on the `--afl` flag.
commit_hash:cc138ebf17f07122cbcfdc9a79b371f6b73cd5ca
|
| | | |
| | |
| | |
| | | |
commit_hash:4c139857684c7144eeea0ba5f8e53572276a86fc
|
| | | |
| | |
| | |
| | | |
commit_hash:1fd38799ccae82b269e9ce63f109b6178fb3dd3b
|
| | | |
| | |
| | |
| | | |
commit_hash:70827b51bd16a4236ef38fdb178a79d56f6bcf7c
|
| | | |
| | |
| | |
| | | |
commit_hash:61e5b35c11bc86c4063b8ab5e1abec62e00637f0
|
| | | |
| | |
| | |
| | | |
commit_hash:3cfe2e66c9cf5391f2befa804ea429436660b222
|
| | | |
| | |
| | |
| | | |
commit_hash:65d1e3053e157375f7a704f1e635467ded5a7ef2
|
| | | |
| | |
| | |
| | | |
commit_hash:24a4bd9d87c34a2da698010dda8584a4e1aae039
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
<section id="quibbler-autodescription">
#### Устаревшие модули сборки и тестов: пометка и документация 📝
- 📝 Добавлены пометки о deprecated для устаревших модулей сборки и тестов, включая TS_NEXT, TS_TSC, TS_VITE, TS_WEBPACK, TS_RSPACK, а также тестовые модули JEST, VITEST, HERMIONE и PLAYWRIGHT.
- 📚 Обновлены документации: добавлены уведомления о deprecated, обновлены ссылки и примеры использования, убраны устаревшие разделы.
- 🛠️ Обновлены макросы и их документация: изменены ссылки на макросы, обновлены примеры использования и добавлены уведомления о deprecated.
- 🧼 Удалены устаревшие модули и разделы из документации и структуры навигации.
<a href="https://nda.ya.ru/t/qa0kX64r7DqvtN"><font size="2">Autodescription by Yandex Code Assistant</font></a>
</section>
commit_hash:b3ec2a1203122d60309cd4f5f80c97a184eb6a07
|
| | | |
| | |
| | |
| | | |
commit_hash:645e2e2b7678df55116f758a92a38e5e2c6484a4
|
| |\ \ \ |
|
| | | | | |
|