ivshmem-server: use a uint16 for client ID
In practice, the number of VM is limited to MAXUINT16 in ivshmem, so use the same limit on the server (removes a theorical infinite loop) Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Claudio Fontana <claudio.fontana@huawei.com>
This commit is contained in:
parent
95204aa951
commit
022cffe313
@ -145,9 +145,18 @@ ivshmem_server_handle_new_conn(IvshmemServer *server)
|
||||
peer->sock_fd = newfd;
|
||||
|
||||
/* get an unused peer id */
|
||||
while (ivshmem_server_search_peer(server, server->cur_id) != NULL) {
|
||||
/* XXX: this could use id allocation such as Linux IDA, or simply
|
||||
* a free-list */
|
||||
for (i = 0; i < G_MAXUINT16; i++) {
|
||||
if (ivshmem_server_search_peer(server, server->cur_id) == NULL) {
|
||||
break;
|
||||
}
|
||||
server->cur_id++;
|
||||
}
|
||||
if (i == G_MAXUINT16) {
|
||||
IVSHMEM_SERVER_DEBUG(server, "cannot allocate new client id\n");
|
||||
goto fail;
|
||||
}
|
||||
peer->id = server->cur_id++;
|
||||
|
||||
/* create eventfd, one per vector */
|
||||
|
@ -71,7 +71,7 @@ typedef struct IvshmemServer {
|
||||
size_t shm_size; /**< size of shm */
|
||||
int shm_fd; /**< shm file descriptor */
|
||||
unsigned n_vectors; /**< number of vectors */
|
||||
long cur_id; /**< id to be given to next client */
|
||||
uint16_t cur_id; /**< id to be given to next client */
|
||||
bool verbose; /**< true in verbose mode */
|
||||
IvshmemServerPeerList peer_list; /**< list of peers */
|
||||
} IvshmemServer;
|
||||
|
Loading…
Reference in New Issue
Block a user