|
 |
a9add1 |
From b88646fc68cfc1c3840024fe3a59727c9eb9f95d Mon Sep 17 00:00:00 2001
|
|
 |
a9add1 |
From: Dennis Francis <dennisfrancis.in@gmail.com>
|
|
 |
a9add1 |
Date: Fri, 11 Dec 2015 09:19:22 +0530
|
|
 |
a9add1 |
Subject: [PATCH 2/3] Fix memleak of strings allocated in
|
|
 |
a9add1 |
VclGtkClipboard::makeGtkTargetEntry
|
|
 |
a9add1 |
|
|
 |
a9add1 |
This leak is produced when copy and paste of text/numbers
|
|
 |
a9add1 |
is done in Calc/Writer.
|
|
 |
a9add1 |
|
|
 |
a9add1 |
Following is the trace produced by valgrind (trimmed)
|
|
 |
a9add1 |
|
|
 |
a9add1 |
malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
|
|
 |
a9add1 |
g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
|
|
 |
a9add1 |
g_strdup (in /usr/lib64/libglib-2.0.so.0.4600.2)
|
|
 |
a9add1 |
VclGtkClipboard::makeGtkTargetEntry(...) (gtk3gtkinst.cxx:467)
|
|
 |
a9add1 |
VclGtkClipboard::setContents(...) (gtk3gtkinst.cxx:557)
|
|
 |
a9add1 |
TransferableHelper::CopyToSelection(vcl::Window*) const (transfer.cxx:1019)
|
|
 |
a9add1 |
ScTabView::CheckSelectionTransfer() (tabview3.cxx:319)
|
|
 |
a9add1 |
ScTabView::UpdateAutoFillMark() (tabview3.cxx:144)
|
|
 |
a9add1 |
ScTabView::SelectionChanged() (tabview3.cxx:365)
|
|
 |
a9add1 |
ScViewFunc::PostPasteFromClip(ScRangeList const&, ScMarkData const&) (viewfun3.cxx:1753)
|
|
 |
a9add1 |
ScViewFunc::PasteFromClip(...) (viewfun3.cxx:1415)
|
|
 |
a9add1 |
ScClipUtil::PasteFromClipboard(ScViewData*, ScTabViewShell*, bool) (cliputil.cxx:69)
|
|
 |
a9add1 |
ScCellShell::ExecuteEdit(SfxRequest&) (cellsh1.cxx:1285)
|
|
 |
a9add1 |
SfxStubScCellShellExecuteEdit(SfxShell*, SfxRequest&) (scslots.hxx:7135)
|
|
 |
a9add1 |
SfxShell::CallExec(void (*)(SfxShell*, SfxRequest&), SfxRequest&) (shell.hxx:206)
|
|
 |
a9add1 |
SfxDispatcher::Call_Impl(SfxShell&, SfxSlot const&, SfxRequest&, bool) (dispatch.cxx:258)...
|
|
 |
a9add1 |
...
|
|
 |
a9add1 |
|
|
 |
a9add1 |
Change-Id: I12468e746f33a64e2b5f05e9ac1c6814c702ffd7
|
|
 |
a9add1 |
Reviewed-on: https://gerrit.libreoffice.org/20646
|
|
 |
a9add1 |
Reviewed-by: jan iversen <jani@documentfoundation.org>
|
|
 |
a9add1 |
Tested-by: jan iversen <jani@documentfoundation.org>
|
|
 |
a9add1 |
(cherry picked from commit 97df0e601a0d76664b4207d075fa6e2a5a51625c)
|
|
 |
a9add1 |
---
|
|
 |
a9add1 |
vcl/unx/gtk3/gtk3gtkinst.cxx | 5 ++++-
|
|
 |
a9add1 |
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
 |
a9add1 |
|
|
 |
a9add1 |
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
|
|
 |
a9add1 |
index e9210d0..f1a9ddc 100644
|
|
 |
a9add1 |
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
|
|
 |
a9add1 |
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
|
|
 |
a9add1 |
@@ -456,7 +456,7 @@ void VclGtkClipboard::OwnerChanged(GtkClipboard* clipboard, GdkEvent* /*event*/)
|
|
 |
a9add1 |
void VclGtkClipboard::ClipboardClear(GtkClipboard * /*clipboard*/)
|
|
 |
a9add1 |
{
|
|
 |
a9add1 |
for (auto &a : m_aGtkTargets)
|
|
 |
a9add1 |
- free(a.target);
|
|
 |
a9add1 |
+ g_free(a.target);
|
|
 |
a9add1 |
m_aGtkTargets.clear();
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
|
|
 |
a9add1 |
@@ -518,6 +518,7 @@ VclGtkClipboard::~VclGtkClipboard()
|
|
 |
a9add1 |
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
|
|
 |
a9add1 |
g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId);
|
|
 |
a9add1 |
g_object_unref(m_pOwner);
|
|
 |
a9add1 |
+ ClipboardClear(nullptr);
|
|
 |
a9add1 |
}
|
|
 |
a9add1 |
|
|
 |
a9add1 |
void VclGtkClipboard::setContents(
|
|
 |
a9add1 |
@@ -577,6 +578,8 @@ void VclGtkClipboard::setContents(
|
|
 |
a9add1 |
//if there was a previous gtk_clipboard_set_with_data call then
|
|
 |
a9add1 |
//ClipboardClearFunc will be called now
|
|
 |
a9add1 |
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
|
|
 |
a9add1 |
+ if(G_OBJECT(m_pOwner) == gtk_clipboard_get_owner(clipboard))
|
|
 |
a9add1 |
+ gtk_clipboard_clear(clipboard);
|
|
 |
a9add1 |
//use with_owner with m_pOwner so we can distinguish in handle_owner_change
|
|
 |
a9add1 |
//if we have gained or lost ownership of the clipboard
|
|
 |
a9add1 |
gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(),
|
|
 |
a9add1 |
--
|
|
 |
a9add1 |
2.5.0
|
|
 |
a9add1 |
|