mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-01-14 19:06:47 +01:00
07bf5dbacc
Change the default stack size to 8 MiB for 64-bit and 0.5 MiB for 32-bit. CEF's main thread needs at least a 1.5 MiB stack size in order to avoid stack overflow crashes. However, if this is set in the PE file then other threads get this size as well, leading to address-space exhaustion in 32-bit CEF. A new CefRunWinMainWithPreferredStackSize function uses fibers to switch the main thread to a 4 MiB stack (roughly the same effective size as the 64-bit build's 8 MiB stack) before running any other code. This change additionally moves the existing Windows-only functions CefSetOSModalLoop and CefEnableHighDPISupport from cef_app.h to cef_win.h.
63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
|
|
// reserved. Use of this source code is governed by a BSD-style license that
|
|
// can be found in the LICENSE file.
|
|
|
|
#include "include/base/cef_build.h"
|
|
|
|
#if defined(OS_WIN)
|
|
|
|
#include "include/base/cef_compiler_specific.h"
|
|
#include "include/base/cef_logging.h"
|
|
#include "include/cef_api_hash.h"
|
|
#include "include/internal/cef_win.h"
|
|
|
|
#if defined(ARCH_CPU_32_BITS)
|
|
NO_SANITIZE("cfi-icall")
|
|
int CefRunWinMainWithPreferredStackSize(wWinMainPtr wWinMain,
|
|
HINSTANCE hInstance,
|
|
LPWSTR lpCmdLine,
|
|
int nCmdShow) {
|
|
CHECK(wWinMain && hInstance);
|
|
|
|
const char* api_hash = cef_api_hash(0);
|
|
if (strcmp(api_hash, CEF_API_HASH_PLATFORM)) {
|
|
// The libcef API hash does not match the current header API hash.
|
|
NOTREACHED();
|
|
return 0;
|
|
}
|
|
|
|
return cef_run_winmain_with_preferred_stack_size(wWinMain, hInstance,
|
|
lpCmdLine, nCmdShow);
|
|
}
|
|
|
|
int CefRunMainWithPreferredStackSize(mainPtr main, int argc, char* argv[]) {
|
|
CHECK(main);
|
|
|
|
const char* api_hash = cef_api_hash(0);
|
|
if (strcmp(api_hash, CEF_API_HASH_PLATFORM)) {
|
|
// The libcef API hash does not match the current header API hash.
|
|
NOTREACHED();
|
|
return 0;
|
|
}
|
|
|
|
return cef_run_main_with_preferred_stack_size(main, argc, argv);
|
|
}
|
|
#endif // defined(ARCH_CPU_32_BITS)
|
|
|
|
NO_SANITIZE("cfi-icall") void CefEnableHighDPISupport() {
|
|
const char* api_hash = cef_api_hash(0);
|
|
if (strcmp(api_hash, CEF_API_HASH_PLATFORM)) {
|
|
// The libcef API hash does not match the current header API hash.
|
|
NOTREACHED();
|
|
return;
|
|
}
|
|
|
|
cef_enable_highdpi_support();
|
|
}
|
|
|
|
NO_SANITIZE("cfi-icall") void CefSetOSModalLoop(bool osModalLoop) {
|
|
cef_set_osmodal_loop(osModalLoop);
|
|
}
|
|
|
|
#endif // defined(OS_WIN)
|