Have threads and processes exit more cleanly whenever possible.
diff --git a/include/server.h b/include/server.h index ffb014b..f6031d4 100644 --- a/include/server.h +++ b/include/server.h
@@ -191,6 +191,7 @@ { IN int handle; /* process handle to terminate */ IN int exit_code; /* process exit code */ + OUT int self; /* suicide? */ }; @@ -199,6 +200,8 @@ { IN int handle; /* thread handle to terminate */ IN int exit_code; /* thread exit code */ + OUT int self; /* suicide? */ + OUT int last; /* last thread in this process? */ }; @@ -1202,7 +1205,7 @@ REQ_NB_REQUESTS }; -#define SERVER_PROTOCOL_VERSION 3 +#define SERVER_PROTOCOL_VERSION 4 /* ### make_requests end ### */ /* Everything above this line is generated automatically by tools/make_requests */ @@ -1219,7 +1222,7 @@ extern unsigned int server_call_noerr( enum request req ); extern unsigned int server_call_fd( enum request req, int fd_out, int *fd_in ); -extern void server_protocol_error( const char *err, ... ); +extern void server_protocol_error( const char *err, ... ) WINE_NORETURN; /* get a pointer to the request buffer */ static inline void * WINE_UNUSED get_req_buffer(void)
diff --git a/include/thread.h b/include/thread.h index 88ffd4b..c59aab4 100644 --- a/include/thread.h +++ b/include/thread.h
@@ -131,6 +131,6 @@ /* scheduler/sysdeps.c */ extern int SYSDEPS_SpawnThread( TEB *teb ); extern void SYSDEPS_SetCurThread( TEB *teb ); -extern void SYSDEPS_ExitThread(void); +extern void SYSDEPS_ExitThread( int status ) WINE_NORETURN; #endif /* __WINE_THREAD_H */
diff --git a/include/winbase.h b/include/winbase.h index 467fa8a..ad89002 100644 --- a/include/winbase.h +++ b/include/winbase.h
@@ -1223,8 +1223,8 @@ #define EnumTimeFormats WINELIB_NAME_AW(EnumTimeFormats) BOOL WINAPI EqualSid(PSID, PSID); BOOL WINAPI EqualPrefixSid(PSID,PSID); -VOID WINAPI ExitProcess(DWORD); -VOID WINAPI ExitThread(DWORD); +VOID WINAPI ExitProcess(DWORD) WINE_NORETURN; +VOID WINAPI ExitThread(DWORD) WINE_NORETURN; DWORD WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD); DWORD WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD); #define ExpandEnvironmentStrings WINELIB_NAME_AW(ExpandEnvironmentStrings)
diff --git a/include/windef.h b/include/windef.h index 6a5c9db..f6a69b4 100644 --- a/include/windef.h +++ b/include/windef.h
@@ -353,11 +353,13 @@ /* Macro for structure packing. */ #ifdef __GNUC__ -#define WINE_PACKED __attribute__ ((packed)) -#define WINE_UNUSED __attribute__ ((unused)) +#define WINE_PACKED __attribute__((packed)) +#define WINE_UNUSED __attribute__((unused)) +#define WINE_NORETURN __attribute__((noreturn)) #else -#define WINE_PACKED /* nothing */ -#define WINE_UNUSED /* nothing */ +#define WINE_PACKED /* nothing */ +#define WINE_UNUSED /* nothing */ +#define WINE_NORETURN /* nothing */ #endif /* Macros to split words and longs. */