diff --git a/src/addrman.cpp b/src/addrman.cpp index 805ca37921392..ff1706e9019ba 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -334,10 +334,10 @@ void CAddrMan::Attempt_(const CService& addr, int64_t nTime) info.nAttempts++; } -CAddress CAddrMan::Select_() +CAddrInfo CAddrMan::Select_() { if (size() == 0) - return CAddress(); + return CAddrInfo(); // Use a 50% chance for choosing between tried and new table entries. if (nTried > 0 && (nNew == 0 || GetRandInt(2) == 0)) { @@ -346,8 +346,10 @@ CAddress CAddrMan::Select_() while (1) { int nKBucket = GetRandInt(ADDRMAN_TRIED_BUCKET_COUNT); int nKBucketPos = GetRandInt(ADDRMAN_BUCKET_SIZE); - if (vvTried[nKBucket][nKBucketPos] == -1) - continue; + while (vvTried[nKBucket][nKBucketPos] == -1) { + nKBucket = (nKBucket + insecure_rand()) % ADDRMAN_TRIED_BUCKET_COUNT; + nKBucketPos = (nKBucketPos + insecure_rand()) % ADDRMAN_BUCKET_SIZE; + } int nId = vvTried[nKBucket][nKBucketPos]; assert(mapInfo.count(nId) == 1); CAddrInfo& info = mapInfo[nId]; @@ -361,8 +363,10 @@ CAddress CAddrMan::Select_() while (1) { int nUBucket = GetRandInt(ADDRMAN_NEW_BUCKET_COUNT); int nUBucketPos = GetRandInt(ADDRMAN_BUCKET_SIZE); - if (vvNew[nUBucket][nUBucketPos] == -1) - continue; + while (vvNew[nUBucket][nUBucketPos] == -1) { + nUBucket = (nUBucket + insecure_rand()) % ADDRMAN_NEW_BUCKET_COUNT; + nUBucketPos = (nUBucketPos + insecure_rand()) % ADDRMAN_BUCKET_SIZE; + } int nId = vvNew[nUBucket][nUBucketPos]; assert(mapInfo.count(nId) == 1); CAddrInfo& info = mapInfo[nId]; diff --git a/src/addrman.h b/src/addrman.h index d57c1936c3883..c1804a5198d11 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -25,6 +25,10 @@ */ class CAddrInfo : public CAddress { +public: + //! last try whatsoever by us (memory only) + int64_t nLastTry; + private: //! where knowledge about this address first came from CNetAddr source; @@ -32,9 +36,6 @@ class CAddrInfo : public CAddress //! last successful connection by us int64_t nLastSuccess; - //! last try whatsoever by us: - // int64_t CAddress::nLastTry - //! connection attempts since last successful attempt int nAttempts; @@ -232,7 +233,7 @@ class CAddrMan //! Select an address to connect to. //! nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100) - CAddress Select_(); + CAddrInfo Select_(); #ifdef DEBUG_ADDRMAN //! Perform consistency check. Returns an error code or zero. @@ -534,9 +535,9 @@ class CAddrMan * Choose an address to connect to. * nUnkBias determines how much "new" entries are favored over "tried" ones (0-100). */ - CAddress Select() + CAddrInfo Select() { - CAddress addrRet; + CAddrInfo addrRet; { LOCK(cs); Check(); diff --git a/src/net.cpp b/src/net.cpp index 15281b78a7e38..a5e617a963f73 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1363,7 +1363,7 @@ void ThreadOpenConnections() int nTries = 0; while (true) { - CAddress addr = addrman.Select(); + CAddrInfo addr = addrman.Select(); // if we selected an invalid address, restart if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr)) diff --git a/src/protocol.cpp b/src/protocol.cpp index a92d65840b344..42e4d81f6fde0 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -100,7 +100,6 @@ void CAddress::Init() { nServices = NODE_NETWORK; nTime = 100000000; - nLastTry = 0; } CInv::CInv() diff --git a/src/protocol.h b/src/protocol.h index 986e43248e630..4496f69effd0e 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -120,9 +120,6 @@ class CAddress : public CService // disk and network only unsigned int nTime; - - // memory only - int64_t nLastTry; }; /** inv message data */ diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index e8abec3cbe57f..38bf4dbc52d95 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -781,6 +781,7 @@ void BitcoinGUI::optionsClicked() OptionsDialog dlg(this, enableWallet); dlg.setModel(clientModel->getOptionsModel()); + dlg.setCurrentIndex(0); dlg.exec(); } diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 1fd9ff1446623..6d53393780b73 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -345,3 +345,8 @@ bool OptionsDialog::eventFilter(QObject* object, QEvent* event) } return QDialog::eventFilter(object, event); } + +void OptionsDialog::setCurrentIndex(int index) +{ + ui->tabWidget->setCurrentIndex(index); +} diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index a7847ef2a0eb2..ef39989ea6dd4 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -33,6 +33,7 @@ class OptionsDialog : public QDialog void setModel(OptionsModel* model); void setMapper(); + void setCurrentIndex(int index); protected: bool eventFilter(QObject* object, QEvent* event);