Redesign of the server communication protocol to allow arbitrary sized
data to be exchanged.
Split request and reply structures to make backwards compatibility
easier.
Moved many console functions to dlls/kernel, added code page support,
changed a few requests to behave properly with the new protocol.
diff --git a/scheduler/thread.c b/scheduler/thread.c
index e3cf2cd..860df59 100644
--- a/scheduler/thread.c
+++ b/scheduler/thread.c
@@ -51,7 +51,7 @@
{
req->handle = 0;
req->tid_in = (void *)id;
- if (!SERVER_CALL()) ret = req->teb;
+ if (!wine_server_call( req )) ret = reply->teb;
}
SERVER_END_REQ;
@@ -112,7 +112,6 @@
close( teb->wait_fd[1] );
if (teb->stack_sel) FreeSelector16( teb->stack_sel );
FreeSelector16( teb->teb_sel );
- if (teb->buffer) munmap( (void *)teb->buffer, teb->buffer_size );
if (teb->debug_info) HeapFree( GetProcessHeap(), 0, teb->debug_info );
VirtualFree( teb->stack_base, 0, MEM_RELEASE );
}
@@ -298,10 +297,10 @@
req->suspend = ((flags & CREATE_SUSPENDED) != 0);
req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
req->request_fd = request_pipe[0];
- if (!SERVER_CALL_ERR())
+ if (!wine_server_call_err( req ))
{
- handle = req->handle;
- tid = req->tid;
+ handle = reply->handle;
+ tid = reply->tid;
}
close( request_pipe[0] );
}
@@ -370,8 +369,8 @@
/* send the exit code to the server */
req->handle = GetCurrentThread();
req->exit_code = code;
- SERVER_CALL();
- last = req->last;
+ wine_server_call( req );
+ last = reply->last;
}
SERVER_END_REQ;
@@ -400,14 +399,14 @@
const CONTEXT *context ) /* [in] Address of context structure */
{
BOOL ret;
- SERVER_START_VAR_REQ( set_thread_context, sizeof(*context) )
+ SERVER_START_REQ( set_thread_context )
{
req->handle = handle;
req->flags = context->ContextFlags;
- memcpy( server_data_ptr(req), context, sizeof(*context) );
- ret = !SERVER_CALL_ERR();
+ wine_server_add_data( req, context, sizeof(*context) );
+ ret = !wine_server_call_err( req );
}
- SERVER_END_VAR_REQ;
+ SERVER_END_REQ;
return ret;
}
@@ -423,15 +422,15 @@
CONTEXT *context ) /* [out] Address of context structure */
{
BOOL ret;
- SERVER_START_VAR_REQ( get_thread_context, sizeof(*context) )
+ SERVER_START_REQ( get_thread_context )
{
req->handle = handle;
req->flags = context->ContextFlags;
- memcpy( server_data_ptr(req), context, sizeof(*context) );
- if ((ret = !SERVER_CALL_ERR()))
- memcpy( context, server_data_ptr(req), sizeof(*context) );
+ wine_server_add_data( req, context, sizeof(*context) );
+ wine_server_set_reply( req, context, sizeof(*context) );
+ ret = !wine_server_call_err( req );
}
- SERVER_END_VAR_REQ;
+ SERVER_END_REQ;
return ret;
}
@@ -451,7 +450,7 @@
{
req->handle = hthread;
req->tid_in = 0;
- if (!SERVER_CALL_ERR()) ret = req->priority;
+ if (!wine_server_call_err( req )) ret = reply->priority;
}
SERVER_END_REQ;
return ret;
@@ -475,7 +474,7 @@
req->handle = hthread;
req->priority = priority;
req->mask = SET_THREAD_INFO_PRIORITY;
- ret = !SERVER_CALL_ERR();
+ ret = !wine_server_call_err( req );
}
SERVER_END_REQ;
return ret;
@@ -529,7 +528,7 @@
req->handle = hThread;
req->affinity = dwThreadAffinityMask;
req->mask = SET_THREAD_INFO_AFFINITY;
- ret = !SERVER_CALL_ERR();
+ ret = !wine_server_call_err( req );
/* FIXME: should return previous value */
}
SERVER_END_REQ;
@@ -571,8 +570,8 @@
{
req->handle = hthread;
req->tid_in = 0;
- ret = !SERVER_CALL_ERR();
- if (ret && exitcode) *exitcode = req->exit_code;
+ ret = !wine_server_call_err( req );
+ if (ret && exitcode) *exitcode = reply->exit_code;
}
SERVER_END_REQ;
return ret;
@@ -597,7 +596,7 @@
SERVER_START_REQ( resume_thread )
{
req->handle = hthread;
- if (!SERVER_CALL_ERR()) ret = req->count;
+ if (!wine_server_call_err( req )) ret = reply->count;
}
SERVER_END_REQ;
return ret;
@@ -618,7 +617,7 @@
SERVER_START_REQ( suspend_thread )
{
req->handle = hthread;
- if (!SERVER_CALL_ERR()) ret = req->count;
+ if (!wine_server_call_err( req )) ret = reply->count;
}
SERVER_END_REQ;
return ret;
@@ -637,7 +636,7 @@
req->user = 1;
req->func = func;
req->param = (void *)data;
- ret = !SERVER_CALL_ERR();
+ ret = !wine_server_call_err( req );
}
SERVER_END_REQ;
return ret;