Documentation
¶
Overview ¶
Package logbuf — журнал в память, который проба читает, ПОКА в него пишет чужая горутина.
Зачем, если у обработчика журнала свой мьютекс ¶
Обработчик `log/slog` сериализует ЗАПИСИ между собой, и только их: читатель буфера под этот мьютекс не заходит. Голый `bytes.Buffer` поэтому безопасен, пока писатель — сама проба, и становится гонкой, как только пишет исполнитель асинхронной операции, а проба читает из своей горутины (или из горутины `require.Eventually`).
Почему такая гонка краснеет на чужом запросе слияния ¶
Без детектора такая гонка отказа почти не даёт: чтение, застигнутое посреди записи, обычно отдаёт лишь неполный текст. Под детектором — не на каждом процессе (замер 2026-09-15 на пробе пути приглашения: 12 процессов из 100): он сообщает только о той паре доступов, которую застал без упорядочивающей синхронизации, а посторонняя синхронизация между писателем и читателем то случается, то нет. Отсюда форма отказа — проба, зелёная на стволе, краснеет на запросе слияния, который её не трогал. Буфер ниже делает упорядочение обязательным, а не случайным.
Чего здесь нет — намеренно ¶
Нет `Bytes()`: срез, отданный из-под замка, делит память с буфером, и следующая запись (рост, копирование) пишет в неё уже без замка — та же гонка, перенесённая на одну строку ниже. `String()` отдаёт копию.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.