ntdll: Move the LDT section to ntdll and make it an uninterruptible section.
This commit is contained in:
parent
3ccf501209
commit
21d631e270
|
@ -43,29 +43,6 @@
|
|||
|
||||
extern int __wine_set_signal_handler(unsigned, int (*)(unsigned));
|
||||
|
||||
static CRITICAL_SECTION ldt_section;
|
||||
static CRITICAL_SECTION_DEBUG critsect_debug =
|
||||
{
|
||||
0, 0, &ldt_section,
|
||||
{ &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
|
||||
0, 0, { (DWORD_PTR)(__FILE__ ": ldt_section") }
|
||||
};
|
||||
static CRITICAL_SECTION ldt_section = { &critsect_debug, -1, 0, 0, 0, 0 };
|
||||
|
||||
/***********************************************************************
|
||||
* locking for LDT routines
|
||||
*/
|
||||
static void ldt_lock(void)
|
||||
{
|
||||
RtlEnterCriticalSection( &ldt_section );
|
||||
}
|
||||
|
||||
static void ldt_unlock(void)
|
||||
{
|
||||
RtlLeaveCriticalSection( &ldt_section );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* KERNEL thread initialisation routine
|
||||
*/
|
||||
|
@ -141,9 +118,6 @@ static BOOL process_attach(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* initialize LDT locking */
|
||||
wine_ldt_init_locking( ldt_lock, ldt_unlock );
|
||||
|
||||
/* finish the process initialisation for console bits, if needed */
|
||||
__wine_set_signal_handler(SIGINT, CONSOLE_HandleCtrlC);
|
||||
|
||||
|
|
|
@ -63,6 +63,41 @@ static ULONG sigstack_zero_bits;
|
|||
|
||||
struct wine_pthread_functions pthread_functions = { NULL };
|
||||
|
||||
|
||||
static RTL_CRITICAL_SECTION ldt_section;
|
||||
static RTL_CRITICAL_SECTION_DEBUG critsect_debug =
|
||||
{
|
||||
0, 0, &ldt_section,
|
||||
{ &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
|
||||
0, 0, { (DWORD_PTR)(__FILE__ ": ldt_section") }
|
||||
};
|
||||
static RTL_CRITICAL_SECTION ldt_section = { &critsect_debug, -1, 0, 0, 0, 0 };
|
||||
static sigset_t ldt_sigset;
|
||||
|
||||
/***********************************************************************
|
||||
* locking for LDT routines
|
||||
*/
|
||||
static void ldt_lock(void)
|
||||
{
|
||||
sigset_t sigset;
|
||||
|
||||
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, &sigset );
|
||||
RtlEnterCriticalSection( &ldt_section );
|
||||
if (ldt_section.RecursionCount == 1) ldt_sigset = sigset;
|
||||
}
|
||||
|
||||
static void ldt_unlock(void)
|
||||
{
|
||||
if (ldt_section.RecursionCount == 1)
|
||||
{
|
||||
sigset_t sigset = ldt_sigset;
|
||||
RtlLeaveCriticalSection( &ldt_section );
|
||||
pthread_functions.sigprocmask( SIG_SETMASK, &sigset, NULL );
|
||||
}
|
||||
else RtlLeaveCriticalSection( &ldt_section );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* init_teb
|
||||
*/
|
||||
|
@ -285,6 +320,10 @@ HANDLE thread_init(void)
|
|||
wine_server_fd_to_handle( 1, GENERIC_WRITE|SYNCHRONIZE, OBJ_INHERIT, ¶ms.hStdOutput );
|
||||
wine_server_fd_to_handle( 2, GENERIC_WRITE|SYNCHRONIZE, OBJ_INHERIT, ¶ms.hStdError );
|
||||
}
|
||||
|
||||
/* initialize LDT locking */
|
||||
wine_ldt_init_locking( ldt_lock, ldt_unlock );
|
||||
|
||||
return exe_file;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue