- ret = pthread_create(&tid, NULL, fb_sync_thread, NULL);
- if (ret != 0) {
- err("failed to create fb_sync_thread: %d\n", ret);
+ pret = mmap(NULL, THREAD_STACK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC,
+ MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0);
+ if (mmsp2.umem == MAP_FAILED) {
+ perror(PFX "mmap thread stack");
+ exit(1);
+ }
+ fb_sync_thread_futex = 1;
+ ret = g_clone(CLONE_VM | CLONE_FS | CLONE_FILES
+ | CLONE_SIGHAND | CLONE_THREAD,
+ (char *)pret + THREAD_STACK_SIZE, 0, 0, 0,
+ fb_sync_thread);
+ if (ret == 0 || ret == -1) {
+ perror(PFX "start fb thread");