diff options
-rw-r--r-- | abs/extra/gamin/0001-Poll-files-on-nfs4.patch | 27 | ||||
-rw-r--r-- | abs/extra/gamin/18_gam_server_deadlocks.patch | 70 | ||||
-rw-r--r-- | abs/extra/gamin/PKGBUILD | 53 | ||||
-rw-r--r-- | abs/extra/gamin/fix-deprecated-const.patch | 56 |
4 files changed, 206 insertions, 0 deletions
diff --git a/abs/extra/gamin/0001-Poll-files-on-nfs4.patch b/abs/extra/gamin/0001-Poll-files-on-nfs4.patch new file mode 100644 index 0000000..f776732 --- /dev/null +++ b/abs/extra/gamin/0001-Poll-files-on-nfs4.patch @@ -0,0 +1,27 @@ +From b92b17ecced6df463da73d6de566740cf5cd00d4 Mon Sep 17 00:00:00 2001 +From: Marek Kasik <mkasik@redhat.com> +Date: Fri, 1 Feb 2013 15:19:58 +0100 +Subject: [PATCH 1/2] Poll files on nfs4 + +Add nfs4 among polled filesystems. + +https://bugzilla.gnome.org/show_bug.cgi?id=693006 +--- + server/gam_fs.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/server/gam_fs.c b/server/gam_fs.c +index c8ca704..143a603 100644 +--- a/server/gam_fs.c ++++ b/server/gam_fs.c +@@ -178,6 +178,7 @@ gam_fs_init (void) + gam_fs_set ("reiserfs", GFS_MT_DEFAULT, 0); + gam_fs_set ("novfs", GFS_MT_POLL, 30); + gam_fs_set ("nfs", GFS_MT_POLL, 5); ++ gam_fs_set ("nfs4", GFS_MT_POLL, 5); + if (stat("/etc/mtab", &mtab_sbuf) != 0) + { + GAM_DEBUG(DEBUG_INFO, "Could not stat /etc/mtab\n"); +-- +1.8.1.2 + diff --git a/abs/extra/gamin/18_gam_server_deadlocks.patch b/abs/extra/gamin/18_gam_server_deadlocks.patch new file mode 100644 index 0000000..ef77496 --- /dev/null +++ b/abs/extra/gamin/18_gam_server_deadlocks.patch @@ -0,0 +1,70 @@ +From cc14440eface093548cb3bc7814da11d9a99d283 Mon Sep 17 00:00:00 2001 +From: Anssi Hannula <anssi@mageia.org> +Date: Wed, 4 Jan 2012 00:23:55 +0200 +Subject: [PATCH] fix possible server deadlock in ih_sub_cancel + +ih_sub_foreach() calls ih_sub_cancel() while inotify_lock is locked. +However, ih_sub_cancel() locks it again, and locking GMutex recursively +causes undefined behaviour. + +Fix that by removing locking from ih_sub_cancel() as ih_sub_foreach() +is its only user. Also make the function static so that it won't +accidentally get used by other files without locking (inotify-helper.h +is an internal server header). + +This should fix the intermittent deadlocks I've been experiencing +causing KDE applications to no longer start, and probably also +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542361 + +Origin: http://bugzilla-attachments.gnome.org/attachment.cgi?id=204537 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gamin/+bug/926862 +Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542361 + +--- + server/inotify-helper.c | 7 ++----- + server/inotify-helper.h | 1 - + 2 files changed, 2 insertions(+), 6 deletions(-) + +diff --git a/server/inotify-helper.c b/server/inotify-helper.c +index d77203e..0789fa4 100644 +--- a/server/inotify-helper.c ++++ b/server/inotify-helper.c +@@ -123,13 +123,11 @@ ih_sub_add (ih_sub_t * sub) + + /** + * Cancels a subscription which was being monitored. ++ * inotify_lock must be held when calling. + */ +-gboolean ++static gboolean + ih_sub_cancel (ih_sub_t * sub) + { +- G_LOCK(inotify_lock); +- +- + if (!sub->cancelled) + { + IH_W("cancelling %s\n", sub->pathname); +@@ -140,7 +138,6 @@ ih_sub_cancel (ih_sub_t * sub) + sub_list = g_list_remove (sub_list, sub); + } + +- G_UNLOCK(inotify_lock); + return TRUE; + } + +diff --git a/server/inotify-helper.h b/server/inotify-helper.h +index 5d3b6d0..d36b5fd 100644 +--- a/server/inotify-helper.h ++++ b/server/inotify-helper.h +@@ -34,7 +34,6 @@ gboolean ih_startup (event_callback_t ecb, + found_callback_t fcb); + gboolean ih_running (void); + gboolean ih_sub_add (ih_sub_t *sub); +-gboolean ih_sub_cancel (ih_sub_t *sub); + + /* Return FALSE from 'f' if the subscription should be cancelled */ + void ih_sub_foreach (void *callerdata, gboolean (*f)(ih_sub_t *sub, void *callerdata)); +-- +1.7.7.2 + diff --git a/abs/extra/gamin/PKGBUILD b/abs/extra/gamin/PKGBUILD new file mode 100644 index 0000000..495eab4 --- /dev/null +++ b/abs/extra/gamin/PKGBUILD @@ -0,0 +1,53 @@ +# $Id$ +# Maintainer: +# Contributor: Abhishek Dasgupta <abhidg@gmail.com> +# Contributor: Pulphix <crimea.v@libero.it> + +pkgname=gamin +pkgver=0.1.10 +pkgrel=8 +pkgdesc='File and directory monitoring system defined to be a subset of the FAM (File Alteration Monitor)' +url='http://www.gnome.org/~veillard/gamin' +license=('GPL') +arch=('x86_64') +depends=('glib2') +makedepends=('python2') +optdepends=('python2: for the python module') +provides=('fam') +conflicts=('fam') +source=("$url/sources/${pkgname}-${pkgver}.tar.gz" + 'fix-deprecated-const.patch' + '18_gam_server_deadlocks.patch' + '0001-Poll-files-on-nfs4.patch') +md5sums=('b4ec549e57da470c04edd5ec2876a028' + 'f679aeb48fe9dd376c8828cc9b6941ab' + '4784359a3206bfa3c0dce1c23468f87f' + '6711cd0b1e8d2ad038c5761715d084a5') + +prepare() { + cd $pkgname-$pkgver + + # https://bugs.archlinux.org/task/33642 + patch -Np1 -i ../18_gam_server_deadlocks.patch + + patch -Np1 -i ../fix-deprecated-const.patch + patch -Np1 -i ../0001-Poll-files-on-nfs4.patch + + # python 2 + sed -i 's_#!/usr/bin/env python_#!/usr/bin/env python2_' python/gamin.py +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-static --with-threads \ + --disable-debug-api --disable-debug --libexecdir=/usr/lib/gamin \ + --with-python=/usr/bin/python2 + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install +} + +# vim:set ts=2 sw=2 et: diff --git a/abs/extra/gamin/fix-deprecated-const.patch b/abs/extra/gamin/fix-deprecated-const.patch new file mode 100644 index 0000000..3d5f613 --- /dev/null +++ b/abs/extra/gamin/fix-deprecated-const.patch @@ -0,0 +1,56 @@ +Description: Don't use deprecated G_CONST_RETURN. Fixes building with newer glib versions. +Author: Matthias Klose <doko@ubuntu.com> +Bug-Ubuntu: https://launchpad.net/bugs/829504 + +Index: gamin/server/gam_node.c +=================================================================== +--- gamin.orig/server/gam_node.c 2011-10-18 16:09:04.873780685 +0200 ++++ gamin/server/gam_node.c 2011-10-18 16:09:01.965780543 +0200 +@@ -122,7 +122,7 @@ + * it has finished with the string. If it must keep it longer, it + * should makes its own copy. The returned string must not be freed. + */ +-G_CONST_RETURN char * ++const char * + gam_node_get_path(GamNode * node) + { + g_assert(node); +Index: gamin/server/gam_node.h +=================================================================== +--- gamin.orig/server/gam_node.h 2011-10-18 16:09:04.729780677 +0200 ++++ gamin/server/gam_node.h 2011-10-18 16:09:01.961780544 +0200 +@@ -58,7 +58,7 @@ + void gam_node_set_is_dir (GamNode *node, + gboolean is_dir); + +-G_CONST_RETURN char *gam_node_get_path (GamNode *node); ++const char *gam_node_get_path (GamNode *node); + + GList *gam_node_get_subscriptions (GamNode *node); + +Index: gamin/server/gam_subscription.c +=================================================================== +--- gamin.orig/server/gam_subscription.c 2011-10-18 16:09:04.817780682 +0200 ++++ gamin/server/gam_subscription.c 2011-10-18 16:09:01.965780543 +0200 +@@ -141,7 +141,7 @@ + * @param sub the GamSubscription + * @returns The path being monitored. It should not be freed. + */ +-G_CONST_RETURN char * ++const char * + gam_subscription_get_path(GamSubscription * sub) + { + if (sub == NULL) +Index: gamin/server/gam_subscription.h +=================================================================== +--- gamin.orig/server/gam_subscription.h 2011-10-18 16:09:04.929780687 +0200 ++++ gamin/server/gam_subscription.h 2011-10-18 16:09:01.965780543 +0200 +@@ -21,7 +21,7 @@ + + int gam_subscription_get_reqno (GamSubscription *sub); + +-G_CONST_RETURN char *gam_subscription_get_path (GamSubscription *sub); ++const char *gam_subscription_get_path (GamSubscription *sub); + + GamListener *gam_subscription_get_listener (GamSubscription *sub); + |