server: Make sure that last error doesn't get set during thread cleanup.
diff --git a/server/clipboard.c b/server/clipboard.c
index 065dd2d..0c39319 100644
--- a/server/clipboard.c
+++ b/server/clipboard.c
@@ -30,6 +30,7 @@
#define WIN32_NO_STATUS
#include "request.h"
#include "object.h"
+#include "process.h"
#include "user.h"
#include "winuser.h"
#include "winternl.h"
@@ -112,9 +113,10 @@
void cleanup_clipboard_thread(struct thread *thread)
{
struct clipboard *clipboard;
- struct winstation *winstation = get_process_winstation( thread->process, WINSTA_ACCESSCLIPBOARD );
+ struct winstation *winstation;
- if (!winstation) return;
+ if (!thread->process->winstation) return;
+ if (!(winstation = get_process_winstation( thread->process, WINSTA_ACCESSCLIPBOARD ))) return;
if ((clipboard = winstation->clipboard))
{
diff --git a/server/hook.c b/server/hook.c
index f5ebc2b..7b889d8 100644
--- a/server/hook.c
+++ b/server/hook.c
@@ -114,9 +114,10 @@
static struct hook_table *get_global_hooks( struct thread *thread )
{
struct hook_table *table;
- struct desktop *desktop = get_thread_desktop( thread, 0 );
+ struct desktop *desktop;
- if (!desktop) return NULL;
+ if (!thread->desktop) return NULL;
+ if (!(desktop = get_thread_desktop( thread, 0 ))) return NULL;
table = desktop->global_hooks;
release_object( desktop );
return table;
diff --git a/server/process.c b/server/process.c
index 630abe6..51193b7 100644
--- a/server/process.c
+++ b/server/process.c
@@ -632,6 +632,8 @@
handles = process->handles;
process->handles = NULL;
if (handles) release_object( handles );
+ process->winstation = 0;
+ process->desktop = 0;
/* close the console attached to this process, if any */
free_console( process );