Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=gcc6.git;a=commitdiff;h=a6f19c1df25efbe4f13dd633051762481d58a890

commit a6f19c1df25efbe4f13dd633051762481d58a890
Author: crazy <cr...@frugalware.org>
Date:   Thu Sep 22 21:14:59 2016 +0200

networkmanager-1.4.0-3-x86_64
* backport dbus / gbus patches from git

diff --git a/source/base/networkmanager/FrugalBuild 
b/source/base/networkmanager/FrugalBuild
index ac9885a..b1b4d62 100644
--- a/source/base/networkmanager/FrugalBuild
+++ b/source/base/networkmanager/FrugalBuild
@@ -5,7 +5,7 @@
pkgname=networkmanager
_F_gnome_name=NetworkManager
pkgver=1.4.0
-pkgrel=2
+pkgrel=3
pkgdesc="Network Management daemon"
depends=('wireless_tools>=29-5' 'iproute2>=4.7.0-2' 'nss>=3.21-2' 
'libgcrypt>=1.7.3-2' \
'libnl>=3.2.9-2' 'ppp>=2.4.7-3' 'wpa_supplicant>=2.5-4' 'iptables' 
'polkit>=0.113-9' 'ca-certificates' \
@@ -17,9 +17,11 @@ archs=('i686' 'x86_64')
_F_gnome_ext=.tar.xz
_F_gnome_devel="n"
Finclude gnome
+source+=(nm_exported_dbus.patch)
options+=('scriptlet')
backup=('etc/NetworkManager/NetworkManager.conf')
-sha1sums=('96e38ddd0ff256e8e234e76693165192e46d9b13')
+sha1sums=('96e38ddd0ff256e8e234e76693165192e46d9b13' \
+          '8b72ff0a0b8f4ec3668e13cd7e3602fd0196fc93')
_F_cd_path=$_F_gnome_name-$pkgver

_F_systemd_units=(NetworkManager=e)
@@ -40,6 +42,7 @@ build() {
Fbuild
Fmkdir etc/NetworkManager/system-connections
Fmkdir etc/NetworkManager/dispatcher.d
+       Fmkdir etc/NetworkManager/dnsmasq.d
cat > $Fdestdir/etc/NetworkManager/NetworkManager.conf << EOF
[main]
plugins = keyfile
diff --git a/source/base/networkmanager/nm_exported_dbus.patch 
b/source/base/networkmanager/nm_exported_dbus.patch
new file mode 100644
index 0000000..97d0285
--- /dev/null
+++ b/source/base/networkmanager/nm_exported_dbus.patch
@@ -0,0 +1,219 @@
+diff -Naur NetworkManager-1.4.0/src/nm-exported-object.c 
NetworkManager-1.4.0-p/src/nm-exported-object.c
+--- NetworkManager-1.4.0/src/nm-exported-object.c      2016-08-24 
15:09:03.000000000 +0200
++++ NetworkManager-1.4.0-p/src/nm-exported-object.c    2016-09-22 
21:05:03.239997657 +0200
+@@ -38,14 +38,13 @@
+ typedef struct {
+       GDBusInterfaceSkeleton *interface;
+       guint property_changed_signal_id;
++      GHashTable *pending_notifies;
+ } InterfaceData;
+
+ typedef struct {
+       NMBusManager *bus_mgr;
+       char *path;
+
+-      GHashTable *pending_notifies;
+-
+       InterfaceData *interfaces;
+       guint num_interfaces;
+
+@@ -268,8 +267,8 @@
+                                 nm_exported_object_class_info_quark (), 
classinfo);
+       }
+
+-      classinfo->skeleton_types = g_slist_prepend (classinfo->skeleton_types,
+-                                                   GSIZE_TO_POINTER 
(dbus_skeleton_type));
++      classinfo->skeleton_types = g_slist_append (classinfo->skeleton_types,
++                                                  GSIZE_TO_POINTER 
(dbus_skeleton_type));
+
+       /* Ensure @dbus_skeleton_type's class_init has run, so its 
signals/properties
+        * will be defined.
+@@ -492,6 +491,11 @@
+               g_dbus_object_skeleton_add_interface ((GDBusObjectSkeleton *) 
self, ifdata->interface);
+
+               ifdata->property_changed_signal_id = g_signal_lookup 
("properties-changed", G_OBJECT_TYPE (ifdata->interface));
++
++              ifdata->pending_notifies = g_hash_table_new_full (g_direct_hash,
++                                                                
g_direct_equal,
++                                                                NULL,
++                                                                
(GDestroyNotify) g_variant_unref);
+       }
+       nm_assert (i == 0);
+
+@@ -542,6 +546,7 @@
+
+               g_dbus_object_skeleton_remove_interface ((GDBusObjectSkeleton 
*) self, ifdata->interface);
+               nm_exported_object_skeleton_release (ifdata->interface);
++              g_hash_table_destroy (ifdata->pending_notifies);
+       }
+
+       g_slice_free1 (sizeof (InterfaceData) * n, priv->interfaces);
+@@ -701,11 +706,7 @@
+
+       g_clear_pointer (&priv->path, g_free);
+
+-      if (nm_clear_g_source (&priv->notify_idle_id)) {
+-              /* We had a notification queued. Since we removed all 
interfaces,
+-               * the notification is obsolete and must be cleaned up. */
+-              g_hash_table_remove_all (priv->pending_notifies);
+-      }
++      nm_clear_g_source (&priv->notify_idle_id);
+ }
+
+ 
/*****************************************************************************/
+@@ -784,53 +785,60 @@
+ idle_emit_properties_changed (gpointer self)
+ {
+       NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
+-      gs_unref_variant GVariant *variant = NULL;
+-      InterfaceData *ifdata = NULL;
+-      GHashTableIter hash_iter;
+-      GVariantBuilder notifies;
+-      guint i, n;
+-      PendingNotifiesItem *values;
++      guint k;
+
+       priv->notify_idle_id = 0;
+
++      for (k = 0; k < priv->num_interfaces; k++) {
++              InterfaceData *ifdata = &priv->interfaces[k];
++              gs_unref_variant GVariant *variant = NULL;
++              PendingNotifiesItem *values;
++              GVariantBuilder notifies;
++              GHashTableIter hash_iter;
++              guint i, n;
+
+-      n = g_hash_table_size (priv->pending_notifies);
+-      g_return_val_if_fail (n > 0, FALSE);
+-
+-      values = g_alloca (sizeof (values[0]) * n);
+-
+-      i = 0;
+-      g_hash_table_iter_init (&hash_iter, priv->pending_notifies);
+-      while (g_hash_table_iter_next (&hash_iter, (gpointer) 
&values[i].property_name, (gpointer) &values[i].variant))
+-              i++;
+-      nm_assert (i == n);
+-
+-      g_qsort_with_data (values, n, sizeof (values[0]), 
_sort_pending_notifies, NULL);
+-
+-      g_variant_builder_init (&notifies, G_VARIANT_TYPE_VARDICT);
+-      for (i = 0; i < n; i++)
+-              g_variant_builder_add (&notifies, "{sv}", 
values[i].property_name, values[i].variant);
+-      variant = g_variant_ref_sink (g_variant_builder_end (&notifies));
++              n = g_hash_table_size (ifdata->pending_notifies);
++              if (n == 0)
++                      continue;
+
+-      g_hash_table_remove_all (priv->pending_notifies);
++              if (!ifdata->property_changed_signal_id)
++                      goto next;
+
+-      for (i = 0; i < priv->num_interfaces; i++) {
+-              if (priv->interfaces[i].property_changed_signal_id != 0) {
+-                      ifdata = &priv->interfaces[i];
+-                      break;
++              /* We use here alloca in a loop, something that is usually 
avoided.
++               * But the number of interfaces "priv->num_interfaces" is small 
(determined by
++               * the depth of the type inheritence) and the number of 
possible pending_notifies
++               * "n" is small (determined by the number of GObject 
properties). */
++              values = g_alloca (sizeof (values[0]) * n);
++
++              i = 0;
++              g_hash_table_iter_init (&hash_iter, ifdata->pending_notifies);
++              while (g_hash_table_iter_next (&hash_iter, (gpointer) 
&values[i].property_name, (gpointer) &values[i].variant))
++                      i++;
++              nm_assert (i == n);
++
++              g_qsort_with_data (values, n, sizeof (values[0]), 
_sort_pending_notifies, NULL);
++
++              g_variant_builder_init (&notifies, G_VARIANT_TYPE_VARDICT);
++              for (i = 0; i < n; i++)
++                      g_variant_builder_add (&notifies, "{sv}", 
values[i].property_name, values[i].variant);
++              variant = g_variant_ref_sink (g_variant_builder_end 
(&notifies));
++
++
++              if (nm_logging_enabled (LOGL_DEBUG, LOGD_DBUS_PROPS)) {
++                      gs_free char *notification = g_variant_print (variant, 
TRUE);
++
++                      nm_log_dbg (LOGD_DBUS_PROPS, "properties-changed[%p]: 
type %s, iface %s: %s",
++                                  self, G_OBJECT_TYPE_NAME (self), 
G_OBJECT_TYPE_NAME (ifdata->interface),
++                                  notification);
+               }
+-      }
+-      g_return_val_if_fail (ifdata, FALSE);
+
+-      if (nm_logging_enabled (LOGL_DEBUG, LOGD_DBUS_PROPS)) {
+-              gs_free char *notification = g_variant_print (variant, TRUE);
++              g_signal_emit (ifdata->interface, 
ifdata->property_changed_signal_id, 0, variant);
+
+-              nm_log_dbg (LOGD_DBUS_PROPS, "PropertiesChanged %s %p: %s",
+-                          G_OBJECT_TYPE_NAME (self), self, notification);
++next:
++              g_hash_table_remove_all (ifdata->pending_notifies);
+       }
+
+-      g_signal_emit (ifdata->interface, ifdata->property_changed_signal_id, 
0, variant);
+-      return FALSE;
++      return G_SOURCE_REMOVE;
+ }
+
+ static void
+@@ -841,6 +849,7 @@
+       GType type;
+       const char *dbus_property_name = NULL;
+       GValue value = G_VALUE_INIT;
++      InterfaceData *ifdata = NULL;
+       const GVariantType *vtype;
+       guint i, j;
+
+@@ -857,16 +866,16 @@
+                       break;
+       }
+       if (!dbus_property_name) {
+-              nm_log_trace (LOGD_DBUS_PROPS, "ignoring notification for prop 
%s on type %s",
+-                            pspec->name, G_OBJECT_TYPE_NAME (object));
++              nm_log_trace (LOGD_DBUS_PROPS, "properties-changed[%p]: 
ignoring notification for prop %s on type %s",
++                            object, pspec->name, G_OBJECT_TYPE_NAME (object));
+               return;
+       }
+
+       for (i = 0; i < priv->num_interfaces; i++) {
+-              GDBusInterfaceSkeleton *skel = priv->interfaces[i].interface;
+               GDBusInterfaceInfo *iinfo;
+
+-              iinfo = g_dbus_interface_skeleton_get_info (skel);
++              ifdata = &priv->interfaces[i];
++              iinfo = g_dbus_interface_skeleton_get_info (ifdata->interface);
+               for (j = 0; iinfo->properties[j]; j++) {
+                       if (nm_streq (iinfo->properties[j]->name, 
dbus_property_name)) {
+                               vtype = G_VARIANT_TYPE 
(iinfo->properties[j]->signature);
+@@ -882,7 +891,7 @@
+
+       /* @dbus_property_name is inside classinfo and never freed, thus we 
don't clone it.
+        * Also, we do a pointer, not string comparison. */
+-      g_hash_table_insert (priv->pending_notifies,
++      g_hash_table_insert (ifdata->pending_notifies,
+                            (gpointer) dbus_property_name,
+                            g_dbus_gvalue_to_gvariant (&value, vtype));
+       g_value_unset (&value);
+@@ -896,12 +905,6 @@
+ static void
+ nm_exported_object_init (NMExportedObject *self)
+ {
+-      NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self);
+-
+-      priv->pending_notifies = g_hash_table_new_full (g_direct_hash,
+-                                                      g_direct_equal,
+-                                                      NULL,
+-                                                      (GDestroyNotify) 
g_variant_unref);
+ }
+
+ static void
+@@ -937,7 +940,6 @@
+       } else
+               g_clear_pointer (&priv->path, g_free);
+
+-      g_clear_pointer (&priv->pending_notifies, g_hash_table_destroy);
+       nm_clear_g_source (&priv->notify_idle_id);
+
+       G_OBJECT_CLASS (nm_exported_object_parent_class)->dispose (object);
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to