From 7a8dc5dee882a498a85bfc99d8d8e0bf0930f84f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 9 May 2026 08:08:24 +0000 Subject: [PATCH] Fix Tor reconnect and receive request crash Co-authored-by: Reuben Yap --- src/qt/receivecoinsdialog.cpp | 4 ++-- src/qt/receiverequestdialog.cpp | 14 ++++++++------ src/qt/receiverequestdialog.h | 2 +- src/torcontrol.cpp | 2 ++ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp index ad4e39a39e..e64b15cc2a 100644 --- a/src/qt/receivecoinsdialog.cpp +++ b/src/qt/receivecoinsdialog.cpp @@ -206,7 +206,7 @@ void ReceiveCoinsDialog::on_receiveButton_clicked() ui->reqAmount->value(), ui->reqMessage->text()); ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this); dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->setModel(model->getOptionsModel()); + dialog->setModel(model); dialog->setInfo(info); dialog->show(); clear(); @@ -220,7 +220,7 @@ void ReceiveCoinsDialog::on_recentRequestsView_doubleClicked(const QModelIndex & QModelIndex targetIdx = recentRequestsProxyModel->mapToSource(index); const RecentRequestsTableModel *submodel = model->getRecentRequestsTableModel(); ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this); - dialog->setModel(model->getOptionsModel()); + dialog->setModel(model); dialog->setInfo(submodel->entry(targetIdx.row()).recipient); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); diff --git a/src/qt/receiverequestdialog.cpp b/src/qt/receiverequestdialog.cpp index 0c19c5d9c1..ad5f699cab 100644 --- a/src/qt/receiverequestdialog.cpp +++ b/src/qt/receiverequestdialog.cpp @@ -90,7 +90,8 @@ void QRImageWidget::contextMenuEvent(QContextMenuEvent *event) ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ReceiveRequestDialog), - model(0) + model(0), + walletModel(0) { ui->setupUi(this); @@ -107,12 +108,13 @@ ReceiveRequestDialog::~ReceiveRequestDialog() delete ui; } -void ReceiveRequestDialog::setModel(OptionsModel *_model) +void ReceiveRequestDialog::setModel(WalletModel *_model) { - this->model = _model; + this->walletModel = _model; + this->model = _model ? _model->getOptionsModel() : 0; - if (_model) - connect(_model, &OptionsModel::displayUnitChanged, this, &ReceiveRequestDialog::update); + if (model) + connect(model, &OptionsModel::displayUnitChanged, this, &ReceiveRequestDialog::update); // update the display unit if necessary update(); @@ -126,7 +128,7 @@ void ReceiveRequestDialog::setInfo(const SendCoinsRecipient &_info) void ReceiveRequestDialog::update() { - if(!model) + if(!model || !walletModel) return; resize(width(), 600); QString target = info.label; diff --git a/src/qt/receiverequestdialog.h b/src/qt/receiverequestdialog.h index bb27a95f37..82d0def8c4 100644 --- a/src/qt/receiverequestdialog.h +++ b/src/qt/receiverequestdialog.h @@ -53,7 +53,7 @@ class ReceiveRequestDialog : public QDialog explicit ReceiveRequestDialog(QWidget *parent = 0); ~ReceiveRequestDialog(); - void setModel(OptionsModel *model); + void setModel(WalletModel *model); void setInfo(const SendCoinsRecipient &info); private Q_SLOTS: diff --git a/src/torcontrol.cpp b/src/torcontrol.cpp index 14a8c51027..e4947a4987 100644 --- a/src/torcontrol.cpp +++ b/src/torcontrol.cpp @@ -231,6 +231,8 @@ bool TorControlConnection::Disconnect() if (b_conn) bufferevent_free(b_conn); b_conn = 0; + message.Clear(); + reply_handlers.clear(); return true; }