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>