summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp')
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp
index 1ad70b3d11b..c3421f81987 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_begin_transaction_block.cpp
@@ -91,10 +91,16 @@ WiredTigerBeginTxnBlock::~WiredTigerBeginTxnBlock() {
Status WiredTigerBeginTxnBlock::setReadSnapshot(Timestamp readTimestamp) {
invariant(_rollback);
- std::string readTSConfigString = "read_timestamp={:x}"_format(readTimestamp.asULL());
+ // Avoid heap allocation in favour of a stack allocation for the configuration string.
+ constexpr auto configFmtString = "read_timestamp={:x}";
+ constexpr auto numBytesRequired = std::char_traits<char>::length(configFmtString) +
+ (sizeof(decltype(readTimestamp.asULL())) * 2) + 1;
+ std::array<char, numBytesRequired> configString;
+ auto end =
+ fmt::format_to(configString.begin(), FMT_STRING(configFmtString), readTimestamp.asULL());
+ *end = '\0';
- return wtRCToStatus(_session->timestamp_transaction(_session, readTSConfigString.c_str()),
- _session);
+ return wtRCToStatus(_session->timestamp_transaction(_session, configString.begin()), _session);
}
void WiredTigerBeginTxnBlock::done() {