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)