зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1776210 - [macOS 13] Stack underflow crashes on Wifi Monitor thread on macOS 13 (Ventura) beta r=mac-reviewers,necko-reviewers,mstange,dragana
Use a larger stack size on macOS 13 for the Wifi monitor thread to accommodate Core WLAN code allocating 217K+ on the stack. Differential Revision: https://phabricator.services.mozilla.com/D152555
This commit is contained in:
Родитель
6506fc7cf1
Коммит
f43f562153
|
@ -19,6 +19,10 @@
|
|||
#include "mozilla/IntegerPrintfMacros.h"
|
||||
#include "mozilla/Services.h"
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
# include "nsCocoaFeatures.h"
|
||||
#endif
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
LazyLogModule gWifiMonitorLog("WifiMonitor");
|
||||
|
@ -50,6 +54,19 @@ nsWifiMonitor::Observe(nsISupports* subject, const char* topic,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
uint32_t nsWifiMonitor::GetMonitorThreadStackSize() {
|
||||
#ifdef XP_MACOSX
|
||||
// If this ASSERT fails, we've increased our default stack size and
|
||||
// may no longer need to special-case the stack size on macOS.
|
||||
MOZ_ASSERT(kMacOS13MonitorStackSize > nsIThreadManager::DEFAULT_STACK_SIZE);
|
||||
return nsCocoaFeatures::OnVenturaOrLater()
|
||||
? kMacOS13MonitorStackSize
|
||||
: nsIThreadManager::DEFAULT_STACK_SIZE;
|
||||
#else
|
||||
return nsIThreadManager::DEFAULT_STACK_SIZE;
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWifiMonitor::StartWatching(nsIWifiListener* aListener) {
|
||||
LOG(("nsWifiMonitor::StartWatching %p thread %p listener %p\n", this,
|
||||
mThread.get(), aListener));
|
||||
|
@ -75,7 +92,8 @@ NS_IMETHODIMP nsWifiMonitor::StartWatching(nsIWifiListener* aListener) {
|
|||
}
|
||||
|
||||
if (!mThread) {
|
||||
rv = NS_NewNamedThread("Wifi Monitor", getter_AddRefs(mThread), this);
|
||||
rv = NS_NewNamedThread("Wifi Monitor", getter_AddRefs(mThread), this,
|
||||
GetMonitorThreadStackSize());
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,12 @@ class nsWifiAccessPoint;
|
|||
|
||||
#define kDefaultWifiScanInterval 5 /* seconds */
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
// Use a larger stack size for the monitor thread on macOS 13+
|
||||
// to accommodate Core WLAN making large stack allocations.
|
||||
# define kMacOS13MonitorStackSize (512 * 1024)
|
||||
#endif
|
||||
|
||||
class nsWifiListener {
|
||||
public:
|
||||
explicit nsWifiListener(nsMainThreadPtrHolder<nsIWifiListener>* aListener) {
|
||||
|
@ -59,6 +65,8 @@ class nsWifiMonitor final : nsIRunnable, nsIWifiMonitor, nsIObserver {
|
|||
nsresult CallWifiListeners(const nsCOMArray<nsWifiAccessPoint>& aAccessPoints,
|
||||
bool aAccessPointsChanged);
|
||||
|
||||
uint32_t GetMonitorThreadStackSize();
|
||||
|
||||
mozilla::Atomic<bool> mKeepGoing;
|
||||
mozilla::Atomic<bool> mThreadComplete;
|
||||
nsCOMPtr<nsIThread> mThread; // only accessed on MainThread
|
||||
|
|
|
@ -24,6 +24,7 @@ class nsCocoaFeatures {
|
|||
static bool OnCatalinaOrLater();
|
||||
static bool OnBigSurOrLater();
|
||||
static bool OnMontereyOrLater();
|
||||
static bool OnVenturaOrLater();
|
||||
|
||||
static bool IsAtLeastVersion(int32_t aMajor, int32_t aMinor,
|
||||
int32_t aBugFix = 0);
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#define MACOS_VERSION_10_16_HEX 0x000A1000
|
||||
#define MACOS_VERSION_11_0_HEX 0x000B0000
|
||||
#define MACOS_VERSION_12_0_HEX 0x000C0000
|
||||
#define MACOS_VERSION_13_0_HEX 0x000D0000
|
||||
|
||||
#include "nsCocoaFeatures.h"
|
||||
#include "nsCocoaUtils.h"
|
||||
|
@ -189,6 +190,11 @@ bool Gecko_OnSierraExactly() { return nsCocoaFeatures::OnSierraExactly(); }
|
|||
return (macOSVersion() >= MACOS_VERSION_12_0_HEX);
|
||||
}
|
||||
|
||||
/* static */ bool nsCocoaFeatures::OnVenturaOrLater() {
|
||||
// See comments above regarding SYSTEM_VERSION_COMPAT.
|
||||
return (macOSVersion() >= MACOS_VERSION_13_0_HEX);
|
||||
}
|
||||
|
||||
/* static */ bool nsCocoaFeatures::IsAtLeastVersion(int32_t aMajor, int32_t aMinor,
|
||||
int32_t aBugFix) {
|
||||
return macOSVersion() >= GetVersion(aMajor, aMinor, aBugFix);
|
||||
|
|
Загрузка…
Ссылка в новой задаче