@@ -245,6 +245,7 @@ void Writeset_trx_dependency_tracker::get_dependency(THD *thd,
245245 // it did not broke past the capacity already
246246 !write_set_ctx->was_write_set_limit_reached ();
247247 bool exceeds_capacity = false ;
248+ auto writeset_history = std::atomic_load (&m_writeset_history);
248249
249250 if (can_use_writesets) {
250251 /*
@@ -253,7 +254,7 @@ void Writeset_trx_dependency_tracker::get_dependency(THD *thd,
253254 using its information for current transaction.
254255 */
255256 exceeds_capacity =
256- m_writeset_history. size () + writeset->size () > m_opt_max_history_size;
257+ writeset_history-> size () + writeset->size () > m_opt_max_history_size;
257258
258259 /*
259260 Compute the greatest sequence_number among all conflicts and add the
@@ -262,15 +263,15 @@ void Writeset_trx_dependency_tracker::get_dependency(THD *thd,
262263 int64 last_parent = m_writeset_history_start;
263264 for (std::vector<uint64>::iterator it = writeset->begin ();
264265 it != writeset->end (); ++it) {
265- Writeset_history::iterator hst = m_writeset_history. find (*it);
266- if (hst != m_writeset_history. end ()) {
266+ Writeset_history::iterator hst = writeset_history-> find (*it);
267+ if (hst != writeset_history-> end ()) {
267268 if (hst->second > last_parent && hst->second < sequence_number)
268269 last_parent = hst->second ;
269270
270271 hst->second = sequence_number;
271272 } else {
272273 if (!exceeds_capacity)
273- m_writeset_history. insert (
274+ writeset_history-> insert (
274275 std::pair<uint64, int64>(*it, sequence_number));
275276 }
276277 }
@@ -292,13 +293,16 @@ void Writeset_trx_dependency_tracker::get_dependency(THD *thd,
292293
293294 if (exceeds_capacity || !can_use_writesets) {
294295 m_writeset_history_start = sequence_number;
295- m_writeset_history.clear ();
296+ if (writeset_history) {
297+ writeset_history->clear ();
298+ }
296299 }
297300}
298301
299302void Writeset_trx_dependency_tracker::rotate (int64 start) {
300303 m_writeset_history_start = start;
301- m_writeset_history.clear ();
304+ auto new_map = std::make_shared<Writeset_history>();
305+ std::atomic_store (&m_writeset_history, new_map);
302306}
303307
304308/* *
0 commit comments