Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
4dba172e
Commit
4dba172e
authored
Nov 06, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added server_abort_thread to replace SYSDEPS_AbortThread.
Removed no longer used SIGNAL_Block and SIGNAL_Reset. Moved some internal ntdll definitions to ntdll_misc.h.
parent
8574412e
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
48 additions
and
171 deletions
+48
-171
ntdll_misc.h
dlls/ntdll/ntdll_misc.h
+8
-2
server.c
dlls/ntdll/server.c
+26
-10
signal_i386.c
dlls/ntdll/signal_i386.c
+3
-43
signal_powerpc.c
dlls/ntdll/signal_powerpc.c
+1
-42
signal_sparc.c
dlls/ntdll/signal_sparc.c
+1
-38
sync.c
dlls/ntdll/sync.c
+1
-1
sysdeps.c
dlls/ntdll/sysdeps.c
+0
-15
thread.c
dlls/ntdll/thread.c
+8
-8
thread.h
include/thread.h
+0
-8
server.h
include/wine/server.h
+0
-4
No files found.
dlls/ntdll/ntdll_misc.h
View file @
4dba172e
...
...
@@ -47,10 +47,16 @@ extern NTSTATUS NTDLL_wait_for_multiple_objects( UINT count, const HANDLE *handl
const
LARGE_INTEGER
*
timeout
);
/* init routines */
extern
void
wine_server_init_process
(
void
);
extern
void
wine_server_init_thread
(
void
);
extern
BOOL
SIGNAL_Init
(
void
);
extern
void
thread_init
(
void
);
/* server support */
extern
void
server_init_process
(
void
);
extern
void
server_init_thread
(
void
);
extern
void
DECLSPEC_NORETURN
server_protocol_error
(
const
char
*
err
,
...
);
extern
void
DECLSPEC_NORETURN
server_protocol_perror
(
const
char
*
err
);
extern
void
DECLSPEC_NORETURN
server_abort_thread
(
int
status
);
/* module handling */
extern
BOOL
MODULE_GetSystemDirectory
(
UNICODE_STRING
*
sysdir
);
extern
void
RELAY_InitDebugLists
(
void
);
...
...
dlls/ntdll/server.c
View file @
4dba172e
...
...
@@ -53,6 +53,7 @@
#include "ntstatus.h"
#include "thread.h"
#include "wine/library.h"
#include "wine/pthread.h"
#include "wine/server.h"
#include "winerror.h"
#include "ntdll_misc.h"
...
...
@@ -110,6 +111,21 @@ static void fatal_perror( const char *err, ... )
exit
(
1
);
}
/***********************************************************************
* server_abort_thread
*/
void
server_abort_thread
(
int
status
)
{
sigprocmask
(
SIG_BLOCK
,
&
block_set
,
NULL
);
close
(
NtCurrentTeb
()
->
wait_fd
[
0
]
);
close
(
NtCurrentTeb
()
->
wait_fd
[
1
]
);
close
(
NtCurrentTeb
()
->
reply_fd
);
close
(
NtCurrentTeb
()
->
request_fd
);
wine_pthread_abort_thread
(
status
);
}
/***********************************************************************
* server_protocol_error
*/
...
...
@@ -121,7 +137,7 @@ void server_protocol_error( const char *err, ... )
fprintf
(
stderr
,
"wine client error:%lx: "
,
GetCurrentThreadId
()
);
vfprintf
(
stderr
,
err
,
args
);
va_end
(
args
);
SYSDEPS_AbortT
hread
(
1
);
server_abort_t
hread
(
1
);
}
...
...
@@ -132,7 +148,7 @@ void server_protocol_perror( const char *err )
{
fprintf
(
stderr
,
"wine client error:%lx: "
,
GetCurrentThreadId
()
);
perror
(
err
);
SYSDEPS_AbortT
hread
(
1
);
server_abort_t
hread
(
1
);
}
...
...
@@ -167,7 +183,7 @@ static void send_request( const struct __server_request_info *req )
}
if
(
ret
>=
0
)
server_protocol_error
(
"partial write %d
\n
"
,
ret
);
if
(
errno
==
EPIPE
)
SYSDEPS_AbortT
hread
(
0
);
if
(
errno
==
EPIPE
)
server_abort_t
hread
(
0
);
server_protocol_perror
(
"sendmsg"
);
}
...
...
@@ -195,7 +211,7 @@ static void read_reply_data( void *buffer, size_t size )
server_protocol_perror
(
"read"
);
}
/* the server closed the connection; time to die... */
SYSDEPS_AbortT
hread
(
0
);
server_abort_t
hread
(
0
);
}
...
...
@@ -274,7 +290,7 @@ void wine_server_send_fd( int fd )
if
((
ret
=
sendmsg
(
fd_socket
,
&
msghdr
,
0
))
==
sizeof
(
data
))
return
;
if
(
ret
>=
0
)
server_protocol_error
(
"partial write %d
\n
"
,
ret
);
if
(
errno
==
EINTR
)
continue
;
if
(
errno
==
EPIPE
)
SYSDEPS_AbortT
hread
(
0
);
if
(
errno
==
EPIPE
)
server_abort_t
hread
(
0
);
server_protocol_perror
(
"sendmsg"
);
}
}
...
...
@@ -333,7 +349,7 @@ static int receive_fd( obj_handle_t *handle )
server_protocol_perror
(
"recvmsg"
);
}
/* the server closed the connection; time to die... */
SYSDEPS_AbortT
hread
(
0
);
server_abort_t
hread
(
0
);
}
...
...
@@ -600,11 +616,11 @@ static int server_connect( const char *oldcwd, const char *serverdir )
/***********************************************************************
*
wine_
server_init_process
* server_init_process
*
* Start the server and create the initial socket pair.
*/
void
wine_
server_init_process
(
void
)
void
server_init_process
(
void
)
{
int
size
;
char
*
oldcwd
;
...
...
@@ -646,11 +662,11 @@ void wine_server_init_process(void)
/***********************************************************************
*
wine_
server_init_thread
* server_init_thread
*
* Send an init thread request. Return 0 if OK.
*/
void
wine_
server_init_thread
(
void
)
void
server_init_thread
(
void
)
{
TEB
*
teb
=
NtCurrentTeb
();
int
version
,
ret
;
...
...
dlls/ntdll/signal_i386.c
View file @
4dba172e
...
...
@@ -663,7 +663,7 @@ static EXCEPTION_RECORD *setup_exception( SIGCONTEXT *sigcontext, raise_func fun
ERR
(
"nested exception on signal stack in thread %04lx eip %08lx esp %08lx stack %p-%p
\n
"
,
GetCurrentThreadId
(),
EIP_sig
(
sigcontext
),
ESP_sig
(
sigcontext
),
NtCurrentTeb
()
->
Tib
.
StackLimit
,
NtCurrentTeb
()
->
Tib
.
StackBase
);
SYSDEPS_AbortT
hread
(
1
);
server_abort_t
hread
(
1
);
}
if
((
char
*
)(
stack
-
1
)
<
(
char
*
)
NtCurrentTeb
()
->
Tib
.
StackLimit
+
4096
||
...
...
@@ -675,7 +675,7 @@ static EXCEPTION_RECORD *setup_exception( SIGCONTEXT *sigcontext, raise_func fun
ERR
(
"stack overflow %u bytes in thread %04lx eip %08lx esp %08lx stack %p-%p
\n
"
,
diff
,
GetCurrentThreadId
(),
EIP_sig
(
sigcontext
),
ESP_sig
(
sigcontext
),
NtCurrentTeb
()
->
Tib
.
StackLimit
,
NtCurrentTeb
()
->
Tib
.
StackBase
);
SYSDEPS_AbortT
hread
(
1
);
server_abort_t
hread
(
1
);
}
else
WARN
(
"exception outside of stack limits in thread %04lx eip %08lx esp %08lx stack %p-%p
\n
"
,
GetCurrentThreadId
(),
EIP_sig
(
sigcontext
),
ESP_sig
(
sigcontext
),
...
...
@@ -1057,7 +1057,7 @@ static HANDLER_DEF(abrt_handler)
static
HANDLER_DEF
(
term_handler
)
{
init_handler
(
HANDLER_CONTEXT
);
SYSDEPS_AbortT
hread
(
0
);
server_abort_t
hread
(
0
);
}
...
...
@@ -1178,46 +1178,6 @@ BOOL SIGNAL_Init(void)
}
/**********************************************************************
* SIGNAL_Block
*
* Block the async signals.
*/
void
SIGNAL_Block
(
void
)
{
sigset_t
block_set
;
sigemptyset
(
&
block_set
);
sigaddset
(
&
block_set
,
SIGIO
);
sigaddset
(
&
block_set
,
SIGHUP
);
sigaddset
(
&
block_set
,
SIGUSR1
);
sigaddset
(
&
block_set
,
SIGUSR2
);
sigprocmask
(
SIG_BLOCK
,
&
block_set
,
NULL
);
}
/**********************************************************************
* SIGNAL_Reset
*
* Restore the default handlers.
*/
void
SIGNAL_Reset
(
void
)
{
signal
(
SIGINT
,
SIG_DFL
);
signal
(
SIGFPE
,
SIG_DFL
);
signal
(
SIGSEGV
,
SIG_DFL
);
signal
(
SIGILL
,
SIG_DFL
);
signal
(
SIGABRT
,
SIG_DFL
);
signal
(
SIGTERM
,
SIG_DFL
);
#ifdef SIGBUS
signal
(
SIGBUS
,
SIG_DFL
);
#endif
#ifdef SIGTRAP
signal
(
SIGTRAP
,
SIG_DFL
);
#endif
}
#ifdef __HAVE_VM86
/**********************************************************************
* __wine_enter_vm86 (NTDLL.@)
...
...
dlls/ntdll/signal_powerpc.c
View file @
4dba172e
...
...
@@ -572,7 +572,7 @@ static HANDLER_DEF(abrt_handler)
*/
static
HANDLER_DEF
(
term_handler
)
{
SYSDEPS_AbortT
hread
(
0
);
server_abort_t
hread
(
0
);
}
...
...
@@ -650,47 +650,6 @@ BOOL SIGNAL_Init(void)
/**********************************************************************
* SIGNAL_Block
*
* Block the async signals.
*/
void
SIGNAL_Block
(
void
)
{
sigset_t
block_set
;
sigemptyset
(
&
block_set
);
sigaddset
(
&
block_set
,
SIGALRM
);
sigaddset
(
&
block_set
,
SIGIO
);
sigaddset
(
&
block_set
,
SIGHUP
);
sigaddset
(
&
block_set
,
SIGUSR1
);
sigaddset
(
&
block_set
,
SIGUSR2
);
sigprocmask
(
SIG_BLOCK
,
&
block_set
,
NULL
);
}
/**********************************************************************
* SIGNAL_Reset
*
* Restore the default handlers.
*/
void
SIGNAL_Reset
(
void
)
{
signal
(
SIGINT
,
SIG_DFL
);
signal
(
SIGFPE
,
SIG_DFL
);
signal
(
SIGSEGV
,
SIG_DFL
);
signal
(
SIGILL
,
SIG_DFL
);
signal
(
SIGABRT
,
SIG_DFL
);
signal
(
SIGTERM
,
SIG_DFL
);
#ifdef SIGBUS
signal
(
SIGBUS
,
SIG_DFL
);
#endif
#ifdef SIGTRAP
signal
(
SIGTRAP
,
SIG_DFL
);
#endif
}
/**********************************************************************
* __wine_enter_vm86 (NTDLL.@)
*/
void
__wine_enter_vm86
(
CONTEXT
*
context
)
...
...
dlls/ntdll/signal_sparc.c
View file @
4dba172e
...
...
@@ -376,7 +376,7 @@ static HANDLER_DEF(abrt_handler)
*/
static
HANDLER_DEF
(
term_handler
)
{
SYSDEPS_AbortT
hread
(
0
);
server_abort_t
hread
(
0
);
}
...
...
@@ -448,43 +448,6 @@ BOOL SIGNAL_Init(void)
/**********************************************************************
* SIGNAL_Block
*
* Block the async signals.
*/
void
SIGNAL_Block
(
void
)
{
sigset_t
block_set
;
sigemptyset
(
&
block_set
);
sigaddset
(
&
block_set
,
SIGALRM
);
sigaddset
(
&
block_set
,
SIGIO
);
sigaddset
(
&
block_set
,
SIGHUP
);
sigaddset
(
&
block_set
,
SIGUSR1
);
sigaddset
(
&
block_set
,
SIGUSR2
);
sigprocmask
(
SIG_BLOCK
,
&
block_set
,
NULL
);
}
/**********************************************************************
* SIGNAL_Reset
*
* Restore the default handlers.
*/
void
SIGNAL_Reset
(
void
)
{
signal
(
SIGINT
,
SIG_DFL
);
signal
(
SIGFPE
,
SIG_DFL
);
signal
(
SIGSEGV
,
SIG_DFL
);
signal
(
SIGILL
,
SIG_DFL
);
signal
(
SIGBUS
,
SIG_DFL
);
signal
(
SIGTRAP
,
SIG_DFL
);
signal
(
SIGABRT
,
SIG_DFL
);
signal
(
SIGTERM
,
SIG_DFL
);
}
/**********************************************************************
* __wine_enter_vm86
*/
void
__wine_enter_vm86
(
CONTEXT
*
context
)
...
...
dlls/ntdll/sync.c
View file @
4dba172e
...
...
@@ -496,7 +496,7 @@ static int wait_reply( void *cookie )
server_protocol_perror
(
"wakeup read"
);
}
/* the server closed the connection; time to die... */
SYSDEPS_AbortT
hread
(
0
);
server_abort_t
hread
(
0
);
}
...
...
dlls/ntdll/sysdeps.c
View file @
4dba172e
...
...
@@ -87,21 +87,6 @@ void SYSDEPS_SetCurThread( TEB *teb )
/***********************************************************************
* SYSDEPS_AbortThread
*
* Same as SYSDEPS_ExitThread, but must not do anything that requires a server call.
*/
void
SYSDEPS_AbortThread
(
int
status
)
{
SIGNAL_Block
();
close
(
NtCurrentTeb
()
->
wait_fd
[
0
]
);
close
(
NtCurrentTeb
()
->
wait_fd
[
1
]
);
close
(
NtCurrentTeb
()
->
reply_fd
);
close
(
NtCurrentTeb
()
->
request_fd
);
wine_pthread_abort_thread
(
status
);
}
/***********************************************************************
* SYSDEPS_GetUnixTid
*
* Get the Unix tid of the current thread.
...
...
dlls/ntdll/thread.c
View file @
4dba172e
...
...
@@ -42,7 +42,6 @@ static PEB_LDR_DATA ldr;
static
RTL_USER_PROCESS_PARAMETERS
params
;
/* default parameters if no parent */
static
RTL_BITMAP
tls_bitmap
;
static
LIST_ENTRY
tls_links
;
static
struct
debug_info
info
;
/* debug info for initial thread */
/***********************************************************************
...
...
@@ -96,9 +95,10 @@ void thread_init(void)
TEB
*
teb
;
void
*
addr
;
ULONG
size
;
static
struct
debug_info
debug_info
;
/* debug info for initial thread */
info
.
str_pos
=
info
.
strings
;
info
.
out_pos
=
info
.
output
;
debug_info
.
str_pos
=
debug_
info
.
strings
;
debug_info
.
out_pos
=
debug_
info
.
output
;
peb
.
ProcessParameters
=
&
params
;
peb
.
TlsBitmap
=
&
tls_bitmap
;
...
...
@@ -115,14 +115,14 @@ void thread_init(void)
teb
->
reply_fd
=
-
1
;
teb
->
wait_fd
[
0
]
=
-
1
;
teb
->
wait_fd
[
1
]
=
-
1
;
teb
->
debug_info
=
&
info
;
teb
->
debug_info
=
&
debug_
info
;
InsertHeadList
(
&
tls_links
,
&
teb
->
TlsLinks
);
SYSDEPS_SetCurThread
(
teb
);
/* setup the server connection */
wine_
server_init_process
();
wine_
server_init_thread
();
server_init_process
();
server_init_thread
();
/* create a memory view for the TEB */
NtAllocateVirtualMemory
(
GetCurrentProcess
(),
&
addr
,
teb
,
&
size
,
...
...
@@ -155,7 +155,7 @@ static void start_thread( struct wine_pthread_thread_info *info )
SYSDEPS_SetCurThread
(
teb
);
SIGNAL_Init
();
wine_
server_init_thread
();
server_init_thread
();
/* allocate a memory view for the stack */
size
=
info
->
stack_size
;
...
...
@@ -359,7 +359,7 @@ NTSTATUS WINAPI NtTerminateThread( HANDLE handle, LONG exit_code )
if
(
self
)
{
if
(
last
)
exit
(
exit_code
);
else
SYSDEPS_AbortT
hread
(
exit_code
);
else
server_abort_t
hread
(
exit_code
);
}
return
ret
;
}
...
...
include/thread.h
View file @
4dba172e
...
...
@@ -144,15 +144,7 @@ typedef struct _TEB
extern
TEB
*
THREAD_InitStack
(
TEB
*
teb
,
DWORD
stack_size
);
/* scheduler/sysdeps.c */
extern
int
SYSDEPS_SpawnThread
(
void
(
*
func
)(
TEB
*
),
TEB
*
teb
);
extern
void
SYSDEPS_SetCurThread
(
TEB
*
teb
);
extern
int
SYSDEPS_GetUnixTid
(
void
);
extern
void
DECLSPEC_NORETURN
SYSDEPS_ExitThread
(
int
status
);
extern
void
DECLSPEC_NORETURN
SYSDEPS_AbortThread
(
int
status
);
/* signal handling */
extern
BOOL
SIGNAL_Init
(
void
);
extern
void
SIGNAL_Block
(
void
);
extern
void
SIGNAL_Reset
(
void
);
#endif
/* __WINE_THREAD_H */
include/wine/server.h
View file @
4dba172e
...
...
@@ -110,8 +110,4 @@ inline static void wine_server_set_reply( void *req_ptr, void *ptr, unsigned int
} while(0)
/* non-exported functions */
extern
void
DECLSPEC_NORETURN
server_protocol_error
(
const
char
*
err
,
...
);
extern
void
DECLSPEC_NORETURN
server_protocol_perror
(
const
char
*
err
);
#endif
/* __WINE_WINE_SERVER_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment