From 417f52253bc2546beb6ba92809c17717100448fa Mon Sep 17 00:00:00 2001 From: EntireTwix Date: Wed, 21 Apr 2021 21:42:30 -0700 Subject: [PATCH] :bug: concurrent del user & adding log entry would allow a ghost log to be made --- include/bank.hpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/include/bank.hpp b/include/bank.hpp index d436fe0..0cb9d9f 100644 --- a/include/bank.hpp +++ b/include/bank.hpp @@ -128,18 +128,22 @@ public: Transaction temp(a_name, b_name, amount); Transaction temp2(a_name, b_name, amount); - if (logs.try_emplace_l(a_name, [&temp](Log &l) { l.AddTrans(std::move(temp)); })) - { - logs.modify_if(a_name, [&temp](Log &l) { - l.AddTrans(std::move(temp)); - }); - } - if (logs.try_emplace_l(b_name, [&temp2](Log &l) { l.AddTrans(std::move(temp2)); })) - { - logs.modify_if(b_name, [&temp2](Log &l) { - l.AddTrans(std::move(temp2)); - }); - } + users.if_contains(a_name, [&temp, &a_name](const User &u) { + if (logs.try_emplace_l(a_name, [&temp](Log &l) { l.AddTrans(std::move(temp)); })) + { + logs.modify_if(a_name, [&temp](Log &l) { + l.AddTrans(std::move(temp)); + }); + } + }); + users.if_contains(a_name, [&temp, &a_name](const User &u) { + if (logs.try_emplace_l(b_name, [&temp2](Log &l) { l.AddTrans(std::move(temp2)); })) + { + logs.modify_if(b_name, [&temp2](Log &l) { + l.AddTrans(std::move(temp2)); + }); + } + }); } return state;