@@ -1098,13 +1098,23 @@ static void rpc_serve_client(ggml_backend_t backend, sockfd_t sockfd, size_t fre
1098
1098
if (!recv_data (sockfd, &cmd, 1 )) {
1099
1099
break ;
1100
1100
}
1101
+ if (cmd > GET_DEVICE_MEMORY) {
1102
+ // fail fast if the command is invalid
1103
+ fprintf (stderr, " Unknown command: %d\n " , cmd);
1104
+ break ;
1105
+ }
1101
1106
std::vector<uint8_t > input;
1102
1107
std::vector<uint8_t > output;
1103
1108
uint64_t input_size;
1104
1109
if (!recv_data (sockfd, &input_size, sizeof (input_size))) {
1105
1110
break ;
1106
1111
}
1107
- input.resize (input_size);
1112
+ try {
1113
+ input.resize (input_size);
1114
+ } catch (const std::bad_alloc & e) {
1115
+ fprintf (stderr, " Failed to allocate input buffer of size %" PRIu64 " \n " , input_size);
1116
+ break ;
1117
+ }
1108
1118
if (!recv_data (sockfd, input.data (), input_size)) {
1109
1119
break ;
1110
1120
}
@@ -1203,8 +1213,10 @@ void start_rpc_server(ggml_backend_t backend, const char * endpoint, size_t free
1203
1213
return ;
1204
1214
}
1205
1215
printf (" Accepted client connection, free_mem=%zu, total_mem=%zu\n " , free_mem, total_mem);
1216
+ fflush (stdout);
1206
1217
rpc_serve_client (backend, client_socket->fd , free_mem, total_mem);
1207
1218
printf (" Client connection closed\n " );
1219
+ fflush (stdout);
1208
1220
}
1209
1221
#ifdef _WIN32
1210
1222
WSACleanup ();
0 commit comments