Alexandre Julliard : server: Send the version with the initial fd so that it can be checked before sending the first request .

Alexandre Julliard julliard at winehq.org
Fri Jan 2 08:25:29 CST 2009


Module: wine
Branch: master
Commit: 1d2d0d562243fd0f57f780ac0f1fc90799200577
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1d2d0d562243fd0f57f780ac0f1fc90799200577

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Dec 30 22:37:25 2008 +0100

server: Send the version with the initial fd so that it can be checked before sending the first request.

---

 dlls/ntdll/server.c |   21 ++++++++++-----------
 server/process.c    |    2 +-
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index 8345a93..04d9c21 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -934,7 +934,7 @@ static void send_server_task_port(void)
  */
 void server_init_process(void)
 {
-    obj_handle_t dummy_handle;
+    obj_handle_t version;
     const char *env_socket = getenv( "WINESERVERSOCKET" );
 
     if (env_socket)
@@ -958,8 +958,15 @@ void server_init_process(void)
     pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, NULL );
 
     /* receive the first thread request fd on the main socket */
-    ntdll_get_thread_data()->request_fd = receive_fd( &dummy_handle );
+    ntdll_get_thread_data()->request_fd = receive_fd( &version );
 
+    if (version != SERVER_PROTOCOL_VERSION)
+        server_protocol_error( "version mismatch %d/%d.\n"
+                               "Your %s binary was not upgraded correctly,\n"
+                               "or you have an older one somewhere in your PATH.\n"
+                               "Or maybe the wrong wineserver is still running?\n",
+                               version, SERVER_PROTOCOL_VERSION,
+                               (version > SERVER_PROTOCOL_VERSION) ? "wine" : "wineserver" );
 #ifdef __APPLE__
     send_server_task_port();
 #endif
@@ -1004,7 +1011,7 @@ NTSTATUS server_init_process_done(void)
  */
 size_t server_init_thread( int unix_pid, int unix_tid, void *entry_point )
 {
-    int version, ret;
+    int ret;
     int reply_pipe[2];
     struct sigaction sig_act;
     size_t info_size;
@@ -1049,18 +1056,10 @@ size_t server_init_thread( int unix_pid, int unix_tid, void *entry_point )
         NtCurrentTeb()->ClientId.UniqueProcess = ULongToHandle(reply->pid);
         NtCurrentTeb()->ClientId.UniqueThread  = ULongToHandle(reply->tid);
         info_size         = reply->info_size;
-        version           = reply->version;
         server_start_time = reply->server_start;
     }
     SERVER_END_REQ;
 
     if (ret) server_protocol_error( "init_thread failed with status %x\n", ret );
-    if (version != SERVER_PROTOCOL_VERSION)
-        server_protocol_error( "version mismatch %d/%d.\n"
-                               "Your %s binary was not upgraded correctly,\n"
-                               "or you have an older one somewhere in your PATH.\n"
-                               "Or maybe the wrong wineserver is still running?\n",
-                               version, SERVER_PROTOCOL_VERSION,
-                               (version > SERVER_PROTOCOL_VERSION) ? "wine" : "wineserver" );
     return info_size;
 }
diff --git a/server/process.c b/server/process.c
index c2936c5..208fb7d 100644
--- a/server/process.c
+++ b/server/process.c
@@ -377,7 +377,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
         file_set_error();
         goto error;
     }
-    if (send_client_fd( process, request_pipe[1], 0 ) == -1)
+    if (send_client_fd( process, request_pipe[1], SERVER_PROTOCOL_VERSION ) == -1)
     {
         close( request_pipe[0] );
         close( request_pipe[1] );




More information about the wine-cvs mailing list