summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-07-16 18:59:14 +0200
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-07-22 12:12:07 +0200
commit66e0de95f068468098e7dd5cc95ee76c96413b1d (patch)
tree3bddce3634ea9829e628df599aa1085f7c841153
parent8799198822e5f604d2d80824611fa37cdf72d7cf (diff)
downloadUXP-66e0de95f068468098e7dd5cc95ee76c96413b1d.tar
UXP-66e0de95f068468098e7dd5cc95ee76c96413b1d.tar.gz
UXP-66e0de95f068468098e7dd5cc95ee76c96413b1d.tar.lz
UXP-66e0de95f068468098e7dd5cc95ee76c96413b1d.tar.xz
UXP-66e0de95f068468098e7dd5cc95ee76c96413b1d.zip
Don't access gNeckoChild if not on main thread. (DiD)
This patch also makes UDPSocketChild::Bind return NS_ERROR_NOT_AVAILABLE when mBackgroundManager is null.
-rw-r--r--dom/network/UDPSocketChild.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/dom/network/UDPSocketChild.cpp b/dom/network/UDPSocketChild.cpp
index 6e374ce31..d205e7e8a 100644
--- a/dom/network/UDPSocketChild.cpp
+++ b/dom/network/UDPSocketChild.cpp
@@ -172,19 +172,28 @@ UDPSocketChild::Bind(nsIUDPSocketInternal* aSocket,
NS_ENSURE_ARG(aSocket);
- mSocket = aSocket;
- AddIPDLReference();
+ if (NS_IsMainThread()) {
+ if (!gNeckoChild->SendPUDPSocketConstructor(
+ this, IPC::Principal(aPrincipal), mFilterName)) {
+ return NS_ERROR_FAILURE;
+ }
+ } else {
+ if (!mBackgroundManager) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
- if (mBackgroundManager) {
// If we want to support a passed-in principal here we'd need to
// convert it to a PrincipalInfo
MOZ_ASSERT(!aPrincipal);
- mBackgroundManager->SendPUDPSocketConstructor(this, void_t(), mFilterName);
- } else {
- gNeckoChild->SendPUDPSocketConstructor(this, IPC::Principal(aPrincipal),
- mFilterName);
+ if (!mBackgroundManager->SendPUDPSocketConstructor(
+ this, void_t(), mFilterName)) {
+ return NS_ERROR_FAILURE;
+ }
}
+ mSocket = aSocket;
+ AddIPDLReference();
+
SendBind(UDPAddressInfo(nsCString(aHost), aPort), aAddressReuse, aLoopback,
recvBufferSize, sendBufferSize);
return NS_OK;