From 45b3bd3a22848f9913fd80c772b9673afb52f344 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Fri, 6 May 2016 02:52:59 +0530 Subject: [PATCH] ipcRenderer: fix crash with multiple listeners to sync message --- atom/browser/api/event.cc | 5 ++++- spec/api-ipc-spec.js | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/atom/browser/api/event.cc b/atom/browser/api/event.cc index f456cf2758bb..2554e4ad0dab 100644 --- a/atom/browser/api/event.cc +++ b/atom/browser/api/event.cc @@ -45,7 +45,10 @@ bool Event::SendReply(const base::string16& json) { return false; AtomViewHostMsg_Message_Sync::WriteReplyParams(message_, json); - return sender_->Send(message_); + bool success = sender_->Send(message_); + message_ = NULL; + sender_ = NULL; + return success; } // static diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index c98689287cea..d865be967844 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -200,6 +200,21 @@ describe('ipc module', function () { }) w.loadURL('file://' + path.join(fixtures, 'api', 'send-sync-message.html')) }) + + it('does not crash when reply is sent by multiple listeners', function (done) { + var w = new BrowserWindow({ + show: false + }) + ipcMain.on('send-sync-message', function (event) { + event.returnValue = null + }) + ipcMain.on('send-sync-message', function (event) { + event.returnValue = null + w.destroy() + done() + }) + w.loadURL('file://' + path.join(fixtures, 'api', 'send-sync-message.html')) + }) }) describe('remote listeners', function () {