Build the real-time monitor by default on FreeBSD (depend on USE_FAM). Fix a few glitches in the fam/gamin version

This commit is contained in:
Jean-Francois Dockes 2011-10-14 14:06:24 +02:00
parent 6d82d83037
commit 3853c5c0da
4 changed files with 21 additions and 11 deletions

3
src/configure vendored
View File

@ -4243,9 +4243,10 @@ fi
if test "${with_fam+set}" = set; then : if test "${with_fam+set}" = set; then :
withval=$with_fam; withFam=$withval withval=$with_fam; withFam=$withval
else else
withFam=no withFam=yes
fi fi
if test X$withFam != Xno -a X$withInotify != Xno ; then if test X$withFam != Xno -a X$withInotify != Xno ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify" >&5
$as_echo "$as_me: FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify" >&6;} $as_echo "$as_me: FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify" >&6;}

View File

@ -119,7 +119,8 @@ fi
AC_ARG_WITH(fam, AC_ARG_WITH(fam,
AC_HELP_STRING([--with-fam], AC_HELP_STRING([--with-fam],
[Use File Alteration Monitor for almost real time indexing of modified files. Give the fam/gamin library as argument (ie: /usr/lib/libfam.so) if configure does not find the right one.]), [Use File Alteration Monitor for almost real time indexing of modified files. Give the fam/gamin library as argument (ie: /usr/lib/libfam.so) if configure does not find the right one.]),
withFam=$withval, withFam=no) withFam=$withval, withFam=yes)
if test X$withFam != Xno -a X$withInotify != Xno ; then if test X$withFam != Xno -a X$withInotify != Xno ; then
AC_MSG_NOTICE([FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify]) AC_MSG_NOTICE([FAM support enabled but inotify support also enabled. Disabling FAM support and using inotify])
withFam=no withFam=no

View File

@ -179,6 +179,10 @@ void *rclMonRcvRun(void *q)
LOGERR(("rclMonRcvRun: tree walk failed\n")); LOGERR(("rclMonRcvRun: tree walk failed\n"));
goto terminate; goto terminate;
} }
if (walker.getErrCnt() > 0) {
LOGINFO(("rclMonRcvRun: fs walker errors: %s\n",
walker.getReason().c_str()));
}
} }
{ {
@ -218,10 +222,14 @@ void *rclMonRcvRun(void *q)
LOGDEB(("rclMonRcvRun: walking new dir %s\n", LOGDEB(("rclMonRcvRun: walking new dir %s\n",
ev.m_path.c_str())); ev.m_path.c_str()));
if (walker.walk(ev.m_path, walkcb) != FsTreeWalker::FtwOk) { if (walker.walk(ev.m_path, walkcb) != FsTreeWalker::FtwOk) {
LOGERR(("rclMonRcvRun: failed walking new dir %s\n", LOGERR(("rclMonRcvRun: walking new dir %s: %s\n",
ev.m_path.c_str())); ev.m_path.c_str(), walker.getReason().c_str()));
goto terminate; goto terminate;
} }
if (walker.getErrCnt() > 0) {
LOGINFO(("rclMonRcvRun: fs walker errors: %s\n",
walker.getReason().c_str()));
}
} }
} }
@ -241,7 +249,7 @@ terminate:
bool eraseWatchSubTree(map<int, string>& idtopath, const string& top) bool eraseWatchSubTree(map<int, string>& idtopath, const string& top)
{ {
bool found = false; bool found = false;
LOGDEB0(("Clearing map for [%s]\n", top.c_str())); MONDEB(("Clearing map for [%s]\n", top.c_str()));
map<int,string>::iterator it = idtopath.begin(); map<int,string>::iterator it = idtopath.begin();
while (it != idtopath.end()) { while (it != idtopath.end()) {
if (it->second.find(top) == 0) { if (it->second.find(top) == 0) {
@ -461,8 +469,8 @@ bool RclFAM::getEvent(RclMonEvent& ev, int msecs)
ev.m_etyp = RclMonEvent::RCLEVT_DELETE; ev.m_etyp = RclMonEvent::RCLEVT_DELETE;
// We would like to signal a directory here to enable cleaning // We would like to signal a directory here to enable cleaning
// the subtree (on a dir move), but can't test the actual file // the subtree (on a dir move), but can't test the actual file
// which is gone. Let's rely on the fact that a directory // which is gone, and fam doesn't tell us if it's a dir or reg.
// should be watched // Let's rely on the fact that a directory should be watched
if (eraseWatchSubTree(m_idtopath, ev.m_path)) if (eraseWatchSubTree(m_idtopath, ev.m_path))
ev.m_etyp |= RclMonEvent::RCLEVT_ISDIR; ev.m_etyp |= RclMonEvent::RCLEVT_ISDIR;
break; break;

View File

@ -43,7 +43,7 @@
unexpected. This is probably dependant on the type of system unexpected. This is probably dependant on the type of system
and/or locale. Workaround: arrange for the offending file and/or locale. Workaround: arrange for the offending file
not to be indexed (move it away or configure it out), or not to be indexed (move it away or configure it out), or
apply <a href="patch-badfileoutput.diff">this patch</a>, apply <a href="files/patch-badfileoutput.diff">this patch</a>,
which should work with all versions from 1.13 to 1.16.1</li> which should work with all versions from 1.13 to 1.16.1</li>
<li>Under certain conditions, the indexer can use all <li>Under certain conditions, the indexer can use all
available memory and crash. This is caused by a memory leak available memory and crash. This is caused by a memory leak
@ -51,7 +51,7 @@
triggered in specific conditions (all cases seen were from triggered in specific conditions (all cases seen were from
files inside zip archives). Workaround: arrange for the files inside zip archives). Workaround: arrange for the
offending file not to be indexed (move it away or configure offending file not to be indexed (move it away or configure
it out), or apply <a href="patch-unac-icclose.diff">this it out), or apply <a href="files/patch-unac-icclose.diff">this
patch</a>, which should work with all versions from 1.13 to patch</a>, which should work with all versions from 1.13 to
1.16.1</li> 1.16.1</li>
<li>Real time indexer: when running with gamin on FreeBSD, the <li>Real time indexer: when running with gamin on FreeBSD, the
@ -64,14 +64,14 @@
all. Workaround: restart indexer from time to time.</li> all. Workaround: restart indexer from time to time.</li>
<li>Recollq does not delete a temporary directory in some <li>Recollq does not delete a temporary directory in some
cases (/tmp/rcl...).</li> cases (/tmp/rcl...).</li>
<li>Most GUI queries are actually run two times which does not
help performance...</li>
<li>Cancelling a preview in the GUI will also cancel the indexing <li>Cancelling a preview in the GUI will also cancel the indexing
thread if it is running.</li> thread if it is running.</li>
<li>After an upgrade, the recoll GUI sometimes crashes on <li>After an upgrade, the recoll GUI sometimes crashes on
startup. This is fixed by removing (back it up just in case) startup. This is fixed by removing (back it up just in case)
~/.config/Recoll.org/recoll.conf, the QSettings storage for ~/.config/Recoll.org/recoll.conf, the QSettings storage for
recoll.</li> recoll.</li>
<li>Most GUI queries are actually ran two times which does not
help performance...</li>
<li>Under Solaris, it is necessary to perform the initial <li>Under Solaris, it is necessary to perform the initial
indexing with the recollindex program. For some unknown reason, indexing with the recollindex program. For some unknown reason,
the recoll index thread does not work for creating the database. the recoll index thread does not work for creating the database.