

🔥🚲🚲🚲🚲🚲🚲🔥
🔥🚲💩💩💩💩🚲🔥
🔥🚲💩прод💩🚲🔥
🔥🚲💩💩💩💩🚲🔥
🔥🚲🚲🚲🚲🚲🚲🔥
🔥🔥🔥🔥🔥🔥🔥🔥
Size: a a a








SPANS — глобальная переменная, вектор внутри RwLock. Чуть позже напишу, в чём проблема, а пока попредлагайте свои варианты


SPANS — глобальная переменная, вектор внутри RwLock. Чуть позже напишу, в чём проблема, а пока попредлагайте свои вариантыimpl Drop for SpanGuard, который убирает последний вставленный span. О чём при написании unsafe-кода всегда надо помнить — так это о том, что, вообще говоря, нет гарантии, что деструкторы будут вызваны, поэтому полагаться на них для обеспечения memory safety, нельзя. Так и тут: если SpanGuard утекает (а для это достаточно просто вызвать на нём std::mem::forget), то в глобальном векторе останется ссылка с насильно расширенным временем жизни. Если функция span была вызвана с ссылкой на локальные данные, то после выхода из этой функции в SPANS остаётся висячая ссылка, что прямо декларируется как undefined behaviour в Rust.







