From eb97b2f0828d280098def2044f3d6e1e168ad9dc Mon Sep 17 00:00:00 2001 From: "Yan, Like" Date: Fri, 12 Oct 2018 17:12:39 +0800 Subject: [PATCH] tools: acrn-manager: remove assumption of fd num less than 1024 mngr_send_msg() could take mngr descriptor or real socket fd as argument based on an assuption that real socket fd is less than 1024, which may be an issue. This commit takes the real socket fd as descriptor, to avoid the conversion between them. Tracked-On: #1477 Signed-off-by: Tao, Yuhong Signed-off-by: Yan, Like --- tools/acrn-manager/acrn_mngr.c | 67 ++++++---------------------------- 1 file changed, 11 insertions(+), 56 deletions(-) diff --git a/tools/acrn-manager/acrn_mngr.c b/tools/acrn-manager/acrn_mngr.c index b4d104c62..d9d25e4d2 100644 --- a/tools/acrn-manager/acrn_mngr.c +++ b/tools/acrn-manager/acrn_mngr.c @@ -39,8 +39,6 @@ static int check_dir(const char *path) } #define MNGR_SOCK_FMT "/run/acrn/mngr/%s.%d.socket" -#define MNGR_HANDLER_OFFSET 1024 /* The developer should not create more than - 1024 file descriptors in his application */ #define MNGR_MAX_HANDLER 8 #define MNGR_MAX_CLIENT 4 #define PATH_LEN 128 @@ -296,32 +294,6 @@ static struct mngr_fd *desc_to_mfd(int val) return find; } -static int alloc_new_val_and_insert(struct mngr_fd *mfd) -{ - int i; - struct mngr_fd *fd; - - pthread_mutex_lock(&mngr_fd_mtx); - - mfd->desc = -1; - for (i = 0; i < MNGR_MAX_HANDLER; i++) { - fd = desc_to_mfd_nolock(i + MNGR_HANDLER_OFFSET); - if (!fd) { - mfd->desc = i + MNGR_HANDLER_OFFSET; - break; - } - } - - if (mfd->desc >= 0) - LIST_INSERT_HEAD(&mngr_fd_head, mfd, list); - else - pdebug(); - - pthread_mutex_unlock(&mngr_fd_mtx); - - return mfd->desc; -} - static int create_new_server(const char *name) { struct mngr_fd *mfd; @@ -374,18 +346,14 @@ static int create_new_server(const char *name) goto poll_err; } + mfd->desc = mfd->fd; /* add this to mngr_fd_head */ - ret = alloc_new_val_and_insert(mfd); - if (ret < 0) { - pdebug(); - goto alloc_val; - } + pthread_mutex_lock(&mngr_fd_mtx); + LIST_INSERT_HEAD(&mngr_fd_head, mfd, list); + pthread_mutex_unlock(&mngr_fd_mtx); - return ret; + return mfd->desc; - alloc_val: - mfd->polling = 0; - pthread_join(mfd->poll_thread, NULL); poll_err: mfd->listening = 0; pthread_join(mfd->listen_thread, NULL); @@ -491,17 +459,15 @@ static int connect_to_server(const char *name) goto connect_err; } + mfd->desc = mfd->fd; /* add this to mngr_fd_head */ - ret = alloc_new_val_and_insert(mfd); - if (ret < 0) { - pdebug(); - goto alloc_val; - } + pthread_mutex_lock(&mngr_fd_mtx); + LIST_INSERT_HEAD(&mngr_fd_head, mfd, list); + pthread_mutex_unlock(&mngr_fd_mtx); closedir(dir); - return ret; + return mfd->desc; - alloc_val: connect_err: close(mfd->fd); sock_err: @@ -599,22 +565,11 @@ int mngr_add_handler(int server_fd, unsigned id, int mngr_send_msg(int fd, struct mngr_msg *req, struct mngr_msg *ack, unsigned timeout) { - int socket_fd; - struct mngr_fd *mfd; + int socket_fd = fd; fd_set rfd, wfd; struct timeval t; int ret; - if (fd < MNGR_HANDLER_OFFSET) - socket_fd = fd; - else { - mfd = desc_to_mfd(fd); - if (!mfd) - socket_fd = fd; - else - socket_fd = mfd->fd; - } - if (!req) { printf("%s %d\n", __FUNCTION__, __LINE__); return -1;