diff --git a/server/clipboard.c b/server/clipboard.c index 065dd2d648a..0c39319f142 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 @@ static struct clipboard *get_process_clipboard(void) 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 f5ebc2b4df0..7b889d8c398 100644 --- a/server/hook.c +++ b/server/hook.c @@ -114,9 +114,10 @@ static struct hook_table *alloc_hook_table(void) 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 630abe6f87b..51193b76720 100644 --- a/server/process.c +++ b/server/process.c @@ -632,6 +632,8 @@ static void process_killed( struct process *process ) 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 );