Juergen Spitzmueller <[EMAIL PROTECTED]> writes:
| Jean-Marc Lasgouttes wrote:
| > You can apply, then.
|
| After some more testing of the OP, it turned out that the crash actually
| occurs if the directory where the bib file lives is not readable. I can
| reproduce the crash, and the attached patch fixes it.
|
| OK?
I'd probably go a bit further.
(On the principle "Just try to do what ever you want to do and handle
the failure if it arises.")
(and "Avoid filesystem race-conditions if you can.")
Index: insetcite.C
===================================================================
--- insetcite.C (revision 14808)
+++ insetcite.C (working copy)
@@ -27,6 +27,7 @@
#include "support/lstrings.h"
#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/exception.hpp>
using lyx::support::ascii_lowercase;
using lyx::support::contains;
@@ -71,12 +72,19 @@
for (vector<string>::const_iterator it = bibfilesCache.begin();
it != bibfilesCache.end(); ++ it) {
string const f = *it;
- if (!fs::exists(f) ||
!fs::is_readable(fs::path(f).branch_path())) {
- lyxerr << "Couldn't find or read bibtex file " << f <<
endl;
+ try {
+ std::time_t lastw = fs::last_write_time(f);
+ if (lastw != bibfileStatus[f]) {
changed = true;
- } else if (bibfileStatus[f] != fs::last_write_time(f)) {
+ bibfileStatus[f] = lastw;
+ }
+ }
+ catch (fs::filesystem_error & fserr) {
changed = true;
- bibfileStatus[f] = fs::last_write_time(f);
+ lyxerr << "Couldn't find or read bibtex file "
+ << f << endl;
+ lyxerr[Debug::DEBUG] << "Fs error: "
+ << fserr.what() << endl;
}
}
Can you try this one Jurgen?
--
Lgb