
On Thu, Mar 22, 2018 at 01:10:14PM +0100, Pavel Hrdina wrote:
On Wed, Mar 21, 2018 at 02:21:05PM +0000, Daniel P. Berrangé wrote:
On Wed, Mar 21, 2018 at 11:02:43AM +0100, Pavel Hrdina wrote:
We will switch to GDBus implementation of D-Bus protocol because sd-bus implementation is not thread safe.
Processing messages in threads is essential since Libvirt API can take some significant amount of time to return and that would block the whole libvirt-dbus daemon.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> ---
Changes in v3: - fixed a bug while loading XML interface files, now it fails gracefully with error message
Changes in v2: - changed glib2 required version to 2.44.0, required for the auto-cleanup macros - changed libvirt-glib required version to 0.0.7
README | 1 + configure.ac | 12 ++ data/Makefile.am | 5 + libvirt-dbus.spec.in | 6 + src/Makefile.am | 17 ++- src/gdbus.c | 398 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/gdbus.h | 108 ++++++++++++++ test/Makefile.am | 3 +- test/travis-run | 2 +- 9 files changed, 547 insertions(+), 5 deletions(-) create mode 100644 src/gdbus.c create mode 100644 src/gdbus.h
diff --git a/README b/README index 754d957..a85114e 100644 --- a/README +++ b/README @@ -58,6 +58,7 @@ The packages required to build libvirt-dbus are
- systemd-211 - libvirt + - glib2
Patches submissions =================== diff --git a/configure.ac b/configure.ac index df1a375..0e3bc01 100644 --- a/configure.ac +++ b/configure.ac @@ -11,10 +11,14 @@ AC_USE_SYSTEM_EXTENSIONS
AM_SILENT_RULES([yes])
+GLIB2_REQUIRED=2.44.0 LIBVIRT_REQUIRED=1.2.8 SYSTEMD_REQUIRED=211 +LIBVIRT_GLIB_REQUIRED=0.0.7 +AC_SUBST([GLIB2_REQUIRED]) dnl used in the .spec file AC_SUBST([LIBVIRT_REQUIRED]) dnl used in the .spec file AC_SUBST([SYSTEMD_REQUIRED]) dnl used in the .spec file +AC_SUBST([LIBVIRT_GLIB_REQUIRED]) dnl used in the .spec file
LIBVIRT_DBUS_MAJOR_VERSION=`echo $VERSION | awk -F. '{print $1}'` LIBVIRT_DBUS_MINOR_VERSION=`echo $VERSION | awk -F. '{print $2}'` @@ -34,8 +38,11 @@ AC_PROG_MKDIR_P AM_PROG_CC_C_O AC_PROG_CC_STDC
+PKG_CHECK_MODULES(GIO2, gio-unix-2.0 >= GLIB2_REQUIRED) +PKG_CHECK_MODULES(GLIB2, glib-2.0 >= GLIB2_REQUIRED) PKG_CHECK_MODULES(LIBVIRT, libvirt >= $LIBVIRT_REQUIRED) PKG_CHECK_MODULES(SYSTEMD, libsystemd >= $SYSTEMD_REQUIRED) +PKG_CHECK_MODULES(LIBVIRT_GLIB, libvirt-glib-1.0 >= LIBVIRT_GLIB_REQUIRED)
LIBVIRT_COMPILE_WARNINGS LIBVIRT_LINKER_RELRO @@ -56,6 +63,11 @@ LIBVIRT_ARG_WITH([DBUS_SYSTEM_POLICIES], [where D-Bus system policies directory DBUS_SYSTEM_POLICIES_DIR="$with_dbus_system_policies" AC_SUBST(DBUS_SYSTEM_POLICIES_DIR)
+LIBVIRT_ARG_WITH([DBUS_INTERFACES], [where D-Bus interfaces directory is], + ['$(datadir)/dbus-1/interfaces']) +DBUS_INTERFACES_DIR="$with_dbus_interfaces" +AC_SUBST([DBUS_INTERFACES_DIR])
FYI, you can actually get the default value for this from pkg-config
$ pkgconf --variable interfaces_dir dbus-1 /usr/share/dbus-1/interfaces
And arguably don't need to make that configurable install dir at all with args. Not a blocker for this though, so fine if you patch that separately.
You would need a BuildRequires on dbus-devel to get the pkgconfig file though.
I was looking into it and the interfaces_dir variable was introduced in dbus 1.9.2 which would not work on CentOS 7, where the dbus version is 1.6.12. Moreover, they don't have variable for policies dir, so it might be better to keep it like it is.
Ok, makese sense. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|