diff options
author | Michael Stahl <mstahl@redhat.com> | 2017-06-30 15:23:15 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-06-30 17:14:56 +0200 |
commit | b2b085441dc79fb78607dbf1969c12a40db58214 (patch) | |
tree | 5a87ef0e3237a7c55dc22f408b834ff414928b8c /accessibility/source/extended | |
parent | a54ba50db2c341f0f0e47d77dbe64a6e588bc911 (diff) |
accessibility: fix horrible memory leak in AccessibleTabBarBase
Reproducing tdf#108833 failed because applying the Master Page takes
> 2 hours; the time is spent calling vcl::Window listeners, of which
there were some 39525 after a couple minutes, almost all of which
AccessibleTabBarBase.
AccessibleTabBarBase::WindowEventListener() has an inverted condition
that suppresses the event that is generated from TabBar::Clear()
and thus when DrawViewShell::ResetActualPage() calls Clear() no
AccessibleTabBarPage is removed but then the InsertPage() calls create
duplicate objects that again register as listeners.
The condition is obviously inverted given the CVS commit message:
1.2.88.1
log
@#135353# do not pass VCLEVENT_TABBAR_PAGEREMOVED (all) to objects other than AccessibleTabBarPageList
@
text
a69 8
if( ( pWinEvent->GetId() == VCLEVENT_TABBAR_PAGEREMOVED ) &&
( (sal_uInt16)(sal_IntPtr) pWinEvent->GetData() == TAB_PAGE_NOTFOUND ) &&
( dynamic_cast< AccessibleTabBarPageList *> (this) != NULL ) )
{
return 0;
}
Change-Id: I2a3b86bbd0f0251a966f41b316a3b313517df24f
Diffstat (limited to 'accessibility/source/extended')
-rw-r--r-- | accessibility/source/extended/accessibletabbarbase.cxx | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/accessibility/source/extended/accessibletabbarbase.cxx b/accessibility/source/extended/accessibletabbarbase.cxx index e1cec85dee48..af42864d3149 100644 --- a/accessibility/source/extended/accessibletabbarbase.cxx +++ b/accessibility/source/extended/accessibletabbarbase.cxx @@ -46,7 +46,7 @@ IMPL_LINK( AccessibleTabBarBase, WindowEventListener, VclWindowEvent&, rEvent, v if( ( rEvent.GetId() == VclEventId::TabbarPageRemoved ) && ( (sal_uInt16)reinterpret_cast<sal_IntPtr>(rEvent.GetData()) == TabBar::PAGE_NOT_FOUND ) && - ( dynamic_cast< AccessibleTabBarPageList *> (this) != nullptr ) ) + (dynamic_cast<AccessibleTabBarPageList *>(this) == nullptr)) { return; } |