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");
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,
// 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
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