Commit 022cffe3 authored by Marc-André Lureau's avatar Marc-André Lureau
Browse files

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: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarClaudio Fontana <claudio.fontana@huawei.com>
parent 95204aa9
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -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 */
+1 −1
Original line number Diff line number Diff line
@@ -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;