From 8b65a61788aa18e97de068bc75fdeecb20a23026 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 19 Aug 2014 07:24:52 +0200 Subject: fix intermittent crash in make check The original crash was in GtkSalMenu::Active, triggered from RefreshMenusUnity and it looked like the refresh method was accessing already freed memory. Change-Id: Ib07d839a976869eb8719e71e0653f1a72e3b0e80 --- vcl/unx/gtk/window/gtksalmenu.cxx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx index dcbcd78425c6..92176b7467fc 100644 --- a/vcl/unx/gtk/window/gtksalmenu.cxx +++ b/vcl/unx/gtk/window/gtksalmenu.cxx @@ -450,9 +450,18 @@ void GtkSalMenu::SetSubMenu( SalMenuItem* pSalMenuItem, SalMenu* pSubMenu, unsig pItem->mpSubMenu = pGtkSubMenu; } +class GdkThreadLock +{ +public: + GdkThreadLock() { gdk_threads_enter(); } + ~GdkThreadLock() { gdk_threads_leave(); } +}; + static bool bInvalidMenus = false; static gboolean RefreshMenusUnity(gpointer) { + GdkThreadLock aLock; + SalDisplay* pSalDisplay = GetGenericData()->GetSalDisplay(); std::list< SalFrame* >::const_iterator pSalFrame = pSalDisplay->getFrames().begin(); std::list< SalFrame* >::const_iterator pEndSalFrame = pSalDisplay->getFrames().end(); -- cgit