Skip to content

Commit 9238ba4

Browse files
authored
25-1: Fix a subtle memory leak in SendImmediateWriteResult (#17197)
1 parent 6be3a09 commit 9238ba4

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

ydb/core/tx/datashard/datashard.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2520,10 +2520,11 @@ ui64 TDataShard::GetMaxObservedStep() const {
25202520
}
25212521

25222522
void TDataShard::SendImmediateWriteResult(
2523-
const TRowVersion& version, const TActorId& target, IEventBase* event, ui64 cookie,
2523+
const TRowVersion& version, const TActorId& target, IEventBase* eventRawPtr, ui64 cookie,
25242524
const TActorId& sessionId,
25252525
NWilson::TTraceId traceId)
25262526
{
2527+
THolder<IEventBase> event(eventRawPtr);
25272528
NWilson::TSpan span(TWilsonTablet::TabletDetailed, std::move(traceId), "Datashard.SendImmediateWriteResult", NWilson::EFlags::AUTO_END);
25282529

25292530
const ui64 step = version.Step;
@@ -2535,9 +2536,9 @@ void TDataShard::SendImmediateWriteResult(
25352536
if (Y_LIKELY(!InMemoryVarsFrozen) || version <= SnapshotManager.GetImmediateWriteEdgeReplied()) {
25362537
SnapshotManager.PromoteImmediateWriteEdgeReplied(version);
25372538
if (!sessionId) {
2538-
Send(target, event, 0, cookie, span.GetTraceId());
2539+
Send(target, event.Release(), 0, cookie, span.GetTraceId());
25392540
} else {
2540-
SendViaSession(sessionId, target, SelfId(), event, 0, cookie, span.GetTraceId());
2541+
SendViaSession(sessionId, target, SelfId(), event.Release(), 0, cookie, span.GetTraceId());
25412542
}
25422543
} else {
25432544
span.EndError("Dropped");
@@ -2548,7 +2549,7 @@ void TDataShard::SendImmediateWriteResult(
25482549
MediatorDelayedReplies.emplace(
25492550
std::piecewise_construct,
25502551
std::forward_as_tuple(version),
2551-
std::forward_as_tuple(target, THolder<IEventBase>(event), cookie, sessionId, std::move(span)));
2552+
std::forward_as_tuple(target, std::move(event), cookie, sessionId, std::move(span)));
25522553

25532554
// Try to subscribe to the next step, when needed
25542555
if (MediatorTimeCastEntry && (MediatorTimeCastWaitingSteps.empty() || step < *MediatorTimeCastWaitingSteps.begin())) {

0 commit comments

Comments
 (0)