From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yang Bai Subject: [PATCH 3/4] kvm tool: if kvm_ipc__start failed, return negative Date: Fri, 10 Feb 2012 17:55:35 +0800 Message-ID: <1328867736-4394-3-git-send-email-hamo.by@gmail.com> References: <1328867736-4394-1-git-send-email-hamo.by@gmail.com> Cc: kvm@vger.kernel.org, Yang Bai To: penberg@kernel.org Return-path: Received: from mail-pw0-f46.google.com ([209.85.160.46]:44470 "EHLO mail-pw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758619Ab2BJJ5K (ORCPT ); Fri, 10 Feb 2012 04:57:10 -0500 Received: by mail-pw0-f46.google.com with SMTP id un15so2294311pbc.19 for ; Fri, 10 Feb 2012 01:57:10 -0800 (PST) In-Reply-To: <1328867736-4394-1-git-send-email-hamo.by@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: If kvm_ipc__start failed, it returns a negative and by checking this return value, we can ensure that it succeeds. Signed-off-by: Yang Bai --- tools/kvm/kvm-ipc.c | 38 ++++++++++++++++++++++++++++++++------ tools/kvm/kvm.c | 7 ++++++- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/tools/kvm/kvm-ipc.c b/tools/kvm/kvm-ipc.c index 6a0bd21..257c806c 100644 --- a/tools/kvm/kvm-ipc.c +++ b/tools/kvm/kvm-ipc.c @@ -166,27 +166,53 @@ static void *kvm_ipc__thread(void *param) int kvm_ipc__start(int sock) { + int ret; struct epoll_event ev = {0}; server_fd = sock; epoll_fd = epoll_create(KVM_IPC_MAX_MSGS); + if (epoll_fd < 0) { + ret = epoll_fd; + goto err; + } ev.events = EPOLLIN | EPOLLET; ev.data.fd = sock; - if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev) < 0) - die("Failed starting IPC thread"); + if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev) < 0) { + pr_err("Failed starting IPC thread"); + ret = -EFAULT; + goto err_epoll; + } stop_fd = eventfd(0, 0); + if (stop_fd < 0) { + ret = stop_fd; + goto err_epoll; + } + ev.events = EPOLLIN | EPOLLET; ev.data.fd = stop_fd; - if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, stop_fd, &ev) < 0) - die("Failed adding stop event to epoll"); + if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, stop_fd, &ev) < 0) { + pr_err("Failed adding stop event to epoll"); + ret = -EFAULT; + goto err_stop; + } - if (pthread_create(&thread, NULL, kvm_ipc__thread, NULL) != 0) - die("Failed starting IPC thread"); + if (pthread_create(&thread, NULL, kvm_ipc__thread, NULL) != 0) { + pr_err("Failed starting IPC thread"); + ret = -EFAULT; + goto err_stop; + } return 0; + +err_stop: + close(stop_fd); +err_epoll: + close(epoll_fd); +err: + return ret; } int kvm_ipc__stop(void) diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c index 192d70e..f02d5df 100644 --- a/tools/kvm/kvm.c +++ b/tools/kvm/kvm.c @@ -390,7 +390,12 @@ struct kvm *kvm__init(const char *kvm_dev, const char *hugetlbfs_path, u64 ram_s kvm__arch_init(kvm, hugetlbfs_path, ram_size); - kvm_ipc__start(kvm__create_socket(kvm)); + ret = kvm_ipc__start(kvm__create_socket(kvm)); + if (ret < 0) { + pr_err("Starting ipc failed."); + goto err_vm_fd; + } + kvm_ipc__register_handler(KVM_IPC_PID, kvm__pid); return kvm; -- 1.7.8.3