From: Sasha Levin <levinsasha928@gmail.com>
To: penberg@cs.helsinki.fi
Cc: kvm@vger.kernel.org, mingo@elte.hu, asias.hejun@gmail.com,
gorcunov@gmail.com, Sasha Levin <levinsasha928@gmail.com>
Subject: [PATCH] kvm tools: Add method to stop ipc thread
Date: Tue, 25 Oct 2011 12:40:36 +0200 [thread overview]
Message-ID: <1319539236-874-1-git-send-email-levinsasha928@gmail.com> (raw)
Stop the ipc thread when shutting down the hypervisor.
This solves a bug where the .sock files weren't removed upon shutdown.
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
---
tools/kvm/include/kvm/kvm-ipc.h | 1 +
tools/kvm/kvm-ipc.c | 33 +++++++++++++++++++++++++++++----
tools/kvm/kvm.c | 1 +
3 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/tools/kvm/include/kvm/kvm-ipc.h b/tools/kvm/include/kvm/kvm-ipc.h
index c932052..731767f 100644
--- a/tools/kvm/include/kvm/kvm-ipc.h
+++ b/tools/kvm/include/kvm/kvm-ipc.h
@@ -22,5 +22,6 @@ enum {
int kvm_ipc__register_handler(u32 type, void (*cb)(int fd, u32 type, u32 len, u8 *msg));
int kvm_ipc__handle(int fd, struct kvm_ipc_msg *msg);
int kvm_ipc__start(int sock);
+int kvm_ipc__stop(void);
#endif
diff --git a/tools/kvm/kvm-ipc.c b/tools/kvm/kvm-ipc.c
index f05e926..65209e1 100644
--- a/tools/kvm/kvm-ipc.c
+++ b/tools/kvm/kvm-ipc.c
@@ -7,12 +7,14 @@
#include <sys/un.h>
#include <sys/types.h>
#include <sys/socket.h>
+#include <sys/eventfd.h>
#define KVM_IPC_MAX_MSGS 16
static void (*msgs[KVM_IPC_MAX_MSGS])(int fd, u32 type, u32 len, u8 *msg);
static DECLARE_RWSEM(msgs_rwlock);
-static int epoll_fd, server_fd;
+static int epoll_fd, server_fd, stop_fd;
+static pthread_t thread;
int kvm_ipc__register_handler(u32 type, void (*cb)(int fd, u32 type, u32 len, u8 *msg))
{
@@ -109,8 +111,11 @@ static void *kvm_ipc__thread(void *param)
nfds = epoll_wait(epoll_fd, &event, 1, -1);
if (nfds > 0) {
int fd = event.data.fd;
-
- if (fd == server_fd) {
+ printf("bleh\n");
+ if (fd == stop_fd) {
+ printf("Got stop signal\n");
+ break;
+ } else if (fd == server_fd) {
int client;
client = kvm_ipc__new_conn(fd);
@@ -128,7 +133,6 @@ static void *kvm_ipc__thread(void *param)
int kvm_ipc__start(int sock)
{
- pthread_t thread;
struct epoll_event ev;
server_fd = sock;
@@ -140,8 +144,29 @@ int kvm_ipc__start(int sock)
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev) < 0)
die("Failed starting IPC thread");
+ stop_fd = eventfd(0, 0);
+ ev.events = EPOLLIN | EPOLLOUT | EPOLLRDHUP | 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 (pthread_create(&thread, NULL, kvm_ipc__thread, NULL) != 0)
die("Failed starting IPC thread");
return 0;
}
+
+int kvm_ipc__stop(void)
+{
+ u64 val = 1;
+ int ret;
+
+ ret = write(stop_fd, &val, sizeof(val));
+ if (ret < 0)
+ return ret;
+
+ close(server_fd);
+ close(epoll_fd);
+
+ return ret;
+}
diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c
index 40ae6a5..8d6b5e1 100644
--- a/tools/kvm/kvm.c
+++ b/tools/kvm/kvm.c
@@ -237,6 +237,7 @@ void kvm__delete(struct kvm *kvm)
kvm__stop_timer(kvm);
munmap(kvm->ram_start, kvm->ram_size);
+ kvm_ipc__stop();
kvm__remove_socket(kvm->name);
free(kvm);
}
--
1.7.7
next reply other threads:[~2011-10-25 10:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-25 10:40 Sasha Levin [this message]
2011-10-25 10:42 ` [PATCH] kvm tools: Add method to stop ipc thread Pekka Enberg
2011-10-25 11:27 ` Sasha Levin
2011-10-25 11:08 ` Osier Yang
2011-10-25 11:38 ` Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1319539236-874-1-git-send-email-levinsasha928@gmail.com \
--to=levinsasha928@gmail.com \
--cc=asias.hejun@gmail.com \
--cc=gorcunov@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=penberg@cs.helsinki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox