sw/source/ui/docvw/PostItMgr.cxx | 2 ++ 1 file changed, 2 insertions(+)
New commits: commit 2b2c528826b6b29d90fcb6a8e755c75cb0d65985 Author: Jan Holesovsky <ke...@collabora.com> Date: Tue Feb 18 09:37:57 2014 +0100 Protect PostIt deletion by SolarMutex. I was getting crashes during editing with notes; unfortunately I am unable to reproduce it reliably, so I am not 100% sure this is the right fix - but I hope so. This is what valgrind was suggesting: ==21766== Invalid read of size 8 ==21766== at 0x285AF9C7: std::__debug::list<SwSidebarItem*, std::allocator<SwSidebarItem*> >::remove(SwSidebarItem* const&) (list:569) ==21766== by 0x285A2BFC: SwPostItMgr::RemoveItem(SfxBroadcaster*) (PostItMgr.cxx:241) ==21766== by 0x285A3241: SwPostItMgr::Notify(SfxBroadcaster&, SfxHint const&) (PostItMgr.cxx:346) ==21766== by 0x84AFB1E: SfxBroadcaster::Broadcast(SfxHint const&) (brdcst.cxx:46) ... ==21766== by 0xA5A3C74: Application::Yield() (svapp.cxx:393) ==21766== by 0xA5A3C20: Application::Execute() (svapp.cxx:342) ==21766== by 0x50EA0F4: desktop::Desktop::Main() (app.cxx:1678) ... ==21766== Address 0x2e2824f0 is 16 bytes inside a block of size 24 free'd ==21766== at 0x4C2AA9C: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==21766== by 0x285B4B85: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<SwSidebarItem*> >::deallocate(std::__cxx1998::_List_node<SwSidebarItem*>*, unsigned long) (new_allocator.h:100) ==21766== by 0x285B40C1: std::__cxx1998::_List_base<SwSidebarItem*, std::allocator<SwSidebarItem*> >::_M_put_node(std::__cxx1998::_List_node<SwSidebarItem*>*) (stl_list.h:339) ==21766== by 0x285B43BB: std::__cxx1998::list<SwSidebarItem*, std::allocator<SwSidebarItem*> >::_M_erase(std::__cxx1998::_List_iterator<SwSidebarItem*>) (stl_list.h:1549) ==21766== by 0x285B346E: std::__cxx1998::list<SwSidebarItem*, std::allocator<SwSidebarItem*> >::erase(std::__cxx1998::_List_iterator<SwSidebarItem*>) (list.tcc:113) ==21766== by 0x285B18EB: std::__debug::list<SwSidebarItem*, std::allocator<SwSidebarItem*> >::_M_erase(std::__cxx1998::_List_iterator<SwSidebarItem*>) (list:423) ==21766== by 0x285AF9E6: std::__debug::list<SwSidebarItem*, std::allocator<SwSidebarItem*> >::remove(SwSidebarItem* const&) (list:570) ==21766== by 0x285A2BFC: SwPostItMgr::RemoveItem(SfxBroadcaster*) (PostItMgr.cxx:241) ==21766== by 0x285A3241: SwPostItMgr::Notify(SfxBroadcaster&, SfxHint const&) (PostItMgr.cxx:346) ==21766== by 0x84AFB1E: SfxBroadcaster::Broadcast(SfxHint const&) (brdcst.cxx:46) ... ==21766== by 0xA5A3C74: Application::Yield() (svapp.cxx:393) ==21766== by 0xA5A3C20: Application::Execute() (svapp.cxx:342) ==21766== Change-Id: I0ed3e09338810200766bd10203d9fcac26e822f6 diff --git a/sw/source/ui/docvw/PostItMgr.cxx b/sw/source/ui/docvw/PostItMgr.cxx index 99a8ebe..86d2dd2 100644 --- a/sw/source/ui/docvw/PostItMgr.cxx +++ b/sw/source/ui/docvw/PostItMgr.cxx @@ -230,6 +230,8 @@ void SwPostItMgr::InsertItem(SfxBroadcaster* pItem, bool bCheckExistance, bool b void SwPostItMgr::RemoveItem( SfxBroadcaster* pBroadcast ) { + SolarMutexGuard aGuard; + EndListening(*pBroadcast); for(std::list<SwSidebarItem*>::iterator i = mvPostItFlds.begin(); i != mvPostItFlds.end() ; ++i) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits