Parcourir la source

process: Don't use vfork() on Apple platforms.

They want you to use fork(), which is almost-identical in their implementation.
They mark vfork() usage with a big scary deprecation warning.
Ryan C. Gordon il y a 2 mois
Parent
commit
adb91fd3db
1 fichiers modifiés avec 8 ajouts et 2 suppressions
  1. 8 2
      src/process/posix/SDL_posixprocess.c

+ 8 - 2
src/process/posix/SDL_posixprocess.c

@@ -309,10 +309,16 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
     // Spawn the new process
     if (process->background) {
         int status = -1;
-        pid_t pid = vfork();
+        #ifdef SDL_PLATFORM_APPLE  // Apple has vfork marked as deprecated and (as of macOS 10.12) is almost identical to calling fork() anyhow.
+        const pid_t pid = fork();
+        const char *forkname = "fork";
+        #else
+        const pid_t pid = vfork();
+        const char *forkname = "vfork";
+        #endif
         switch (pid) {
         case -1:
-            SDL_SetError("vfork() failed: %s", strerror(errno));
+            SDL_SetError("%s() failed: %s", forkname, strerror(errno));
             goto posix_spawn_fail_all;
 
         case 0: