Issue
I start my CEF application with the below code
void EmtpyThreadFunc()
{
// create one infinite loop thread to keep the process alive
while (true)
{
sleep(1000);
}
}
int main(int argc, char* argv[])
{
std::string name = "MyTestProject";
//std::thread sampleThread(EmtpyThreadFunc); // Enabling this causes the program to crash
// Parse command-line arguments.
auto commandLine = CefCommandLine::CreateCommandLine();
commandLine->InitFromArgv(argc, argv);
// Create a ClientApp of the correct type.
CefRefPtr<CefApp> app;
/* code to initialize app is removed */
CefMainArgs args(argc, argv);
// Execute the secondary process, if any.
int exitCode = CefExecuteProcess(args, app, NULL);
if (exitCode >= 0)
{
return exitCode;
}
// rest of codes
}
Enabling sampleThread
which does nothing but run an infinite while loop causes my CEF application to exit with SIGTRAP.
The stack is given below
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0 0x00007f207dc82b02 in operator() () at ../../services/service_manager/zygote/zygote_main_linux.cc:161
161 ../../services/service_manager/zygote/zygote_main_linux.cc: No such file or directory.
[Current thread is 1 (Thread 0x7f2075d31d80 (LWP 86988))]
(gdb) bt
#0 0x00007f207dc82b02 in operator() () at ../../services/service_manager/zygote/zygote_main_linux.cc:161
#1 EnterLayerOneSandbox () at ../../services/service_manager/zygote/zygote_main_linux.cc:161
#2 ZygoteMain () at ../../services/service_manager/zygote/zygote_main_linux.cc:222
#3 0x00007f207c06748c in RunZygote () at ../../content/app/content_main_runner_impl.cc:471
#4 0x00007f207c068791 in Run () at ../../content/app/content_main_runner_impl.cc:876
#5 0x00007f207dc8383a in MainRun () at ../../services/service_manager/embedder/main.cc:430
#6 0x00007f207dc83d0e in Main () at ../../services/service_manager/embedder/main.cc:477
#7 0x00007f207c066cf1 in content::ContentMain(content::ContentMainParams const&) () at ../../content/app/content_main.cc:19
#8 0x00007f207c29b7a0 in CefExecuteProcess () at ../../cef/libcef/browser/context.cc:220
#9 0x00007f2079f6b6da in cef_execute_process () at ../../cef/libcef_dll/libcef_dll.cc:78
#10 0x00005602a0a53984 in CefExecuteProcess(CefMainArgs const&, scoped_refptr<CefApp>, void*) ()
I'm using CEF 81.2.16 in Linux, saw almost the same issue with CEF 121 also. the following command line args are used.
--no-sandbox --x=0 --y=0 --width=1281 --height=801 --disable-pinch --disable-web-security --log-severity=disable --ignore-certificate-errors --showDevTools
Solution
The sandbox initialization requires that other threads are not spawned in pre-sandbox code. --no-sandbox
doesn't disable this requirement. You may not create threads before the call to CefExecuteProcess()
.
See services/service_manager/zygote/zygote_main_linux.cc:161
Answered By - 273K Answer Checked By - Pedro (WPSolving Volunteer)