summaryrefslogtreecommitdiffstats
path: root/netwerk/protocol/http/nsHttpChannel.cpp
diff options
context:
space:
mode:
authorjanekptacijarabaci <janekptacijarabaci@seznam.cz>2017-11-27 07:57:36 +0100
committerwolfbeast <mcwerewolf@gmail.com>2018-02-18 10:30:15 +0100
commit83c4b04a70d2319d4c292e7aa0c8872e7c1cd7fa (patch)
tree0d81568c659cc0949e6732c198fe2ab42e490b0e /netwerk/protocol/http/nsHttpChannel.cpp
parent140e3f5c03938fa9d6a9524c3b859a95d3a540ee (diff)
downloadUXP-83c4b04a70d2319d4c292e7aa0c8872e7c1cd7fa.tar
UXP-83c4b04a70d2319d4c292e7aa0c8872e7c1cd7fa.tar.gz
UXP-83c4b04a70d2319d4c292e7aa0c8872e7c1cd7fa.tar.lz
UXP-83c4b04a70d2319d4c292e7aa0c8872e7c1cd7fa.tar.xz
UXP-83c4b04a70d2319d4c292e7aa0c8872e7c1cd7fa.zip
Two (and more) extensions together - http resume - basilisk crashes
Diffstat (limited to 'netwerk/protocol/http/nsHttpChannel.cpp')
-rw-r--r--netwerk/protocol/http/nsHttpChannel.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
index 0e570e8cb..1c9093495 100644
--- a/netwerk/protocol/http/nsHttpChannel.cpp
+++ b/netwerk/protocol/http/nsHttpChannel.cpp
@@ -8335,9 +8335,31 @@ nsHttpChannel::ResumeInternal()
LOG(("nsHttpChannel::ResumeInternal [this=%p]\n", this));
if (--mSuspendCount == 0 && mCallOnResume) {
- nsresult rv = AsyncCall(mCallOnResume);
+ // Resume the interrupted procedure first, then resume
+ // the pump to continue process the input stream.
+ RefPtr<nsRunnableMethod<nsHttpChannel>> callOnResume=
+ NewRunnableMethod(this, mCallOnResume);
+ // Should not resume pump that created after resumption.
+ RefPtr<nsInputStreamPump> transactionPump = mTransactionPump;
+ RefPtr<nsInputStreamPump> cachePump = mCachePump;
+
+ nsresult rv =
+ NS_DispatchToCurrentThread(NS_NewRunnableFunction(
+ [callOnResume, transactionPump, cachePump]() {
+ callOnResume->Run();
+
+ if (transactionPump) {
+ transactionPump->Resume();
+ }
+
+ if (cachePump) {
+ cachePump->Resume();
+ }
+ })
+ );
mCallOnResume = nullptr;
NS_ENSURE_SUCCESS(rv, rv);
+ return rv;
}
nsresult rvTransaction = NS_OK;