Am 09.05.2017 um 21:19 schrieb john kennan <jken...@ssc.wisc.edu>:
> 
> Start a new file
> type something
> save
> type some more
> save
> 
> I get "the file ... changed on disk." with two buttons: "Reload" and "Ignore"
> 
> hitting Ignore leaves the file unsaved
> hitting Reload works -- I get a warning:
> 
> Any changes will be lost. Are you sure you want to load the version on disk 
> of the document .../Papers/LyX/test1.lyx?
> 
> with buttons for Revert and Cancel
> Hitting Revert saves the file, as desired, and the changes are not lost.

Confirmed.

Guillaume, it’s the FileMonitor which is detecting the file save as external 
modification.
How can I provide further info to correct this annoying behavior?
My attempt to diagnose the culprit failed - the code is too weird for me :(

I tried to stop in Buffer::Impl::refreshFileMonitor() at the first line.
The debugger didn’t stop - but it stopped in 
Buffer::Impl::fileExternallyModified()
and the call stack claims it comes from the last line in refreshFileMonitor() 
???

Frankly said: I’m lost now.

Stephan

(lldb) bt
* thread #1: tid = 0x5bbf69, 0x00000001001260a6 
LyX`lyx::Buffer::Impl::fileExternallyModified(this=0x0000000107129400, 
modified=true) const + 38 at Buffer.cpp:5342, queue = 'com.apple.main-thread', 
stop reason = breakpoint 2.1
    frame #0: 0x00000001001260a6 
LyX`lyx::Buffer::Impl::fileExternallyModified(this=0x0000000107129400, 
modified=true) const + 38 at Buffer.cpp:5342
  * frame #1: 0x000000010017f83d 
LyX`lyx::Buffer::Impl::refreshFileMonitor(this=0x0000000103e5f720)::$_0::operator()()
 const + 29 at Buffer.cpp:5335
    frame #2: 0x000000010017f45d 
LyX`boost::detail::function::void_function_obj_invoker0<lyx::Buffer::Impl::refreshFileMonitor()::$_0,
 void>::invoke(function_obj_ptr=0x0000000103e5f720) + 29 at 
function_template.hpp:159
    frame #3: 0x000000010108dce8 
LyX`boost::function0<void>::operator(this=0x0000000103e5f718)() const + 120 at 
function_template.hpp:770
    frame #4: 0x000000010108dc64 LyX`boost::signals2::detail::void_type 
boost::signals2::detail::call_with_tuple_args<boost::signals2::detail::void_type>::m_invoke<boost::function<void
 (this=0x00007fff5fbfbb70, func=0x0000000103e5f718, 
(null)=unsigned_meta_array<> @ 0x00007fff5fbfbae0, (null)=0x00007fff5fbfc040, 
(null)=0x0000000000000000)> >(boost::function<void ()>&, 
boost::signals2::detail::unsigned_meta_array<>, std::__1::tuple<> const&, 
boost::enable_if<boost::is_void<boost::function<void ()>::result_type>, 
void>::type*) const + 36 at variadic_slot_invoker.hpp:117
    frame #5: 0x000000010108dc19 LyX`boost::signals2::detail::void_type 
boost::signals2::detail::call_with_tuple_args<boost::signals2::detail::void_type>::operator(this=0x00007fff5fbfbb70,
 func=0x0000000103e5f718, args=0x00007fff5fbfc040, (null)=size_t<0> @ 
0x00007fff5fbfbb30)<boost::function<void ()>, 0ul>(boost::function<void ()>&, 
std::__1::tuple<> const&, mpl_::size_t<0ul>) const + 41 at 
variadic_slot_invoker.hpp:90
    frame #6: 0x000000010108dbe1 LyX`boost::signals2::detail::void_type 
boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>::operator(this=0x00007fff5fbfc040,
 
connectionBody=0x0000000103e5bbb0)<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > 
>(boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > const&) const + 65 at 
variadic_slot_invoker.hpp:133
    frame #7: 0x000000010108da9a 
LyX`boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >::dereference(this=0x00007fff5fbfbcf0) const + 
154 at slot_call_iterator.hpp:110
    frame #8: 0x000000010108d9d5 
LyX`boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >::reference 
boost::iterators::iterator_core_access::dereference<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (f=0x00007fff5fbfbcf0), 
boost::function<void ()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > 
>(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > const&) + 21 at iterator_facade.hpp:549
    frame #9: 0x000000010108d90d 
LyX`boost::iterators::detail::iterator_facade_base<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, boost::signals2::detail::void_type, 
boost::iterators::single_pass_traversal_tag, 
boost::signals2::detail::void_type&, long, false, 
false>::operator*(this=0x00007fff5fbfbcf0) const + 29 at iterator_facade.hpp:655
    frame #10: 0x000000010108d855 LyX`void 
boost::signals2::optional_last_value<void>::operator(this=0x000000015382a1e0, 
first=slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void *>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > @ 0x00007fff5fbfbcf0, 
last=slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void *>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > @ 
0x00007fff5fbfbd10)<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > 
>(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, 
boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >) const + 69 at optional_last_value.hpp:57
    frame #11: 0x000000010108d62f LyX`void 
boost::signals2::detail::combiner_invoker<void>::operator(this=0x00007fff5fbfbed0,
 combiner=0x000000015382a1e0, 
first=slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void *>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > @ 0x00007fff5fbfbd90, 
last=slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void *>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > @ 
0x00007fff5fbfbdb0)<boost::signals2::optional_last_value<void>, 
boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> > >(boost::signals2::optional_last_value<void>&, 
boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, 
boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>,
 
std::__1::__list_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >, void*>, 
boost::signals2::detail::connection_body<std::__1::pair<boost::signals2::detail::slot_meta_group,
 boost::optional<int> >, boost::signals2::slot<void (), boost::function<void 
()> >, boost::signals2::mutex> >) const + 175 at result_type_wrapper.hpp:64
    frame #12: 0x000000010108d3c6 LyX`boost::signals2::detail::signal_impl<void 
(), boost::signals2::optional_last_value<void>, int, std::__1::less<int>, 
boost::function<void ()>, boost::function<void (boost::signals2::connection 
const&)>, boost::signals2::mutex>::operator(this=0x000000015382a470)() + 998 at 
signal_template.hpp:242
    frame #13: 0x000000010107c111 LyX`boost::signals2::signal<void (), 
boost::signals2::optional_last_value<void>, int, std::__1::less<int>, 
boost::function<void ()>, boost::function<void (boost::signals2::connection 
const&)>, boost::signals2::mutex>::operator(this=0x000000015382a730)() + 33 at 
signal_template.hpp:723
    frame #14: 0x000000010107c0d3 
LyX`lyx::support::FileMonitor::changed(this=0x000000015382a720) + 35 at 
FileMonitor.cpp:196
    frame #15: 0x000000010107d441 
LyX`lyx::support::FileMonitor::qt_static_metacall(_o=0x000000015382a720, 
_c=InvokeMetaMethod, _id=1, _a=0x00007fff5fbfc298) + 177 at 
moc_FileMonitor.cpp:271
    frame #16: 0x0000000103492b4c QtCore`QMetaObject::activate(QObject*, int, 
int, void**) + 3020
    frame #17: 0x000000010107bb62 
LyX`lyx::support::FileMonitorGuard::fileChanged(this=0x000000015382a5d8) const 
+ 34 at moc_FileMonitor.cpp:140
    frame #18: 0x000000010107bbfd 
LyX`lyx::support::FileMonitorGuard::notifyChange(this=0x000000015382a5d8, 
path=0x000000013b1d5200) + 109 at FileMonitor.cpp:153
    frame #19: 0x000000010107cfca 
LyX`lyx::support::FileMonitorGuard::qt_static_metacall(_o=0x000000015382a5d8, 
_c=InvokeMetaMethod, _id=2, _a=0x00007fff5fbfc4d0) + 202 at 
moc_FileMonitor.cpp:85
    frame #20: 0x0000000103492b4c QtCore`QMetaObject::activate(QObject*, int, 
int, void**) + 3020
    frame #21: 0x00000001033de6b1 
QtCore`QFileSystemWatcher::qt_static_metacall(QObject*, QMetaObject::Call, int, 
void**) + 433
    frame #22: 0x0000000103492b4c QtCore`QMetaObject::activate(QObject*, int, 
int, void**) + 3020
    frame #23: 0x000000010352cd60 
QtCore`QFileSystemWatcherEngine::fileChanged(QString const&, bool) + 64
    frame #24: 0x000000010348ae02 QtCore`QObject::event(QEvent*) + 146
    frame #25: 0x0000000102541a76 
QtWidgets`QApplicationPrivate::notify_helper(QObject*, QEvent*) + 294
    frame #26: 0x0000000102542fd8 QtWidgets`QApplication::notify(QObject*, 
QEvent*) + 504
    frame #27: 0x0000000100c4e07e 
LyX`lyx::frontend::GuiApplication::notify(this=0x0000000103f0af40, 
receiver=0x00000001538247d0, event=0x000000015519c290) + 78 at 
GuiApplication.cpp:2702
    frame #28: 0x000000010345cce4 
QtCore`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 164
    frame #29: 0x000000010345da2b 
QtCore`QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 
875
    frame #30: 0x000000010a93628e 
libqcocoa.dylib`QCocoaEventDispatcherPrivate::processPostedEvents() + 190
    frame #31: 0x000000010a936b51 
libqcocoa.dylib`QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void*) 
+ 33
    frame #32: 0x00007fff96f647e1 
CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #33: 0x00007fff96f43f1c CoreFoundation`__CFRunLoopDoSources0 + 556
    frame #34: 0x00007fff96f4343f CoreFoundation`__CFRunLoopRun + 927
    frame #35: 0x00007fff96f42e38 CoreFoundation`CFRunLoopRunSpecific + 296
    frame #36: 0x00007fff995ac935 HIToolbox`RunCurrentEventLoopInMode + 235
    frame #37: 0x00007fff995ac76f HIToolbox`ReceiveNextEventCommon + 432
    frame #38: 0x00007fff995ac5af 
HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 71
    frame #39: 0x00007fff93f7fdf6 AppKit`_DPSNextEvent + 1067
    frame #40: 0x00007fff93f7f226 AppKit`-[NSApplication 
_nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 454
    frame #41: 0x00007fff93f73d80 AppKit`-[NSApplication run] + 682
    frame #42: 0x000000010a935a5f 
libqcocoa.dylib`QCocoaEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
 + 2191
    frame #43: 0x0000000103458ea1 
QtCore`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 417
    frame #44: 0x000000010345d355 QtCore`QCoreApplication::exec() + 341
    frame #45: 0x0000000100c4bca6 
LyX`lyx::frontend::GuiApplication::exec(this=0x0000000103f0af40) + 54 at 
GuiApplication.cpp:2468
    frame #46: 0x0000000100c4bcc9 LyX`non-virtual thunk to 
lyx::frontend::GuiApplication::exec(this=0x0000000103f0af40) + 25 at 
GuiApplication.cpp:2461
    frame #47: 0x00000001004ac50f LyX`lyx::LyX::exec(this=0x00007fff5fbff550, 
argc=0x00007fff5fbff568, argv=0x00007fff5fbff598) + 4447 at LyX.cpp:398
    frame #48: 0x000000010075b606 LyX`main(argc=1, argv=0x00007fff5fbff598) + 
86 at main.cpp:42
    frame #49: 0x00007fff94b935ad libdyld.dylib`start + 1
    frame #50: 0x00007fff94b935ad libdyld.dylib`start + 1
(lldb) 

Reply via email to