Commit e4faa129 authored by Alexandre Julliard's avatar Alexandre Julliard

server: Make sure that last error doesn't get set during thread cleanup.

parent 60efdd55
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#define WIN32_NO_STATUS #define WIN32_NO_STATUS
#include "request.h" #include "request.h"
#include "object.h" #include "object.h"
#include "process.h"
#include "user.h" #include "user.h"
#include "winuser.h" #include "winuser.h"
#include "winternl.h" #include "winternl.h"
...@@ -112,9 +113,10 @@ static struct clipboard *get_process_clipboard(void) ...@@ -112,9 +113,10 @@ static struct clipboard *get_process_clipboard(void)
void cleanup_clipboard_thread(struct thread *thread) void cleanup_clipboard_thread(struct thread *thread)
{ {
struct clipboard *clipboard; 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)) if ((clipboard = winstation->clipboard))
{ {
......
...@@ -114,9 +114,10 @@ static struct hook_table *alloc_hook_table(void) ...@@ -114,9 +114,10 @@ static struct hook_table *alloc_hook_table(void)
static struct hook_table *get_global_hooks( struct thread *thread ) static struct hook_table *get_global_hooks( struct thread *thread )
{ {
struct hook_table *table; 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; table = desktop->global_hooks;
release_object( desktop ); release_object( desktop );
return table; return table;
......
...@@ -632,6 +632,8 @@ static void process_killed( struct process *process ) ...@@ -632,6 +632,8 @@ static void process_killed( struct process *process )
handles = process->handles; handles = process->handles;
process->handles = NULL; process->handles = NULL;
if (handles) release_object( handles ); if (handles) release_object( handles );
process->winstation = 0;
process->desktop = 0;
/* close the console attached to this process, if any */ /* close the console attached to this process, if any */
free_console( process ); free_console( process );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment