diff options
author | Laurent Léonard <laurent@open-minds.org> | 2011-01-04 11:40:30 +0100 |
---|---|---|
committer | Laurent Léonard <laurent@open-minds.org> | 2011-01-04 11:40:30 +0100 |
commit | 3466195f8d67e7c91a056939478f056f769737e1 (patch) | |
tree | d52095ef982568df43a1b38dc3dff499aaa01c03 /daemon | |
parent | 3b7b682de1f743acab5daf6e987289c7da539386 (diff) |
Imported Upstream version 0.8.7
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/Makefile.am | 4 | ||||
-rw-r--r-- | daemon/Makefile.in | 32 | ||||
-rw-r--r-- | daemon/event.c | 12 | ||||
-rw-r--r-- | daemon/libvirtd.c | 52 |
4 files changed, 71 insertions, 29 deletions
diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 72778e50a..3ffb7bee7 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -90,8 +90,8 @@ libvirtd_CFLAGS = \ -DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \ -DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\"" -libvirtd_LDFLAGS = \ - $(WARN_CFLAGS) \ +libvirtd_LDFLAGS = \ + $(WARN_CFLAGS) \ $(COVERAGE_LDFLAGS) libvirtd_LDADD = \ diff --git a/daemon/Makefile.in b/daemon/Makefile.in index ab460963c..efb7e518c 100644 --- a/daemon/Makefile.in +++ b/daemon/Makefile.in @@ -20,7 +20,6 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -65,6 +64,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/base64.m4 \ $(top_srcdir)/gnulib/m4/canonicalize.m4 \ $(top_srcdir)/gnulib/m4/close.m4 \ + $(top_srcdir)/gnulib/m4/configmake.m4 \ $(top_srcdir)/gnulib/m4/count-one-bits.m4 \ $(top_srcdir)/gnulib/m4/dirname.m4 \ $(top_srcdir)/gnulib/m4/dos.m4 \ @@ -112,7 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/pathmax.m4 \ $(top_srcdir)/gnulib/m4/perror.m4 \ $(top_srcdir)/gnulib/m4/physmem.m4 \ - $(top_srcdir)/gnulib/m4/po.m4 $(top_srcdir)/gnulib/m4/poll.m4 \ + $(top_srcdir)/gnulib/m4/pipe.m4 $(top_srcdir)/gnulib/m4/po.m4 \ + $(top_srcdir)/gnulib/m4/poll.m4 \ $(top_srcdir)/gnulib/m4/poll_h.m4 \ $(top_srcdir)/gnulib/m4/posix-shell.m4 \ $(top_srcdir)/gnulib/m4/printf.m4 \ @@ -170,6 +171,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/usleep.m4 \ $(top_srcdir)/gnulib/m4/vasnprintf.m4 \ $(top_srcdir)/gnulib/m4/vasprintf.m4 \ + $(top_srcdir)/gnulib/m4/waitpid.m4 \ $(top_srcdir)/gnulib/m4/warn-on-use.m4 \ $(top_srcdir)/gnulib/m4/wchar_h.m4 \ $(top_srcdir)/m4/compiler-flags.m4 $(top_srcdir)/m4/gettext.m4 \ @@ -288,6 +290,7 @@ DATA = $(augeas_DATA) $(augeastests_DATA) $(conf_DATA) $(tapset_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ @@ -466,6 +469,7 @@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POLL = @GNULIB_POLL@ GNULIB_POPEN = @GNULIB_POPEN@ @@ -568,11 +572,15 @@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREEADDRINFO = @HAVE_DECL_FREEADDRINFO@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GAI_STRERROR = @HAVE_DECL_GAI_STRERROR@ HAVE_DECL_GETADDRINFO = @HAVE_DECL_GETADDRINFO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ @@ -584,6 +592,7 @@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ @@ -592,6 +601,9 @@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TCGETSID = @HAVE_DECL_TCGETSID@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ @@ -604,13 +616,13 @@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ -HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ @@ -650,6 +662,7 @@ HAVE_NETDB_H = @HAVE_NETDB_H@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ +HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POLL = @HAVE_POLL@ HAVE_POLL_H = @HAVE_POLL_H@ @@ -690,6 +703,7 @@ HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ +HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRUCT_UTSNAME = @HAVE_STRUCT_UTSNAME@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ @@ -705,15 +719,12 @@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UTSNAME_H = @HAVE_SYS_UTSNAME_H@ -HAVE_TCGETSID = @HAVE_TCGETSID@ HAVE_TERMIOS_H = @HAVE_TERMIOS_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ -HAVE_TTYNAME_R = @HAVE_TTYNAME_R@ HAVE_UNAME = @HAVE_UNAME@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ -HAVE_UNSETENV = @HAVE_UNSETENV@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ @@ -741,7 +752,9 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ +IP6TABLES_PATH = @IP6TABLES_PATH@ IPTABLES_PATH = @IPTABLES_PATH@ +IP_PATH = @IP_PATH@ ISCSIADM = @ISCSIADM@ LD = @LD@ LDFLAGS = @LDFLAGS@ @@ -792,6 +805,7 @@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODPROBE = @MODPROBE@ MOUNT = @MOUNT@ +MSCOM_LIBS = @MSCOM_LIBS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ NETCF_CFLAGS = @NETCF_CFLAGS@ @@ -892,6 +906,7 @@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +RADVD = @RADVD@ RANLIB = @RANLIB@ READLINE_CFLAGS = @READLINE_CFLAGS@ REMOTE_PID_FILE = @REMOTE_PID_FILE@ @@ -920,6 +935,7 @@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ @@ -1051,6 +1067,7 @@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WIN32_EXTRA_CFLAGS = @WIN32_EXTRA_CFLAGS@ WINDRES = @WINDRES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XDR_CFLAGS = @XDR_CFLAGS@ XEN_CFLAGS = @XEN_CFLAGS@ XEN_LIBS = @XEN_LIBS@ XGETTEXT = @XGETTEXT@ @@ -1102,6 +1119,7 @@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ @@ -1182,7 +1200,7 @@ BUILT_SOURCES = $(am__append_16) $(am__append_18) $(am__append_19) @WITH_LIBVIRTD_TRUE@ -DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\"" \ @WITH_LIBVIRTD_TRUE@ $(am__append_12) @WITH_LIBVIRTD_TRUE@libvirtd_LDFLAGS = \ -@WITH_LIBVIRTD_TRUE@ $(WARN_CFLAGS) \ +@WITH_LIBVIRTD_TRUE@ $(WARN_CFLAGS) \ @WITH_LIBVIRTD_TRUE@ $(COVERAGE_LDFLAGS) diff --git a/daemon/event.c b/daemon/event.c index a983b353e..89ca9f081 100644 --- a/daemon/event.c +++ b/daemon/event.c @@ -576,13 +576,14 @@ int virEventRunOnce(void) { retry: EVENT_DEBUG("Poll on %d handles %p timeout %d", nfds, fds, timeout); ret = poll(fds, nfds, timeout); - EVENT_DEBUG("Poll got %d event", ret); if (ret < 0) { + EVENT_DEBUG("Poll got error event %d", errno); if (errno == EINTR) { goto retry; } goto error_unlocked; } + EVENT_DEBUG("Poll got %d event(s)", ret); virMutexLock(&eventLoop.lock); if (virEventDispatchTimeouts() < 0) @@ -620,12 +621,6 @@ static void virEventHandleWakeup(int watch ATTRIBUTE_UNUSED, virMutexUnlock(&eventLoop.lock); } -#ifdef WIN32 -static inline int pipe(int fd[2]) { - return _pipe(fd, 4096, 0); -} -#endif - int virEventInit(void) { if (virMutexInit(&eventLoop.lock) < 0) @@ -652,7 +647,8 @@ static int virEventInterruptLocked(void) if (!eventLoop.running || virThreadIsSelf(&eventLoop.leader)) { - VIR_DEBUG("Skip interrupt, %d %d", eventLoop.running, (int)eventLoop.leader.thread); + VIR_DEBUG("Skip interrupt, %d %d", eventLoop.running, + virThreadID(&eventLoop.leader)); return 0; } diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index caf51bf80..2df933727 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -1410,7 +1410,7 @@ static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket /* Client is running as root, so disable auth */ if (uid == 0) { VIR_INFO(_("Turn off polkit auth for privileged client pid %d from %s"), - pid, addrstr); + pid, client->addrstr); client->auth = REMOTE_AUTH_NONE; } } @@ -1451,7 +1451,7 @@ static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket } else { PROBE(CLIENT_TLS_FAIL, "fd=%d", client->fd); VIR_ERROR(_("TLS handshake failed for client %s: %s"), - addrstr, gnutls_strerror (ret)); + client->addrstr, gnutls_strerror (ret)); goto error; } } @@ -1600,15 +1600,20 @@ static void *qemudWorker(void *data) } } -static int qemudStartWorker(struct qemud_server *server, - struct qemud_worker *worker) { +static int +qemudStartWorker(struct qemud_server *server, + struct qemud_worker *worker) +{ pthread_attr_t attr; - pthread_attr_init(&attr); + int ret = -1; + + if (pthread_attr_init(&attr) != 0) + return -1; /* We want to join workers, so don't detach them */ /*pthread_attr_setdetachstate(&attr, 1);*/ if (worker->hasThread) - return -1; + goto cleanup; worker->server = server; worker->hasThread = 1; @@ -1621,10 +1626,13 @@ static int qemudStartWorker(struct qemud_server *server, worker) != 0) { worker->hasThread = 0; worker->server = NULL; - return -1; + goto cleanup; } - return 0; + ret = 0; +cleanup: + pthread_attr_destroy(&attr); + return ret; } @@ -2283,6 +2291,7 @@ static void qemudFreeClient(struct qemud_client *client) { if (client->conn) virConnectClose(client->conn); virMutexDestroy(&client->lock); + VIR_FREE(client->addrstr); VIR_FREE(client); } @@ -2403,15 +2412,24 @@ cleanup: server->workers[i].hasThread = 0; } VIR_FREE(server->workers); + for (i = 0; i < server->nclients; i++) + qemudFreeClient(server->clients[i]); + server->nclients = 0; + VIR_SHRINK_N(server->clients, server->nclients_max, server->nclients_max); virMutexUnlock(&server->lock); return NULL; } -static int qemudStartEventLoop(struct qemud_server *server) { +static int +qemudStartEventLoop(struct qemud_server *server) +{ pthread_attr_t attr; - pthread_attr_init(&attr); + int ret = -1; + + if (pthread_attr_init(&attr) != 0) + return -1; /* We want to join the eventloop, so don't detach it */ /*pthread_attr_setdetachstate(&attr, 1);*/ @@ -2419,11 +2437,14 @@ static int qemudStartEventLoop(struct qemud_server *server) { &attr, qemudRunLoop, server) != 0) - return -1; + goto cleanup; server->hasEventThread = 1; - return 0; + ret = 0; +cleanup: + pthread_attr_destroy(&attr); + return ret; } @@ -3154,6 +3175,13 @@ int main(int argc, char **argv) { if (godaemon) { char ebuf[1024]; + + if (chdir("/") < 0) { + VIR_ERROR(_("cannot change to root directory: %s"), + virStrerror(errno, ebuf, sizeof(ebuf))); + goto error; + } + if ((statuswrite = daemonForkIntoBackground()) < 0) { VIR_ERROR(_("Failed to fork as daemon: %s"), virStrerror(errno, ebuf, sizeof ebuf)); |