diff --git a/ui.cpp b/ui.cpp index ed5ccdea..a6f55005 100644 --- a/ui.cpp +++ b/ui.cpp @@ -1929,69 +1929,73 @@ void CSendDialog::OnButtonPaste(wxCommandEvent& event) void CSendDialog::OnButtonSend(wxCommandEvent& event) { - CWalletTx wtx; - string strAddress = (string)m_textCtrlAddress->GetValue(); - - // Parse amount - int64 nValue = 0; - if (!ParseMoney(m_textCtrlAmount->GetValue(), nValue) || nValue <= 0) - { - wxMessageBox(_("Error in amount "), _("Send Coins")); - return; - } - if (nValue > GetBalance()) + static CCriticalSection cs_sendlock; + TRY_CRITICAL_BLOCK(cs_sendlock) { - wxMessageBox(_("Amount exceeds your balance "), _("Send Coins")); - return; - } - if (nValue + nTransactionFee > GetBalance()) - { - wxMessageBox(string(_("Total exceeds your balance when the ")) + FormatMoney(nTransactionFee) + _(" transaction fee is included "), _("Send Coins")); - return; - } + CWalletTx wtx; + string strAddress = (string)m_textCtrlAddress->GetValue(); - // Parse bitcoin address - uint160 hash160; - bool fBitcoinAddress = AddressToHash160(strAddress, hash160); + // Parse amount + int64 nValue = 0; + if (!ParseMoney(m_textCtrlAmount->GetValue(), nValue) || nValue <= 0) + { + wxMessageBox(_("Error in amount "), _("Send Coins")); + return; + } + if (nValue > GetBalance()) + { + wxMessageBox(_("Amount exceeds your balance "), _("Send Coins")); + return; + } + if (nValue + nTransactionFee > GetBalance()) + { + wxMessageBox(string(_("Total exceeds your balance when the ")) + FormatMoney(nTransactionFee) + _(" transaction fee is included "), _("Send Coins")); + return; + } - if (fBitcoinAddress) - { - // Send to bitcoin address - CScript scriptPubKey; - scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG; + // Parse bitcoin address + uint160 hash160; + bool fBitcoinAddress = AddressToHash160(strAddress, hash160); - string strError = SendMoney(scriptPubKey, nValue, wtx, true); - if (strError == "") - wxMessageBox(_("Payment sent "), _("Sending...")); - else if (strError != "ABORTED") - wxMessageBox(strError + " ", _("Sending...")); - } - else - { - // Parse IP address - CAddress addr(strAddress); - if (!addr.IsValid()) + if (fBitcoinAddress) { - wxMessageBox(_("Invalid address "), _("Send Coins")); - return; + // Send to bitcoin address + CScript scriptPubKey; + scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG; + + string strError = SendMoney(scriptPubKey, nValue, wtx, true); + if (strError == "") + wxMessageBox(_("Payment sent "), _("Sending...")); + else if (strError != "ABORTED") + wxMessageBox(strError + " ", _("Sending...")); } + else + { + // Parse IP address + CAddress addr(strAddress); + if (!addr.IsValid()) + { + wxMessageBox(_("Invalid address "), _("Send Coins")); + return; + } - // Message - wtx.mapValue["to"] = strAddress; - wtx.mapValue["from"] = m_textCtrlFrom->GetValue(); - wtx.mapValue["message"] = m_textCtrlMessage->GetValue(); + // Message + wtx.mapValue["to"] = strAddress; + wtx.mapValue["from"] = m_textCtrlFrom->GetValue(); + wtx.mapValue["message"] = m_textCtrlMessage->GetValue(); - // Send to IP address - CSendingDialog* pdialog = new CSendingDialog(this, addr, nValue, wtx); - if (!pdialog->ShowModal()) - return; - } + // Send to IP address + CSendingDialog* pdialog = new CSendingDialog(this, addr, nValue, wtx); + if (!pdialog->ShowModal()) + return; + } - CRITICAL_BLOCK(cs_mapAddressBook) - if (!mapAddressBook.count(strAddress)) - SetAddressBookName(strAddress, ""); + CRITICAL_BLOCK(cs_mapAddressBook) + if (!mapAddressBook.count(strAddress)) + SetAddressBookName(strAddress, ""); - EndModal(true); + EndModal(true); + } } void CSendDialog::OnButtonCancel(wxCommandEvent& event)