summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-07-16 18:59:14 +0200
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-07-16 18:59:14 +0200
commit68edb452772995d29857a13172ea2a776346d757 (patch)
tree4433953f8f699baa22340714eaf286b11da8ca45
parente1b502ccf4386505235fa55ec14a773a933f2a87 (diff)
downloaduxp-68edb452772995d29857a13172ea2a776346d757.tar.gz
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 6e374ce313..d205e7e8a1 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;