aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2012-04-13 18:24:55 -0400
committerJeff Garzik <jgarzik@redhat.com>2012-04-13 18:24:55 -0400
commit8deb9822e41602001b399944d8a182f48bc9d088 (patch)
tree6f2dde04c144f63dec56de4330c889b9681ae032 /src
parent6b8e7eefccf8d27c145d2e694037c2e10984f748 (diff)
downloadbitcoin-8deb9822e41602001b399944d8a182f48bc9d088.tar.xz
Locking fix for AlreadyHave()
Access to mapTransactions[] must be guarded by cs_mapTransactions lock. Also, reformat long lines to make the switch statement more readable.
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp
index bdafae8eb8..c9368cf7ff 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2137,8 +2137,17 @@ bool static AlreadyHave(CTxDB& txdb, const CInv& inv)
{
switch (inv.type)
{
- case MSG_TX: return mapTransactions.count(inv.hash) || mapOrphanTransactions.count(inv.hash) || txdb.ContainsTx(inv.hash);
- case MSG_BLOCK: return mapBlockIndex.count(inv.hash) || mapOrphanBlocks.count(inv.hash);
+ case MSG_TX:
+ {
+ LOCK(cs_mapTransactions);
+ return mapTransactions.count(inv.hash) ||
+ mapOrphanTransactions.count(inv.hash) ||
+ txdb.ContainsTx(inv.hash);
+ }
+
+ case MSG_BLOCK:
+ return mapBlockIndex.count(inv.hash) ||
+ mapOrphanBlocks.count(inv.hash);
}
// Don't know what it is, just say we already got one
return true;