mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
windows: Configure stack size for executables (fixes issue #3250)
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.
This commit is contained in:
@@ -4,9 +4,15 @@
|
||||
//
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
#include "include/base/cef_build.h"
|
||||
#include "include/cef_api_hash.h"
|
||||
#include "include/cef_version.h"
|
||||
|
||||
#if defined(OS_WIN)
|
||||
#include "include/internal/cef_win.h"
|
||||
#endif
|
||||
|
||||
CEF_EXPORT int cef_version_info(int entry) {
|
||||
switch (entry) {
|
||||
case 0:
|
||||
@@ -42,3 +48,31 @@ CEF_EXPORT const char* cef_api_hash(int entry) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(OS_WIN)
|
||||
|
||||
#if defined(ARCH_CPU_32_BITS)
|
||||
CEF_EXPORT int cef_run_winmain_with_preferred_stack_size(wWinMainPtr wWinMain,
|
||||
HINSTANCE hInstance,
|
||||
LPWSTR lpCmdLine,
|
||||
int nCmdShow) {
|
||||
return CefRunWinMainWithPreferredStackSize(wWinMain, hInstance, lpCmdLine,
|
||||
nCmdShow);
|
||||
}
|
||||
|
||||
CEF_EXPORT int cef_run_main_with_preferred_stack_size(mainPtr main,
|
||||
int argc,
|
||||
char* argv[]) {
|
||||
return CefRunMainWithPreferredStackSize(main, argc, argv);
|
||||
}
|
||||
#endif // defined(ARCH_CPU_32_BITS)
|
||||
|
||||
CEF_EXPORT void cef_enable_highdpi_support() {
|
||||
CefEnableHighDPISupport();
|
||||
}
|
||||
|
||||
CEF_EXPORT void cef_set_osmodal_loop(int osModalLoop) {
|
||||
CefSetOSModalLoop(osModalLoop ? true : false);
|
||||
}
|
||||
|
||||
#endif // defined(OS_WIN)
|
||||
|
Reference in New Issue
Block a user