DiskTool - Usability fixes
[tpg/acess2.git] / AcessNative / acesskernel_src / server.c
index 80d7c25..78f7fa1 100644 (file)
@@ -131,17 +131,27 @@ int Server_WorkerThread(void *ClientPtr)
                while( Client->CurrentRequest == NULL )
                        SDL_CondWait(Client->WaitFlag, Client->Mutex);
                
+//             Log_Debug("AcessSrv", "Worker got message %p", Client->CurrentRequest);
+               
                if(Client->ClientID != cur_client_id) {
+//                     Log_Debug("AcessSrv", "Client thread ID changed from %i to %i",
+//                             cur_client_id, Client->ClientID);
                        Threads_SetThread( Client->ClientID );
                        cur_client_id = Client->ClientID;
                }
                
-               Log_Debug("AcessSrv", "Worker %i takes %p",
-                       Client->ClientID, Client->CurrentRequest);
+               // Debug
+               {
+                       int     callid = Client->CurrentRequest->CallID;
+                       Log_Debug("AcessSrv", "Client %i request %i %s",
+                               Client->ClientID, callid,
+                               callid < N_SYSCALLS ? casSYSCALL_NAMES[callid] : "UNK"
+                               );
+               }
                
                // Get the response
                retHeader = SyscallRecieve(Client->CurrentRequest, &retSize);
-               
+
                if( !retHeader ) {
                        // Return an error to the client
                        printf("ERROR: SyscallRecieve failed\n");
@@ -155,13 +165,14 @@ int Server_WorkerThread(void *ClientPtr)
                retHeader->ClientID = Client->ClientID;
                
                // Mark the thread as ready for another job
+               free(Client->CurrentRequest);
                Client->CurrentRequest = 0;
                
-               Log_Debug("AcessSrv", "Sending %i to %x:%i (Client %i)",
-                       retSize, ntohl(Client->ClientAddr.sin_addr.s_addr),
-                       ntohs(Client->ClientAddr.sin_port),
-                       Client->ClientID
-                       );
+//             Log_Debug("AcessSrv", "Sending %i to %x:%i (Client %i)",
+//                     retSize, ntohl(Client->ClientAddr.sin_addr.s_addr),
+//                     ntohs(Client->ClientAddr.sin_port),
+//                     Client->ClientID
+//                     );
                
                // Return the data
                sentSize = sendto(gSocket, retHeader, retSize, 0,
@@ -271,8 +282,8 @@ int Server_ListenThread(void *Unused)
                
                // Hand off to a worker thread
                // - TODO: Actually have worker threads
-               printf("%i bytes from %x:%i\n", length,
-                       ntohl(addr.sin_addr.s_addr), ntohs(addr.sin_port));
+//             Log_Debug("Server", "%i bytes from %x:%i", length,
+//                     ntohl(addr.sin_addr.s_addr), ntohs(addr.sin_port));
                
                client = Server_GetClient(req->ClientID);
                // NOTE: Hack - Should check if all zero
@@ -295,9 +306,12 @@ int Server_ListenThread(void *Unused)
                        continue;
                }
                
-               Log_Debug("AcessSrv", "Message from Client %i (%p)",
-                       client->ClientID, client);
-               
+//             Log_Debug("AcessSrv", "Message from Client %i (%p)",
+//                     client->ClientID, client);
+
+               // Make a copy of the request data      
+               req = malloc(length);
+               memcpy(req, data, length);
                client->CurrentRequest = req;
                SDL_CondSignal(client->WaitFlag);
                #endif

UCC git Repository :: git.ucc.asn.au