Commit 82f393dd authored by Alexandre Julliard's avatar Alexandre Julliard

ntdll: Move the LDT locking functions to the i386-specific code.

parent f78890e8
...@@ -2004,6 +2004,40 @@ int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh) ...@@ -2004,6 +2004,40 @@ int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh)
} }
/***********************************************************************
* locking for LDT routines
*/
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;
static void ldt_lock(void)
{
sigset_t sigset;
pthread_sigmask( 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_sigmask( SIG_SETMASK, &sigset, NULL );
}
else RtlLeaveCriticalSection( &ldt_section );
}
/********************************************************************** /**********************************************************************
* signal_alloc_thread * signal_alloc_thread
*/ */
...@@ -2146,6 +2180,7 @@ void signal_init_process(void) ...@@ -2146,6 +2180,7 @@ void signal_init_process(void)
if (sigaction( SIGUSR2, &sig_act, NULL ) == -1) goto error; if (sigaction( SIGUSR2, &sig_act, NULL ) == -1) goto error;
#endif #endif
wine_ldt_init_locking( ldt_lock, ldt_unlock );
return; return;
error: error:
......
...@@ -66,40 +66,6 @@ static RTL_BITMAP fls_bitmap; ...@@ -66,40 +66,6 @@ static RTL_BITMAP fls_bitmap;
static LIST_ENTRY tls_links; static LIST_ENTRY tls_links;
static int nb_threads = 1; static int nb_threads = 1;
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_sigmask( 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_sigmask( SIG_SETMASK, &sigset, NULL );
}
else RtlLeaveCriticalSection( &ldt_section );
}
/*********************************************************************** /***********************************************************************
* get_unicode_string * get_unicode_string
* *
...@@ -369,9 +335,6 @@ HANDLE thread_init(void) ...@@ -369,9 +335,6 @@ HANDLE thread_init(void)
wine_server_fd_to_handle( 2, GENERIC_WRITE|SYNCHRONIZE, OBJ_INHERIT, &params.hStdError ); wine_server_fd_to_handle( 2, GENERIC_WRITE|SYNCHRONIZE, OBJ_INHERIT, &params.hStdError );
} }
/* initialize LDT locking */
wine_ldt_init_locking( ldt_lock, ldt_unlock );
/* initialize time values in user_shared_data */ /* initialize time values in user_shared_data */
NtQuerySystemTime( &now ); NtQuerySystemTime( &now );
user_shared_data->SystemTime.LowPart = now.u.LowPart; user_shared_data->SystemTime.LowPart = now.u.LowPart;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment