parent
d4ebf1c00a
commit
515a3e3949
@ -0,0 +1,65 @@
|
||||
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
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,79 @@
|
||||
# Copyright 1999-2012 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/gam-server/gam-server-0.1.10-r1.ebuild,v 1.1 2012/05/04 00:39:09 tetromino Exp $
|
||||
|
||||
EAPI="3"
|
||||
GNOME_ORG_MODULE="gamin"
|
||||
|
||||
inherit autotools eutils flag-o-matic libtool multilib python gnome.org
|
||||
|
||||
DESCRIPTION="Library providing the FAM File Alteration Monitor API"
|
||||
HOMEPAGE="http://www.gnome.org/~veillard/gamin/"
|
||||
SRC_URI="${SRC_URI}
|
||||
mirror://gentoo/gamin-0.1.9-freebsd.patch.bz2
|
||||
http://pkgconfig.freedesktop.org/releases/pkg-config-0.26.tar.gz" # pkg.m4 for eautoreconf
|
||||
|
||||
LICENSE="LGPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
|
||||
IUSE="debug kernel_linux"
|
||||
|
||||
RDEPEND=">=dev-libs/glib-2:2
|
||||
>=dev-libs/libgamin-0.1.10
|
||||
!app-admin/fam
|
||||
!<app-admin/gamin-0.1.10"
|
||||
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
#S=${WORKDIR}/${MY_P}
|
||||
|
||||
src_prepare() {
|
||||
mv -vf "${WORKDIR}"/pkg-config-*/pkg.m4 "${WORKDIR}"/ || die
|
||||
|
||||
# Fix compile warnings; bug #188923
|
||||
epatch "${DISTDIR}/gamin-0.1.9-freebsd.patch.bz2"
|
||||
|
||||
# Fix file-collision due to shared library, upstream bug #530635
|
||||
epatch "${FILESDIR}/${PN}-0.1.10-noinst-lib.patch"
|
||||
|
||||
# Fix compilation with latest glib, bug #382783
|
||||
epatch "${FILESDIR}/${PN}-0.1.10-G_CONST_RETURN-removal.patch"
|
||||
|
||||
# Fix crosscompilation issues, bug #267604
|
||||
epatch "${FILESDIR}/${PN}-0.1.10-crosscompile-fix.patch"
|
||||
|
||||
# Enable linux specific features on armel, upstream bug #588338
|
||||
epatch "${FILESDIR}/${P}-armel-features.patch"
|
||||
|
||||
# Fix deadlocks with glib-2.32, bug #413331, upstream #667230
|
||||
epatch "${FILESDIR}/${P}-ih_sub_cancel-deadlock.patch"
|
||||
|
||||
# Drop DEPRECATED flags
|
||||
sed -i -e 's:-DG_DISABLE_DEPRECATED:$(NULL):g' server/Makefile.am || die
|
||||
|
||||
# autoconf is required as the user-cflags patch modifies configure.in
|
||||
# however, elibtoolize is also required, so when the above patch is
|
||||
# removed, replace the following call with a call to elibtoolize
|
||||
AT_M4DIR="${WORKDIR}" eautoreconf
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# fixes bug 225403
|
||||
#append-flags "-D_GNU_SOURCE"
|
||||
|
||||
if ! has_version dev-util/pkgconfig; then
|
||||
export DAEMON_CFLAGS="-I/usr/include/glib-2.0 -I/usr/$(get_libdir)/glib-2.0/include"
|
||||
export DAEMON_LIBS="-lglib-2.0"
|
||||
fi
|
||||
|
||||
econf \
|
||||
--disable-debug \
|
||||
--disable-libgamin \
|
||||
--without-python \
|
||||
$(use_enable kernel_linux inotify) \
|
||||
$(use_enable debug debug-api)
|
||||
}
|
||||
|
||||
src_install() {
|
||||
emake DESTDIR="${D}" install || die
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue