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().
This commit is contained in:
Ozkan Sezer 2020-10-14 23:01:04 +03:00
parent 5da796fe52
commit 54ced668c4
2 changed files with 22 additions and 39 deletions

View File

@ -40,57 +40,39 @@
#include <process.h> #include <process.h>
typedef struct ThreadStartParms {
void *args;
pfnSDL_CurrentEndThread pfnCurrentEndThread;
} tThreadStartParms, *pThreadStartParms;
static void RunThread(void *data) static void RunThread(void *data)
{ {
pThreadStartParms pThreadParms = (pThreadStartParms) data; SDL_Thread *thread = (SDL_Thread *) data;
pfnSDL_CurrentEndThread pfnEndThread = pThreadParms->pfnCurrentEndThread; pfnSDL_CurrentEndThread pfnEndThread = (pfnSDL_CurrentEndThread) thread->endfunc;
void *args = pThreadParms->args;
SDL_free( pThreadParms );
if ( ppSDLTLSData != NULL ) if ( ppSDLTLSData != NULL )
*ppSDLTLSData = NULL; *ppSDLTLSData = NULL;
SDL_RunThread( args ); SDL_RunThread( thread );
if ( pfnEndThread != NULL ) if ( pfnEndThread != NULL )
pfnEndThread(); pfnEndThread();
} }
int int
SDL_SYS_CreateThread(SDL_Thread * thread, void *args, SDL_SYS_CreateThread(SDL_Thread * thread,
pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentBeginThread pfnBeginThread,
pfnSDL_CurrentEndThread pfnEndThread) pfnSDL_CurrentEndThread pfnEndThread)
{ {
pThreadStartParms pThreadParms = SDL_malloc( sizeof(tThreadStartParms) );
if ( pThreadParms == NULL )
return SDL_OutOfMemory();
if (thread->stacksize == 0) if (thread->stacksize == 0)
thread->stacksize = 65536; thread->stacksize = 65536;
// Also save the real parameters we have to pass to thread function
pThreadParms->args = args;
if (pfnBeginThread) { if (pfnBeginThread) {
// Save the function which we will have to call to clear the RTL of calling app! // 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! // Start the thread using the runtime library of calling app!
thread->handle = (SYS_ThreadHandle) thread->handle = (SYS_ThreadHandle)
pfnBeginThread( RunThread, NULL, thread->stacksize, pThreadParms ); pfnBeginThread( RunThread, NULL, thread->stacksize, thread );
} }
else { else {
pThreadParms->pfnCurrentEndThread = _endthread; thread->endfunc = _endthread;
thread->handle = (SYS_ThreadHandle) thread->handle = (SYS_ThreadHandle)
_beginthread( RunThread, NULL, thread->stacksize, pThreadParms ); _beginthread( RunThread, NULL, thread->stacksize, thread );
} }
if ( thread->handle == -1 ) if ( thread->handle == -1 )

View File

@ -1599,7 +1599,7 @@ static int OS2_VideoInit(_THIS)
stSDLDisplayMode.driverdata = pDisplayData; stSDLDisplayMode.driverdata = pDisplayData;
} }
SDL_AddVideoDisplay( &stSDLDisplay ); SDL_AddVideoDisplay( &stSDLDisplay, SDL_FALSE );
} }
OS2_InitMouse( _this, pVData->hab ); OS2_InitMouse( _this, pVData->hab );
@ -1705,7 +1705,7 @@ static SDL_VideoDevice *OS2_CreateDevice(int devindex)
if (!device) if (!device)
{ {
SDL_OutOfMemory(); SDL_OutOfMemory();
return (0); return NULL;
} }
/* Set the function pointers */ /* Set the function pointers */
@ -1753,21 +1753,22 @@ static SDL_VideoDevice *OS2_CreateDevice(int devindex)
return device; return device;
} }
static SDL_VideoDevice *OS2DIVE_CreateDevice(int devindex)
// Output video system availability checking.
static int OS2DIVE_Available(void)
{ {
VIDEOOUTPUTINFO stVOInfo; VIDEOOUTPUTINFO stVOInfo;
if (!voDive.QueryInfo(&stVOInfo)) {
return voDive.QueryInfo( &stVOInfo ); return NULL;
}
return OS2_CreateDevice(devindex);
} }
static int OS2VMAN_Available(void) static SDL_VideoDevice *OS2VMAN_CreateDevice(int devindex)
{ {
VIDEOOUTPUTINFO stVOInfo; VIDEOOUTPUTINFO stVOInfo;
if (!voVMan.QueryInfo(&stVOInfo)) {
return voVMan.QueryInfo( &stVOInfo ); return NULL;
}
return OS2_CreateDevice(devindex);
} }
@ -1777,13 +1778,13 @@ static int OS2VMAN_Available(void)
VideoBootStrap OS2DIVE_bootstrap = VideoBootStrap OS2DIVE_bootstrap =
{ {
OS2DRIVER_NAME_DIVE, "OS/2 video driver", OS2DRIVER_NAME_DIVE, "OS/2 video driver",
OS2DIVE_Available, OS2_CreateDevice OS2DIVE_CreateDevice
}; };
VideoBootStrap OS2VMAN_bootstrap = VideoBootStrap OS2VMAN_bootstrap =
{ {
OS2DRIVER_NAME_VMAN, "OS/2 video driver", OS2DRIVER_NAME_VMAN, "OS/2 video driver",
OS2VMAN_Available, OS2_CreateDevice OS2VMAN_CreateDevice
}; };
#endif /* SDL_VIDEO_DRIVER_OS2 */ #endif /* SDL_VIDEO_DRIVER_OS2 */