Commit 54ced668c4930a345f2eb666be097d7eeb28fcec

Ozkan Sezer 2020-10-14T23:01:04

port from 2.0.12 to 2.0.13 / current SDL-hg repository. - video: VideoBootStrap->available() is gone. - thread: all important SDL_CreateThread internal data now put into struct SDL_Thread: changes to SDL_SYS_CreateThread().

diff --git a/src/thread/os2/SDL_systhread.c b/src/thread/os2/SDL_systhread.c
index 64d5d6f..909ae01 100644
--- a/src/thread/os2/SDL_systhread.c
+++ b/src/thread/os2/SDL_systhread.c
@@ -40,57 +40,39 @@
 #include <process.h>
 
 
-typedef struct ThreadStartParms {
-  void *args;
-  pfnSDL_CurrentEndThread pfnCurrentEndThread;
-} tThreadStartParms, *pThreadStartParms;
-
 static void RunThread(void *data)
 {
-  pThreadStartParms           pThreadParms = (pThreadStartParms) data;
-  pfnSDL_CurrentEndThread     pfnEndThread = pThreadParms->pfnCurrentEndThread;
-  void                        *args = pThreadParms->args;
-
-  SDL_free( pThreadParms );
+  SDL_Thread                  *thread = (SDL_Thread *) data;
+  pfnSDL_CurrentEndThread     pfnEndThread = (pfnSDL_CurrentEndThread) thread->endfunc;
 
   if ( ppSDLTLSData != NULL )
     *ppSDLTLSData = NULL;
 
-  SDL_RunThread( args );
+  SDL_RunThread( thread );
 
   if ( pfnEndThread != NULL )
     pfnEndThread();
 }
 
-
-
 int
-SDL_SYS_CreateThread(SDL_Thread * thread, void *args,
+SDL_SYS_CreateThread(SDL_Thread * thread,
                      pfnSDL_CurrentBeginThread pfnBeginThread,
                      pfnSDL_CurrentEndThread pfnEndThread)
 {
-  pThreadStartParms    pThreadParms = SDL_malloc( sizeof(tThreadStartParms) );
-
-  if ( pThreadParms == NULL )
-    return SDL_OutOfMemory();
-
   if (thread->stacksize == 0)
     thread->stacksize = 65536;
 
-  // Also save the real parameters we have to pass to thread function
-  pThreadParms->args = args;
-
   if (pfnBeginThread) {
     // Save the function which we will have to call to clear the RTL of calling app!
-    pThreadParms->pfnCurrentEndThread = pfnEndThread;
+    thread->endfunc = pfnEndThread;
     // Start the thread using the runtime library of calling app!
     thread->handle = (SYS_ThreadHandle)
-      pfnBeginThread( RunThread, NULL, thread->stacksize, pThreadParms );
+      pfnBeginThread( RunThread, NULL, thread->stacksize, thread );
   }
   else {
-    pThreadParms->pfnCurrentEndThread = _endthread;
+    thread->endfunc = _endthread;
     thread->handle = (SYS_ThreadHandle)
-      _beginthread( RunThread, NULL, thread->stacksize, pThreadParms );
+      _beginthread( RunThread, NULL, thread->stacksize, thread );
   }
 
   if ( thread->handle == -1 )
diff --git a/src/video/os2/SDL_os2video.c b/src/video/os2/SDL_os2video.c
index 9266152..662c67f 100644
--- a/src/video/os2/SDL_os2video.c
+++ b/src/video/os2/SDL_os2video.c
@@ -1599,7 +1599,7 @@ static int OS2_VideoInit(_THIS)
       stSDLDisplayMode.driverdata = pDisplayData;
     }
 
-    SDL_AddVideoDisplay( &stSDLDisplay );
+    SDL_AddVideoDisplay( &stSDLDisplay, SDL_FALSE );
   }
 
   OS2_InitMouse( _this, pVData->hab );
@@ -1705,7 +1705,7 @@ static SDL_VideoDevice *OS2_CreateDevice(int devindex)
   if (!device)
   {
     SDL_OutOfMemory();
-    return (0);
+    return NULL;
   }
 
   /* Set the function pointers */
@@ -1753,21 +1753,22 @@ static SDL_VideoDevice *OS2_CreateDevice(int devindex)
   return device;
 }
 
-
-// Output video system availability checking.
-
-static int OS2DIVE_Available(void)
+static SDL_VideoDevice *OS2DIVE_CreateDevice(int devindex)
 {
   VIDEOOUTPUTINFO      stVOInfo;
-
-  return voDive.QueryInfo( &stVOInfo );
+  if (!voDive.QueryInfo(&stVOInfo)) {
+      return NULL;
+  }
+  return OS2_CreateDevice(devindex);
 }
 
-static int OS2VMAN_Available(void)
+static SDL_VideoDevice *OS2VMAN_CreateDevice(int devindex)
 {
   VIDEOOUTPUTINFO      stVOInfo;
-
-  return voVMan.QueryInfo( &stVOInfo );
+  if (!voVMan.QueryInfo(&stVOInfo)) {
+      return NULL;
+  }
+  return OS2_CreateDevice(devindex);
 }
 
 
@@ -1777,13 +1778,13 @@ static int OS2VMAN_Available(void)
 VideoBootStrap OS2DIVE_bootstrap =
 {
   OS2DRIVER_NAME_DIVE, "OS/2 video driver",
-  OS2DIVE_Available, OS2_CreateDevice
+  OS2DIVE_CreateDevice
 };
 
 VideoBootStrap OS2VMAN_bootstrap =
 {
   OS2DRIVER_NAME_VMAN, "OS/2 video driver",
-  OS2VMAN_Available, OS2_CreateDevice
+  OS2VMAN_CreateDevice
 };
 
 #endif /* SDL_VIDEO_DRIVER_OS2 */