Skip to content

Commit 76279c1

Browse files
MacroFakePastaPastaPasta
authored andcommitted
Merge bitcoin#25149: refactor: Add thread safety annotation to BanMan::SweepBanned()
ab75388 refactor: Remove redundant scope in `BanMan::SweepBanned()` (Hennadii Stepanov) 52c0b3e refactor: Add thread safety annotation to `BanMan::SweepBanned()` (Hennadii Stepanov) 3919059 refactor: Move code from ctor into private `BanMan::LoadBanlist()` (Hennadii Stepanov) Pull request description: This PR adds a proper thread safety annotation to `BanMan::SweepBanned()`. Also a simple refactoring applied. ACKs for top commit: ajtowns: ACK ab75388 w0xlt: ACK bitcoin@ab75388 theStack: Code-review ACK ab75388 Tree-SHA512: 8699079c308454f3ffe72be2e77f0935214156bd509f9338b1104f8d128bfdd02ee06ee8c1c99b2eefdf317a00edd555d52990caaeb1ed4540eedc1e3c9d1faf
1 parent 6269c6f commit 76279c1

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

src/banman.cpp

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,19 @@
1616
BanMan::BanMan(fs::path ban_file, CClientUIInterface* client_interface, int64_t default_ban_time)
1717
: m_client_interface(client_interface), m_ban_db(std::move(ban_file)), m_default_ban_time(default_ban_time)
1818
{
19+
LoadBanlist();
20+
DumpBanlist();
21+
}
22+
23+
BanMan::~BanMan()
24+
{
25+
DumpBanlist();
26+
}
27+
28+
void BanMan::LoadBanlist()
29+
{
30+
LOCK(m_cs_banned);
31+
1932
if (m_client_interface) m_client_interface->InitMessage(_("Loading banlist…").translated);
2033

2134
int64_t n_start = GetTimeMillis();
@@ -29,13 +42,6 @@ BanMan::BanMan(fs::path ban_file, CClientUIInterface* client_interface, int64_t
2942
m_banned = {};
3043
m_is_dirty = true;
3144
}
32-
33-
DumpBanlist();
34-
}
35-
36-
BanMan::~BanMan()
37-
{
38-
DumpBanlist();
3945
}
4046

4147
void BanMan::DumpBanlist()
@@ -183,23 +189,24 @@ void BanMan::GetBanned(banmap_t& banmap)
183189

184190
void BanMan::SweepBanned()
185191
{
192+
AssertLockHeld(m_cs_banned);
193+
186194
int64_t now = GetTime();
187195
bool notify_ui = false;
188-
{
189-
LOCK(m_cs_banned);
190-
banmap_t::iterator it = m_banned.begin();
191-
while (it != m_banned.end()) {
192-
CSubNet sub_net = (*it).first;
193-
CBanEntry ban_entry = (*it).second;
194-
if (!sub_net.IsValid() || now > ban_entry.nBanUntil) {
195-
m_banned.erase(it++);
196-
m_is_dirty = true;
197-
notify_ui = true;
198-
LogPrint(BCLog::NET, "Removed banned node address/subnet: %s\n", sub_net.ToString());
199-
} else
200-
++it;
196+
banmap_t::iterator it = m_banned.begin();
197+
while (it != m_banned.end()) {
198+
CSubNet sub_net = (*it).first;
199+
CBanEntry ban_entry = (*it).second;
200+
if (!sub_net.IsValid() || now > ban_entry.nBanUntil) {
201+
m_banned.erase(it++);
202+
m_is_dirty = true;
203+
notify_ui = true;
204+
LogPrint(BCLog::NET, "Removed banned node address/subnet: %s\n", sub_net.ToString());
205+
} else {
206+
++it;
201207
}
202208
}
209+
203210
// update UI
204211
if (notify_ui && m_client_interface) {
205212
m_client_interface->BannedListChanged();

src/banman.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,12 @@ class BanMan
8181
void DumpBanlist();
8282

8383
private:
84+
void LoadBanlist() EXCLUSIVE_LOCKS_REQUIRED(!m_cs_banned);
8485
bool BannedSetIsDirty();
8586
//!set the "dirty" flag for the banlist
8687
void SetBannedSetDirty(bool dirty = true);
8788
//!clean unused entries (if bantime has expired)
88-
void SweepBanned();
89+
void SweepBanned() EXCLUSIVE_LOCKS_REQUIRED(m_cs_banned);
8990

9091
RecursiveMutex m_cs_banned;
9192
banmap_t m_banned GUARDED_BY(m_cs_banned);

0 commit comments

Comments
 (0)