summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorIra Cooper <samba@ira.wakeful.net>2010-04-18 15:02:23 +0200
committerVolker Lendecke <vl@samba.org>2010-04-18 15:12:41 +0200
commite1ca45179419f96b831cc929ff46df39a4766388 (patch)
tree574aa4dc142231ca240fbfb1389a683e5878edf7 /source3
parent69ce29826cf209d79b4aa63e6d1f30ccf7bfd7ae (diff)
downloadsamba-e1ca45179419f96b831cc929ff46df39a4766388.tar.gz
samba-e1ca45179419f96b831cc929ff46df39a4766388.tar.bz2
samba-e1ca45179419f96b831cc929ff46df39a4766388.zip
s3: Improved support for GAMIN.
Support the FAMNoExists API for gamin to reduce cpu use and problems when using GAMIN as FAM for vfs_notify_fam.
Diffstat (limited to 'source3')
-rw-r--r--source3/configure.in16
-rw-r--r--source3/modules/vfs_notify_fam.c15
2 files changed, 26 insertions, 5 deletions
diff --git a/source3/configure.in b/source3/configure.in
index 26ec10ba5c..9a190cc872 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -2644,18 +2644,19 @@ if test x$enable_fam != xno; then
# On IRIX, libfam requires libC, but other FAM implementations
# might not need it.
AC_CHECK_LIB(fam, FAMOpen2,
- [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
- [samba_cv_HAVE_LIBFAM=no])
+ [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
+ AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
+ [samba_cv_HAVE_LIBFAM=no])
if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
samba_fam_xtra=-lC
AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
- [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
- [samba_cv_HAVE_LIBFAM=no])
+ [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
+ AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
+ [samba_cv_HAVE_LIBFAM=no])
unset samba_fam_xtra
fi
fi
-
if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
default_shared_modules="$default_shared_modules vfs_notify_fam"
AC_TRY_COMPILE([#include <fam.h>],
@@ -2665,6 +2666,11 @@ if test x$enable_fam != xno; then
[])
fi
+ if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
+ AC_CHECK_LIB(fam, FAMNoExists,
+ [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
+ fi
+
if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
AC_MSG_ERROR(FAM support requested but FAM library not available )
fi
diff --git a/source3/modules/vfs_notify_fam.c b/source3/modules/vfs_notify_fam.c
index 8f00c9207f..652e785e02 100644
--- a/source3/modules/vfs_notify_fam.c
+++ b/source3/modules/vfs_notify_fam.c
@@ -79,12 +79,27 @@ static NTSTATUS fam_open_connection(FAMConnection *fam_conn,
ZERO_STRUCTP(fam_conn);
FAMCONNECTION_GETFD(fam_conn) = -1;
+
+#ifdef HAVE_FAMNOEXISTS
+ /* We should honor outside setting of the GAM_CLIENT_ID. */
+ setenv("GAM_CLIENT_ID","SAMBA",0);
+#endif
+
if (asprintf(&name, "smbd (%lu)", (unsigned long)sys_getpid()) == -1) {
DEBUG(0, ("No memory\n"));
return NT_STATUS_NO_MEMORY;
}
res = FAMOpen2(fam_conn, name);
+
+#ifdef HAVE_FAMNOEXISTS
+ /*
+ * This reduces the chatter between GAMIN and samba making the pair
+ * much more reliable.
+ */
+ FAMNoExists(fam_conn);
+#endif
+
SAFE_FREE(name);
if (res < 0) {