Index: head/devel/glib20/Makefile =================================================================== --- head/devel/glib20/Makefile (revision 460229) +++ head/devel/glib20/Makefile (revision 460230) @@ -1,110 +1,111 @@ # Created by: Vanilla I. Shu # $FreeBSD$ PORTNAME= glib PORTVERSION= 2.50.3 +PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= devel MASTER_SITES= GNOME DIST_SUBDIR= gnome2 MAINTAINER= gnome@FreeBSD.org COMMENT= Some useful routines of C programming (current stable version) LICENSE= LGPL20 USES= tar:xz PORTSCOUT= limitw:1,even .if !defined(REFERENCE_PORT) LIB_DEPENDS+= libpcre.so:devel/pcre \ libffi.so:devel/libffi GNU_CONFIGURE= yes USE_LDCONFIG= yes # iconv:wchar_t - our iconv in base doesn't support utf-8 -> wchar_t (boooo) # (wchar_t is used by glibmm, rawtherapee triggered this) USES+= compiler:c11 gettext gmake gnome iconv:wchar_t libtool \ localbase pathfix perl5 pkgconfig python shebangfix USE_PYTHON= py3kplist CONFIGURE_ARGS= --disable-gtk-doc --with-html-dir=${PREFIX}/share/doc \ --disable-man --without-xml-catalog \ --enable-static=yes \ --with-pcre=system \ --disable-fam CONFIGURE_ENV= ac_cv_header_sys_inotify_h= INSTALL_TARGET= install-strip SHEBANG_FILES= */*.pl LIBVERSION= 0.5000.3 PLIST_SUB+= LIBVERSION=${LIBVERSION} glib_MAN= gtester.1 gtester-report.1 glib-gettextize.1 gio_MAN= gdbus.1 gsettings.1 gio-querymodules.1 \ glib-compile-schemas.1 gapplication.1 \ glib-compile-resources.1 gresource.1 gdbus-codegen.1 gobject_MAN= glib-genmarshal.1 glib-mkenums.1 gobject-query.1 OPTIONS_DEFINE= COLLATION_FIX DEBUG NLS OPTIONS_SUB= yes # libc collation was fixed by https://svnweb.freebsd.org/changeset/base/290494 COLLATION_FIX_DESC= Use ICU for UTF-8 string collation (if libc is broken) OPTIONS_EXCLUDE_FreeBSD_11= COLLATION_FIX OPTIONS_EXCLUDE_FreeBSD_12= COLLATION_FIX DEBUG_CONFIGURE_ON= --enable-debug=yes COLLATION_FIX_LIB_DEPENDS+= libicui18n.so:devel/icu COLLATION_FIX_EXTRA_PATCHES+= ${FILESDIR}/extra-patch-glib_Makefile.in \ ${FILESDIR}/extra-patch-glib_gunicollate.c # Disable it until someone can figure why it causes net-im/pidgin crashed. # http://www.freebsd.org/cgi/query-pr.cgi?pr=175930 see comment by ed@ #COLLATION_FIX_CONFIGURE_ENV+= CFLAGS="-D__STDC_ISO_10646__" .include # doesn't build yet CONFIGURE_ARGS+=--disable-dtrace .if empty(ICONV_LIB) CONFIGURE_ARGS+= --with-libiconv=no .else CONFIGURE_ARGS+= --with-libiconv=gnu .endif .if ${ARCH} == powerpc64 EXTRA_PATCHES= ${FILESDIR}/extra-arch-powerpc64 .endif # Let glib use asm code for implementing atomic ops on i386 and amd64. .if ${ARCH} == "i386" GLIB_ARCH= i486 .elif ${ARCH} == "amd64" GLIB_ARCH= x86_64 .else GLIB_ARCH= ${ARCH} .endif CONFIGURE_TARGET=${GLIB_ARCH}-portbld-freebsd${OSREL} post-patch: @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g ; \ s|/usr/share/locale/locale|${LOCALBASE}/share/locale/locale|g' \ ${WRKSRC}/glib/gutils.c @${REINPLACE_CMD} -e 's|inotify_support=yes|inotify_support=no| ; \ s|-Werror|| ; \ s|#define HAVE_SYS_INOTIFY_H 1||' ${WRKSRC}/configure post-install: @${MKDIR} ${STAGEDIR}${PREFIX}/share/GConf/gsettings @${MKDIR} ${STAGEDIR}${PREFIX}/lib/gio/modules .for m in glib gio gobject ${INSTALL_MAN} ${${m}_MAN:S|^|${WRKSRC}/docs/reference/${m}/|} \ ${STAGEDIR}${PREFIX}/man/man1 .endfor .include .endif Index: head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c =================================================================== --- head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c (revision 460229) +++ head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c (revision 460230) @@ -1,81 +1,96 @@ 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 +https://bugzilla.gnome.org/show_bug.cgi?id=776147 +https://git.gnome.org/browse/glib/commit/?id=76072a2dde4a4acc8be8d3c47efbc6811ebe0c1e + +--- gio/kqueue/kqueue-helper.c.orig 2018-01-28 21:18:25.213606000 +0100 ++++ gio/kqueue/kqueue-helper.c 2018-01-28 21:18:34.964780000 +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, +@@ -97,8 +97,10 @@ convert_kqueue_events_to_gio (uint32_t flags, gboolean + } + if (flags & NOTE_RENAME) + { ++ /* Since there’s apparently no way to get the new name of the file out of ++ * kqueue(), all we can do is say that this one has been deleted. */ + *done = TRUE; +- return G_FILE_MONITOR_EVENT_MOVED; ++ return G_FILE_MONITOR_EVENT_DELETED; + } + if (flags & NOTE_REVOKE) + { +@@ -291,10 +293,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, +@@ -336,6 +338,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) +@@ -451,13 +454,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) +@@ -498,22 +502,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);