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;
|
peer->sock_fd = newfd;
|
||||||
|
|
||||||
/* get an unused peer id */
|
/* 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++;
|
server->cur_id++;
|
||||||
}
|
}
|
||||||
|
if (i == G_MAXUINT16) {
|
||||||
|
IVSHMEM_SERVER_DEBUG(server, "cannot allocate new client id\n");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
peer->id = server->cur_id++;
|
peer->id = server->cur_id++;
|
||||||
|
|
||||||
/* create eventfd, one per vector */
|
/* create eventfd, one per vector */
|
||||||
|
@ -71,7 +71,7 @@ typedef struct IvshmemServer {
|
|||||||
size_t shm_size; /**< size of shm */
|
size_t shm_size; /**< size of shm */
|
||||||
int shm_fd; /**< shm file descriptor */
|
int shm_fd; /**< shm file descriptor */
|
||||||
unsigned n_vectors; /**< number of vectors */
|
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 */
|
bool verbose; /**< true in verbose mode */
|
||||||
IvshmemServerPeerList peer_list; /**< list of peers */
|
IvshmemServerPeerList peer_list; /**< list of peers */
|
||||||
} IvshmemServer;
|
} IvshmemServer;
|
||||||
|
Loading…
Reference in New Issue
Block a user