summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy White <jwhite@codeweavers.com>2014-06-23 16:05:46 -0500
committerAlon Levy <alevy@redhat.com>2014-07-10 15:45:16 +0300
commit1c25f882a32432a8ff2253c5a42ed4a7d6a7df1a (patch)
tree4333bb5eb4c3e4311e8d530c6ba5eb7ca59e941e
parent2f602c03ebd9446e97c97fa33f353c693dc6755e (diff)
Add an option such that the daemon will exit after processing a single session.
Signed-off-by: Jeremy White <jwhite@codeweavers.com>
-rw-r--r--src/vdagentd.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/vdagentd.c b/src/vdagentd.c
index fa47997..b5c7d14 100644
--- a/src/vdagentd.c
+++ b/src/vdagentd.c
@@ -59,6 +59,7 @@ static const char *vdagentd_socket = VDAGENTD_SOCKET;
static const char *uinput_device = "/dev/uinput";
static int debug = 0;
static int uinput_fake = 0;
+static int only_once = 0;
static struct udscs_server *server = NULL;
static struct vdagent_virtio_port *virtio_port = NULL;
static GHashTable *active_xfers = NULL;
@@ -758,6 +759,7 @@ static void usage(FILE *fp)
" -u <dev> set uinput device [%s]\n"
" -f treat uinput device as fake; no ioctls\n"
" -x don't daemonize\n"
+ " -o Only handle one virtio serial session.\n"
#ifdef HAVE_CONSOLE_KIT
" -X Disable console kit integration\n"
#endif
@@ -798,6 +800,7 @@ void main_loop(void)
fd_set readfds, writefds;
int n, nfds;
int ck_fd = 0;
+ int once = 0;
while (!quit) {
FD_ZERO(&readfds);
@@ -827,6 +830,7 @@ void main_loop(void)
udscs_server_handle_fds(server, &readfds, &writefds);
if (virtio_port) {
+ once = 1;
vdagent_virtio_port_handle_fds(&virtio_port, &readfds, &writefds);
if (!virtio_port) {
int old_client_connected = client_connected;
@@ -845,6 +849,11 @@ void main_loop(void)
client_connected = old_client_connected;
}
}
+ else if (only_once && once)
+ {
+ syslog(LOG_INFO, "Exiting after one client session.");
+ break;
+ }
if (session_info && FD_ISSET(ck_fd, &readfds)) {
active_session = session_info_get_active_session(session_info);
@@ -866,7 +875,7 @@ int main(int argc, char *argv[])
struct sigaction act;
for (;;) {
- if (-1 == (c = getopt(argc, argv, "-dhxXfs:u:S:")))
+ if (-1 == (c = getopt(argc, argv, "-dhxXfos:u:S:")))
break;
switch (c) {
case 'd':
@@ -884,6 +893,9 @@ int main(int argc, char *argv[])
case 'f':
uinput_fake = 1;
break;
+ case 'o':
+ only_once = 1;
+ break;
case 'x':
do_daemonize = 0;
break;