diff options
author | Luis Osta <luis.osta@mongodb.com> | 2021-06-28 20:25:17 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-06-28 21:12:40 +0000 |
commit | 0e68f3ec099396bb26a121728915cc1efefb8002 (patch) | |
tree | 93188cf20a9ebd1da767b5d747d5bf6fe0496d15 /src/mongo/db/s/resharding/resharding_txn_cloner.cpp | |
parent | 7f54d6c00e647eac55e70debf4240a17f6eabb7a (diff) | |
download | mongo-0e68f3ec099396bb26a121728915cc1efefb8002.tar.gz |
SERVER-57655 Call Pipeline::dispose() if Pipeline::getNext() throws in ReshardingTxnCloner
Diffstat (limited to 'src/mongo/db/s/resharding/resharding_txn_cloner.cpp')
-rw-r--r-- | src/mongo/db/s/resharding/resharding_txn_cloner.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/mongo/db/s/resharding/resharding_txn_cloner.cpp b/src/mongo/db/s/resharding/resharding_txn_cloner.cpp index 161c3ef9533..6337b852311 100644 --- a/src/mongo/db/s/resharding/resharding_txn_cloner.cpp +++ b/src/mongo/db/s/resharding/resharding_txn_cloner.cpp @@ -220,7 +220,12 @@ SemiFuture<void> ReshardingTxnCloner::run( // due to a prepared transaction having been in progress. if (!chainCtx->donorRecord) { auto opCtx = factory.makeOperationContext(&cc()); + auto guard = makeGuard([&] { + chainCtx->pipeline->dispose(opCtx.get()); + chainCtx->pipeline.reset(); + }); chainCtx->donorRecord = _getNextRecord(opCtx.get(), *chainCtx->pipeline); + guard.dismiss(); } if (!chainCtx->donorRecord) { |