server: Don't change context flags in copy_context.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
d2b70aa57a
commit
89b4bdd6cd
|
@ -1202,7 +1202,6 @@ void kill_thread( struct thread *thread, int violent_death )
|
||||||
static void copy_context( context_t *to, const context_t *from, unsigned int flags )
|
static void copy_context( context_t *to, const context_t *from, unsigned int flags )
|
||||||
{
|
{
|
||||||
assert( to->cpu == from->cpu );
|
assert( to->cpu == from->cpu );
|
||||||
to->flags |= flags;
|
|
||||||
if (flags & SERVER_CTX_CONTROL) to->ctl = from->ctl;
|
if (flags & SERVER_CTX_CONTROL) to->ctl = from->ctl;
|
||||||
if (flags & SERVER_CTX_INTEGER) to->integer = from->integer;
|
if (flags & SERVER_CTX_INTEGER) to->integer = from->integer;
|
||||||
if (flags & SERVER_CTX_SEGMENTS) to->seg = from->seg;
|
if (flags & SERVER_CTX_SEGMENTS) to->seg = from->seg;
|
||||||
|
@ -1776,7 +1775,11 @@ DECL_HANDLER(get_thread_context)
|
||||||
|
|
||||||
memset( context, 0, sizeof(context_t) );
|
memset( context, 0, sizeof(context_t) );
|
||||||
context->cpu = thread->process->cpu;
|
context->cpu = thread->process->cpu;
|
||||||
if (thread->context) copy_context( context, thread->context, req->flags & ~flags );
|
if (thread->context)
|
||||||
|
{
|
||||||
|
copy_context( context, thread->context, req->flags & ~flags );
|
||||||
|
context->flags |= req->flags & ~flags;
|
||||||
|
}
|
||||||
if (req->flags & flags) get_thread_context( thread, context, req->flags & flags );
|
if (req->flags & flags) get_thread_context( thread, context, req->flags & flags );
|
||||||
}
|
}
|
||||||
release_object( thread );
|
release_object( thread );
|
||||||
|
@ -1818,7 +1821,11 @@ DECL_HANDLER(set_thread_context)
|
||||||
unsigned int client_flags = context->flags & ~system_flags;
|
unsigned int client_flags = context->flags & ~system_flags;
|
||||||
|
|
||||||
if (system_flags) set_thread_context( thread, context, system_flags );
|
if (system_flags) set_thread_context( thread, context, system_flags );
|
||||||
if (thread->context && !get_error()) copy_context( thread->context, context, client_flags );
|
if (thread->context && !get_error())
|
||||||
|
{
|
||||||
|
copy_context( thread->context, context, client_flags );
|
||||||
|
thread->context->flags |= client_flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else set_error( STATUS_INVALID_PARAMETER );
|
else set_error( STATUS_INVALID_PARAMETER );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue