Don't create thunk for task signal proc, call it directly.
This commit is contained in:
parent
f86aab84ba
commit
c44ab1f0fd
|
@ -42,7 +42,7 @@ file krnl386.exe
|
||||||
35 pascal16 GetTaskQueue(word) GetTaskQueue16
|
35 pascal16 GetTaskQueue(word) GetTaskQueue16
|
||||||
36 pascal GetCurrentTask() WIN16_GetCurrentTask
|
36 pascal GetCurrentTask() WIN16_GetCurrentTask
|
||||||
37 pascal GetCurrentPDB() GetCurrentPDB16
|
37 pascal GetCurrentPDB() GetCurrentPDB16
|
||||||
38 pascal SetTaskSignalProc(word segptr) THUNK_SetTaskSignalProc
|
38 pascal SetTaskSignalProc(word segptr) SetTaskSignalProc
|
||||||
41 pascal16 EnableDos() KERNEL_nop
|
41 pascal16 EnableDos() KERNEL_nop
|
||||||
42 pascal16 DisableDos() KERNEL_nop
|
42 pascal16 DisableDos() KERNEL_nop
|
||||||
45 pascal16 LoadModule(str ptr) LoadModule16
|
45 pascal16 LoadModule(str ptr) LoadModule16
|
||||||
|
@ -345,7 +345,7 @@ file krnl386.exe
|
||||||
438 pascal16 _CreateSysLevel(ptr long) _CreateSysLevel
|
438 pascal16 _CreateSysLevel(ptr long) _CreateSysLevel
|
||||||
439 pascal16 _EnterSysLevel(ptr) _EnterSysLevel
|
439 pascal16 _EnterSysLevel(ptr) _EnterSysLevel
|
||||||
440 pascal16 _LeaveSysLevel(ptr) _LeaveSysLevel
|
440 pascal16 _LeaveSysLevel(ptr) _LeaveSysLevel
|
||||||
441 pascal CreateThread16(ptr long segptr segptr long ptr) THUNK_CreateThread16
|
441 pascal CreateThread16(ptr long segptr segptr long ptr) CreateThread16
|
||||||
442 pascal VWin32_EventCreate() VWin32_EventCreate
|
442 pascal VWin32_EventCreate() VWin32_EventCreate
|
||||||
443 pascal VWin32_EventDestroy(long) VWin32_EventDestroy
|
443 pascal VWin32_EventDestroy(long) VWin32_EventDestroy
|
||||||
444 pascal16 Local32Info(ptr word) Local32Info16
|
444 pascal16 Local32Info(ptr word) Local32Info16
|
||||||
|
|
|
@ -81,7 +81,7 @@ typedef struct _TDB
|
||||||
HTASK16 hParent; /* 22 Selector of TDB of parent */
|
HTASK16 hParent; /* 22 Selector of TDB of parent */
|
||||||
WORD signal_flags; /* 24 Flags for signal handler */
|
WORD signal_flags; /* 24 Flags for signal handler */
|
||||||
FARPROC16 sighandler WINE_PACKED; /* 26 Signal handler */
|
FARPROC16 sighandler WINE_PACKED; /* 26 Signal handler */
|
||||||
USERSIGNALPROC userhandler WINE_PACKED; /* 2a USER signal handler */
|
FARPROC16 userhandler WINE_PACKED; /* 2a USER signal handler */
|
||||||
FARPROC16 discardhandler WINE_PACKED; /* 2e Handler for GlobalNotify() */
|
FARPROC16 discardhandler WINE_PACKED; /* 2e Handler for GlobalNotify() */
|
||||||
DWORD int0 WINE_PACKED; /* 32 int 0 (divide by 0) handler */
|
DWORD int0 WINE_PACKED; /* 32 int 0 (divide by 0) handler */
|
||||||
DWORD int2 WINE_PACKED; /* 36 int 2 (NMI) handler */
|
DWORD int2 WINE_PACKED; /* 36 int 2 (NMI) handler */
|
||||||
|
@ -152,6 +152,7 @@ extern HTASK16 TASK_GetNextTask( HTASK16 hTask );
|
||||||
extern void TASK_Reschedule(void);
|
extern void TASK_Reschedule(void);
|
||||||
extern void TASK_CallToStart(void);
|
extern void TASK_CallToStart(void);
|
||||||
extern void TASK_InstallTHHook( THHOOK *pNewThook );
|
extern void TASK_InstallTHHook( THHOOK *pNewThook );
|
||||||
|
extern void TASK_CallTaskSignalProc( UINT16 uCode, HANDLE16 hTaskOrModule );
|
||||||
|
|
||||||
extern HQUEUE16 WINAPI SetThreadQueue16( DWORD thread, HQUEUE16 hQueue );
|
extern HQUEUE16 WINAPI SetThreadQueue16( DWORD thread, HQUEUE16 hQueue );
|
||||||
extern HQUEUE16 WINAPI GetThreadQueue16( DWORD thread );
|
extern HQUEUE16 WINAPI GetThreadQueue16( DWORD thread );
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
Makefile
|
Makefile
|
||||||
|
task.glue.c
|
||||||
|
|
|
@ -18,6 +18,8 @@ C_SRCS = \
|
||||||
signal.c \
|
signal.c \
|
||||||
task.c
|
task.c
|
||||||
|
|
||||||
|
GLUE = task.c
|
||||||
|
|
||||||
all: $(MODULE).o
|
all: $(MODULE).o
|
||||||
|
|
||||||
@MAKE_RULES@
|
@MAKE_RULES@
|
||||||
|
|
|
@ -1290,15 +1290,10 @@ static BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL call_wep )
|
||||||
{
|
{
|
||||||
if (pModule->flags & NE_FFLAGS_LIBMODULE)
|
if (pModule->flags & NE_FFLAGS_LIBMODULE)
|
||||||
{
|
{
|
||||||
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
|
||||||
MODULE_CallWEP( hModule );
|
MODULE_CallWEP( hModule );
|
||||||
|
|
||||||
/* Free the objects owned by the DLL module */
|
/* Free the objects owned by the DLL module */
|
||||||
|
TASK_CallTaskSignalProc( USIG16_DLL_UNLOAD, hModule );
|
||||||
if (pTask && pTask->userhandler)
|
|
||||||
pTask->userhandler( hModule, USIG16_DLL_UNLOAD, 0,
|
|
||||||
pTask->hInstance, pTask->hQueue );
|
|
||||||
|
|
||||||
PROCESS_CallUserSignalProc( USIG_DLL_UNLOAD_WIN16, hModule );
|
PROCESS_CallUserSignalProc( USIG_DLL_UNLOAD_WIN16, hModule );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -613,9 +613,7 @@ static BOOL NE_InitDLL( TDB* pTask, NE_MODULE *pModule )
|
||||||
(pModule->flags & NE_FFLAGS_WIN32)) return TRUE; /*not a library*/
|
(pModule->flags & NE_FFLAGS_WIN32)) return TRUE; /*not a library*/
|
||||||
|
|
||||||
/* Call USER signal handler for Win3.1 compatibility. */
|
/* Call USER signal handler for Win3.1 compatibility. */
|
||||||
if (pTask && pTask->userhandler)
|
TASK_CallTaskSignalProc( USIG16_DLL_LOAD, pModule->self );
|
||||||
pTask->userhandler( pModule->self, USIG16_DLL_LOAD, 0,
|
|
||||||
pTask->hInstance, pTask->hQueue );
|
|
||||||
|
|
||||||
if (!pModule->cs) return TRUE; /* no initialization code */
|
if (!pModule->cs) return TRUE; /* no initialization code */
|
||||||
|
|
||||||
|
|
|
@ -467,10 +467,7 @@ void TASK_KillTask( HTASK16 hTask )
|
||||||
|
|
||||||
/* Perform USER cleanup */
|
/* Perform USER cleanup */
|
||||||
|
|
||||||
if (pTask->userhandler)
|
TASK_CallTaskSignalProc( USIG16_TERMINATION, hTask );
|
||||||
pTask->userhandler( hTask, USIG16_TERMINATION, 0,
|
|
||||||
pTask->hInstance, pTask->hQueue );
|
|
||||||
|
|
||||||
PROCESS_CallUserSignalProc( USIG_PROCESS_EXIT, 0 );
|
PROCESS_CallUserSignalProc( USIG_PROCESS_EXIT, 0 );
|
||||||
PROCESS_CallUserSignalProc( USIG_THREAD_EXIT, 0 ); /* FIXME */
|
PROCESS_CallUserSignalProc( USIG_THREAD_EXIT, 0 ); /* FIXME */
|
||||||
PROCESS_CallUserSignalProc( USIG_PROCESS_DESTROY, 0 );
|
PROCESS_CallUserSignalProc( USIG_PROCESS_DESTROY, 0 );
|
||||||
|
@ -1447,8 +1444,6 @@ BOOL16 WINAPI IsWinOldApTask16( HTASK16 hTask )
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetTaskSignalProc (KERNEL.38)
|
* SetTaskSignalProc (KERNEL.38)
|
||||||
*
|
|
||||||
* Real 16-bit interface is provided by the THUNK_SetTaskSignalProc.
|
|
||||||
*/
|
*/
|
||||||
FARPROC16 WINAPI SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc )
|
FARPROC16 WINAPI SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc )
|
||||||
{
|
{
|
||||||
|
@ -1457,11 +1452,26 @@ FARPROC16 WINAPI SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc )
|
||||||
|
|
||||||
if (!hTask) hTask = GetCurrentTask();
|
if (!hTask) hTask = GetCurrentTask();
|
||||||
if (!(pTask = (TDB *)GlobalLock16( hTask ))) return NULL;
|
if (!(pTask = (TDB *)GlobalLock16( hTask ))) return NULL;
|
||||||
oldProc = (FARPROC16)pTask->userhandler;
|
oldProc = pTask->userhandler;
|
||||||
pTask->userhandler = (USERSIGNALPROC)proc;
|
pTask->userhandler = proc;
|
||||||
return oldProc;
|
return oldProc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* TASK_CallTaskSignalProc
|
||||||
|
*/
|
||||||
|
/* ### start build ### */
|
||||||
|
extern WORD CALLBACK TASK_CallTo16_word_wwwww(FARPROC16,WORD,WORD,WORD,WORD,WORD);
|
||||||
|
/* ### stop build ### */
|
||||||
|
void TASK_CallTaskSignalProc( UINT16 uCode, HANDLE16 hTaskOrModule )
|
||||||
|
{
|
||||||
|
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
||||||
|
if ( !pTask || !pTask->userhandler ) return;
|
||||||
|
|
||||||
|
TASK_CallTo16_word_wwwww( pTask->userhandler,
|
||||||
|
hTaskOrModule, uCode, 0,
|
||||||
|
pTask->hInstance, pTask->hQueue );
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetSigHandler (KERNEL.140)
|
* SetSigHandler (KERNEL.140)
|
||||||
|
|
Loading…
Reference in New Issue