Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Jan 2018 21:26:57 +0000 (UTC)
From:      Koop Mast <kwm@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r460052 - in head/devel/glib20: . files
Message-ID:  <201801262126.w0QLQvAn010936@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kwm
Date: Fri Jan 26 21:26:57 2018
New Revision: 460052
URL: https://svnweb.freebsd.org/changeset/ports/460052

Log:
  Update glib to 2.50.3.
  
  Also redo the kqueue patches. Now we patch files only once, and add some
  bits that got lost somewhere (which is probably my fault). Which where
  causing crashes when for example nautilus or thundar where monitoring
  directories and files where added/removed.
  
  PR:		199872

Added:
  head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c   (contents, props changed)
  head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c   (contents, props changed)
Deleted:
  head/devel/glib20/files/patch-bug739424
  head/devel/glib20/files/patch-bug778515
Modified:
  head/devel/glib20/Makefile
  head/devel/glib20/distinfo

Modified: head/devel/glib20/Makefile
==============================================================================
--- head/devel/glib20/Makefile	Fri Jan 26 21:04:32 2018	(r460051)
+++ head/devel/glib20/Makefile	Fri Jan 26 21:26:57 2018	(r460052)
@@ -2,8 +2,7 @@
 # $FreeBSD$
 
 PORTNAME=	glib
-PORTVERSION=	2.50.2
-PORTREVISION=	7
+PORTVERSION=	2.50.3
 PORTEPOCH=	1
 CATEGORIES=	devel
 MASTER_SITES=	GNOME
@@ -39,7 +38,7 @@ INSTALL_TARGET=	install-strip
 
 SHEBANG_FILES=	*/*.pl
 
-LIBVERSION=	0.5000.2
+LIBVERSION=	0.5000.3
 PLIST_SUB+=	LIBVERSION=${LIBVERSION}
 
 glib_MAN=	gtester.1 gtester-report.1 glib-gettextize.1

Modified: head/devel/glib20/distinfo
==============================================================================
--- head/devel/glib20/distinfo	Fri Jan 26 21:04:32 2018	(r460051)
+++ head/devel/glib20/distinfo	Fri Jan 26 21:26:57 2018	(r460052)
@@ -1,3 +1,3 @@
-TIMESTAMP = 1491129093
-SHA256 (gnome2/glib-2.50.2.tar.xz) = be68737c1f268c05493e503b3b654d2b7f43d7d0b8c5556f7e4651b870acfbf5
-SIZE (gnome2/glib-2.50.2.tar.xz) = 7582312
+TIMESTAMP = 1516046336
+SHA256 (gnome2/glib-2.50.3.tar.xz) = 82ee94bf4c01459b6b00cb9db0545c2237921e3060c0b74cff13fbc020cfd999
+SIZE (gnome2/glib-2.50.3.tar.xz) = 7589284

Added: head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c	Fri Jan 26 21:26:57 2018	(r460052)
@@ -0,0 +1,45 @@
+https://bugzilla.gnome.org/show_bug.cgi?id=739424
+https://bug739424.bugzilla-attachments.gnome.org/attachment.cgi?id=351191
+
+--- gio/kqueue/gkqueuefilemonitor.c.orig	2018-01-15 21:00:32.535064000 +0100
++++ gio/kqueue/gkqueuefilemonitor.c	2018-01-15 21:07:20.920334000 +0100
+@@ -29,6 +29,15 @@
+ #include <gio/gfile.h>
+ #include <gio/giomodule.h>
+ 
++/*
++ * Because ``kqueue_sub'' are not refcounted, we need
++ * ensure no other thread is getting a reference to
++ * the element we want to free.
++ *
++ * That's why _kh_cancel_sub() must be called with
++ * this lock held to prevent a race.
++ */
++G_LOCK_EXTERN (hash_lock);
+ 
+ struct _GKqueueFileMonitor
+ {
+@@ -80,9 +89,11 @@ g_kqueue_file_monitor_finalize (GObject *object)
+ 
+   if (kqueue_monitor->sub)
+     {
++      G_LOCK (hash_lock);
+       _kh_cancel_sub (kqueue_monitor->sub);
+       _kh_sub_free (kqueue_monitor->sub);
+       kqueue_monitor->sub = NULL;
++      G_UNLOCK (hash_lock);
+     }
+ 
+   if (kqueue_monitor->fallback)
+@@ -181,9 +192,11 @@ g_kqueue_file_monitor_cancel (GFileMonitor *monitor)
+ 
+   if (kqueue_monitor->sub)
+     {
++      G_LOCK (hash_lock);
+       _kh_cancel_sub (kqueue_monitor->sub);
+       _kh_sub_free (kqueue_monitor->sub);
+       kqueue_monitor->sub = NULL;
++      G_UNLOCK (hash_lock);
+     }
+   else if (kqueue_monitor->fallback)
+     {

Added: head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c	Fri Jan 26 21:26:57 2018	(r460052)
@@ -0,0 +1,81 @@
+This bug combines serveral patches:
+https://bugzilla.gnome.org/show_bug.cgi?id=778515
+and
+https://bugzilla.gnome.org/show_bug.cgi?id=739424
+https://bug739424.bugzilla-attachments.gnome.org/attachment.cgi?id=351191
+
+--- gio/kqueue/kqueue-helper.c.orig	2018-01-15 21:22:08.234860000 +0100
++++ gio/kqueue/kqueue-helper.c	2018-01-15 21:21:54.143656000 +0100
+@@ -43,7 +43,7 @@ static gboolean kh_debug_enabled = FALSE;
+ #define KH_W if (kh_debug_enabled) g_warning
+ 
+ static GHashTable *subs_hash_table = NULL;
+-G_LOCK_DEFINE_STATIC (hash_lock);
++G_LOCK_DEFINE (hash_lock);
+ 
+ static int kqueue_descriptor = -1;
+ static int kqueue_socket_pair[] = {-1, -1};
+@@ -291,10 +291,10 @@ process_kqueue_notifications (GIOChannel   *gioc,
+ 
+   G_LOCK (hash_lock);
+   sub = (kqueue_sub *) g_hash_table_lookup (subs_hash_table, GINT_TO_POINTER (n.fd));
+-  G_UNLOCK (hash_lock);
+ 
+   if (sub == NULL)
+     {
++      G_UNLOCK (hash_lock);
+       KH_W ("Got a notification for a deleted or non-existing subscription %d",
+              n.fd);
+       return TRUE;
+@@ -336,6 +336,7 @@ process_kqueue_notifications (GIOChannel   *gioc,
+         g_file_monitor_source_handle_event (source, mask, NULL, NULL, NULL, g_get_monotonic_time ());
+     }
+ 
++  G_UNLOCK (hash_lock);
+   return TRUE;
+ }
+ 
+@@ -451,13 +452,14 @@ _kh_start_watching (kqueue_sub *sub)
+ 
+   G_LOCK (hash_lock);
+   g_hash_table_insert (subs_hash_table, GINT_TO_POINTER (sub->fd), sub);
+-  G_UNLOCK (hash_lock);
+ 
+   _kqueue_thread_push_fd (sub->fd);
+   
+   /* Bump the kqueue thread. It will pick up a new sub entry to monitor */
+   if (!_ku_write (kqueue_socket_pair[0], "A", 1))
+     KH_W ("Failed to bump the kqueue thread (add fd, error %d)", errno);
++  G_UNLOCK (hash_lock);
++
+   return TRUE;
+ }
+ 
+@@ -498,22 +500,15 @@ _kh_add_sub (kqueue_sub *sub)
+ gboolean
+ _kh_cancel_sub (kqueue_sub *sub)
+ {
+-  gboolean missing = FALSE;
++  gboolean removed = FALSE;
+   g_assert (kqueue_socket_pair[0] != -1);
+   g_assert (sub != NULL);
+ 
+-  G_LOCK (hash_lock);
+-  missing = !g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd));
+-  G_UNLOCK (hash_lock);
++  _km_remove (sub);
+ 
+-  if (missing)
+-    {
+-      /* If there were no fd for this subscription, file is still
+-       * missing. */
+-      KH_W ("Removing subscription from missing");
+-      _km_remove (sub);
+-    }
+-  else
++  removed = g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd));
++
++  if (removed)
+     {
+       /* fd will be closed in the kqueue thread */
+       _kqueue_thread_remove_fd (sub->fd);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801262126.w0QLQvAn010936>