Module: wine Branch: master Commit: 82f393dda185a3f3356d930d3d42855c50718710 URL: http://source.winehq.org/git/wine.git/?a=commit;h=82f393dda185a3f3356d930d3d...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Dec 29 22:10:50 2009 +0100
ntdll: Move the LDT locking functions to the i386-specific code.
---
dlls/ntdll/signal_i386.c | 35 +++++++++++++++++++++++++++++++++++ dlls/ntdll/thread.c | 37 ------------------------------------- 2 files changed, 35 insertions(+), 37 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index a4bb95d..5a919b3 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -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 */ @@ -2146,6 +2180,7 @@ void signal_init_process(void) if (sigaction( SIGUSR2, &sig_act, NULL ) == -1) goto error; #endif
+ wine_ldt_init_locking( ldt_lock, ldt_unlock ); return;
error: diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index c370651..929d443 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -66,40 +66,6 @@ static RTL_BITMAP fls_bitmap; static LIST_ENTRY tls_links; 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 * @@ -369,9 +335,6 @@ HANDLE thread_init(void) wine_server_fd_to_handle( 2, GENERIC_WRITE|SYNCHRONIZE, OBJ_INHERIT, ¶ms.hStdError ); }
- /* initialize LDT locking */ - wine_ldt_init_locking( ldt_lock, ldt_unlock ); - /* initialize time values in user_shared_data */ NtQuerySystemTime( &now ); user_shared_data->SystemTime.LowPart = now.u.LowPart;