Title: [154387] trunk/Tools
- Revision
- 154387
- Author
- [email protected]
- Date
- 2013-08-21 09:11:10 -0700 (Wed, 21 Aug 2013)
Log Message
[GTK] Suppress irrelevant or known leaks for Valgrind
https://bugs.webkit.org/show_bug.cgi?id=119448
Patch by Brian Holt <[email protected]> on 2013-08-21
Reviewed by Martin Robinson.
Add a suppressions file to suppress known leaks for Valgrind.
Valgrind also takes longer when using suppressions and
times out unless the driver timeout is increased.
* Scripts/valgrind/suppressions.txt: Added.
* Scripts/webkitpy/port/gtk.py:
(GtkPort.driver_stop_timeout):
(GtkPort.setup_environ_for_server):
Modified Paths
Added Paths
Diff
Modified: trunk/Tools/ChangeLog (154386 => 154387)
--- trunk/Tools/ChangeLog 2013-08-21 16:00:26 UTC (rev 154386)
+++ trunk/Tools/ChangeLog 2013-08-21 16:11:10 UTC (rev 154387)
@@ -1,3 +1,19 @@
+2013-08-21 Brian Holt <[email protected]>
+
+ [GTK] Suppress irrelevant or known leaks for Valgrind
+ https://bugs.webkit.org/show_bug.cgi?id=119448
+
+ Reviewed by Martin Robinson.
+
+ Add a suppressions file to suppress known leaks for Valgrind.
+ Valgrind also takes longer when using suppressions and
+ times out unless the driver timeout is increased.
+
+ * Scripts/valgrind/suppressions.txt: Added.
+ * Scripts/webkitpy/port/gtk.py:
+ (GtkPort.driver_stop_timeout):
+ (GtkPort.setup_environ_for_server):
+
2013-08-20 Alex Christensen <[email protected]>
[Windows] Linking fix for Win64.
Added: trunk/Tools/Scripts/valgrind/suppressions.txt (0 => 154387)
--- trunk/Tools/Scripts/valgrind/suppressions.txt (rev 0)
+++ trunk/Tools/Scripts/valgrind/suppressions.txt 2013-08-21 16:11:10 UTC (rev 154387)
@@ -0,0 +1,627 @@
+# There are three kinds of suppressions in this file.
+# 1. Third party leaks we have no control over.
+#
+# 2. Intentional unit test errors, false positives
+# in our own code, or leaks that are so trivial they are not worth fixing.
+#
+# 3. Suppressions for real WebKit bugs that are not yet fixed.
+# These should all be in webkit's bug tracking system
+# Periodically we should sweep this file and the bug tracker clean by
+# running overnight and removing outdated bugs/suppressions.
+#-----------------------------------------------------------------------
+
+# 1. Third party leaks we have no control over.
+{
+ # GTK developers don't like cleaning up one-time leaks.
+ # See http://mail.gnome.org/archives/gtk-devel-list/2004-April/msg00230.html.
+ gtk_init_check (Third Party)
+ Memcheck:Leak
+ ...
+ fun:gtk_init_check
+}
+
+{
+ FcConfigParseAndLoad (Third Party)
+ Memcheck:Leak
+ ...
+ fun:XML_ParseBuffer
+ fun:FcConfigParseAndLoad
+}
+
+{
+ FcConfigAppFontAddFile (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcConfigAppFontAddFile
+}
+
+{
+ # See also http://www.gnome.org/~johan/gtk.suppression
+ # (which has a smattering of similar pango suppressions).
+ FcFontRenderPrepare 1 (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcFontRenderPrepare
+ obj:*
+ fun:pango_font_map_load_fontset
+}
+
+{
+ FcFontRenderPrepare 2 (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcFontRenderPrepare
+ ...
+ fun:pango_itemize_with_base_dir
+}
+
+{
+ FcFontRenderPrepare 3 (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcFontRenderPrepare
+ ...
+ fun:pango_ot_buffer_output
+}
+
+{
+ FcFontRenderPrepare 4 (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcFontRenderPrepare
+ ...
+ fun:pango_context_get_metrics
+}
+
+{
+ FcDefaultSubstitute (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcDefaultSubstitute
+ ...
+ fun:pango_itemize_with_base_dir
+}
+
+{
+ # Reported in https://bugs.freedesktop.org/show_bug.cgi?id=8215.
+ FcPatternObjectInsertElt 1 (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:FcPatternObjectInsertElt
+ fun:FcPatternObjectAddWithBinding
+}
+
+{
+ # See https://bugs.freedesktop.org/show_bug.cgi?id=8428.
+ # and http://www.gnome.org/~johan/gtk.suppression.
+ FcPatternObjectInsertElt 2 (Third Party)
+ Memcheck:Leak
+ ...
+ fun:realloc
+ fun:FcPatternObjectInsertElt
+}
+
+{
+ FcConfigValues (Third Party)
+ Memcheck:Leak
+ ...
+ fun:malloc
+ fun:FcConfigValues
+ fun:FcConfigValues
+ ...
+ fun:FcConfigValues
+ fun:FcConfigValues
+}
+
+{
+ FcCharSetSort (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcFontSetSort
+ fun:FcFontSort
+}
+
+{
+ FcCharSetAddChar (Third Party)
+ Memcheck:Leak
+ ...
+ fun:FcCharSetFindLeafCreate
+ fun:FcCharSetAddChar
+}
+
+{
+ pango_script_get_sample_language (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_strdup
+ fun:pango_script_get_sample_language
+ ...
+ fun:pango_font_get_metrics
+}
+
+{
+ # See http://sourceware.org/bugzilla/show_bug.cgi?id=12878.
+ dlopen (Third Party)
+ Memcheck:Leak
+ fun:calloc
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+}
+
+{
+ # See also http://sources.redhat.com/bugzilla/show_bug.cgi?id=2451.
+ _dl_map_object_from_fd (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:_dl_map_object_from_fd
+}
+
+{
+ # See http://sources.redhat.com/bugzilla/show_bug.cgi?id=5171
+ pthread_create (Third Party)
+ Memcheck:Leak
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate_tls
+ fun:pthread_create@@GLIBC_2.1
+}
+
+{
+ # See http://sourceware.org/bugzilla/show_bug.cgi?id=14015.
+ dlsym (Third Party)
+ Memcheck:Leak
+ fun:calloc
+ fun:_dlerror_run
+ fun:dlsym
+}
+
+{
+ g_object_add_weak_pointer (Third Party)
+ Memcheck:Leak
+ ...
+ fun:g_object_weak_ref
+ fun:g_object_add_weak_pointer
+}
+
+{
+ g_build_filename (Third Party)
+ Memcheck:Leak
+ fun:realloc
+ fun:g_realloc
+ fun:g_string_maybe_expand
+ fun:g_string_insert_len
+ fun:g_build_path_va
+ fun:g_build_filename
+ fun:_ZL15initializeFontsPKc
+}
+
+{
+ gtk_im_context_set_client_window (Third Party)
+ Memcheck:Leak
+ ...
+ fun:malloc
+ fun:g_malloc
+ fun:g_strdup
+ fun:gtk_im_multicontext_get_slave
+ fun:gtk_im_multicontext_set_client_window
+ fun:gtk_im_context_set_client_window
+}
+
+{
+ gtk_css_provider_load_from_data (Third Party)
+ Memcheck:Leak
+ fun:realloc
+ fun:g_realloc
+ fun:g_string_maybe_expand
+ fun:g_string_insert_c
+ fun:_gtk_css_parser_read_char
+ fun:_gtk_css_parser_try_ident
+ fun:bindings_value_parse_one
+ fun:_gtk_css_array_value_parse
+ fun:gtk_css_provider_load_internal
+ fun:gtk_css_provider_load_from_data
+}
+
+{
+ # GTK leaks an X11 window.
+ gdk_x11_drawable_get_xid (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_slice_alloc
+ fun:g_slice_alloc0
+ fun:g_type_create_instance
+ fun:g_object_constructor
+ fun:g_object_newv
+ fun:g_object_new
+ fun:_gdk_window_impl_new
+ fun:gdk_window_ensure_native
+ fun:gdk_x11_drawable_get_xid
+}
+
+{
+ # GTK leaks a cairo context (large leak)
+ gtk_window_realize (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:_cairo_default_context_create
+ fun:set_grip_shape
+ fun:resize_grip_create_window
+ fun:gtk_window_realize
+}
+
+{
+ g_quark_from_static_string (Third party)
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_quark_from_static_string
+ fun:gobject_init_ctor
+ fun:call_init.part.0
+ fun:_dl_init
+ obj:/lib/x86_64-linux-gnu/ld-2.15.so
+ obj:*
+ obj:*
+ obj:*
+}
+
+{
+ /bin/bash (Third Party)
+ Memcheck:Leak
+ ...
+ obj:/bin/bash
+}
+
+{
+ libenchant.so new (Third party)
+ Memcheck:Leak
+ fun:_Znw*
+ ...
+ obj:*/libenchant.so.1.6.0
+ fun:enchant_broker_dict_exists
+}
+
+{
+ libenchant.so malloc (Third party)
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ obj:*/libenchant.so.1.6.0
+ fun:enchant_broker_dict_exists
+}
+
+{
+ # Cairo leaks a pattern_t* in cairo_set_source_surface
+ cairo_set_source_surface (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:cairo_pattern_create_for_surface
+ fun:_cairo_default_context_set_source_surface
+ fun:cairo_set_source_surface
+}
+
+{
+ XRRFindDisplay (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:XRRFindDisplay
+}
+{
+ libflashplayer.so (Third Party)
+ Memcheck:Leak
+ ...
+ obj:/usr/lib/flashplugin-installer/libflashplayer.so
+}
+
+{
+ gdk_init (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:_nl_find_domain
+ fun:__dcigettext
+ fun:gdk_screen_class_intern_init
+ fun:g_type_class_ref
+ fun:g_type_class_ref
+ fun:g_object_newv
+ fun:g_object_new
+ fun:_gdk_x11_screen_new
+ fun:gdk_display_open
+ fun:gdk_display_open_default_libgtk_only
+ fun:gdk_init_check
+ fun:gdk_init
+}
+
+{
+ XKeysymToString (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:XKeysymToString
+}
+
+{
+ g_thread_proxy (Third Party)
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_thread_proxy
+}
+
+{
+ JNI_CreateJavaVM (Third party)
+ Memcheck:Leak
+ ...
+ fun:JNI_CreateJavaVM
+ fun:JavaMain
+}
+
+{
+ _ZL10java_startP6Thread (Third party)
+ Memcheck:Leak
+ ...
+ fun:_ZN8VMThread3runEv
+ fun:_ZL10java_startP6Thread
+ ...
+
+}
+
+{
+ /bin/java (OpenJDK) (Third party)
+ Memcheck:Leak
+ ...
+ obj:/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
+ ...
+}
+
+{
+ libGL.so (Third party)
+ Memcheck:Leak
+ ...
+ obj:*/libGL.so.*
+ ...
+}
+
+{
+ _cairo_xlib_shm_surface_create.isra.11 (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:_pixman_image_allocate
+ fun:pixman_image_create_bits
+ fun:_cairo_xlib_shm_surface_create.isra.11
+}
+
+{
+ __nss_database_lookup (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:nss_parse_service_list
+ fun:__nss_database_lookup
+ obj:*
+}
+
+{
+ gst_init_check (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_intern_string
+ fun:_priv_gst_registry_chunks_load_plugin
+ fun:exchange_packets
+ fun:plugin_loader_load
+ fun:gst_registry_scan_plugin_file
+ fun:gst_registry_scan_path_level
+ fun:gst_registry_scan_path_internal
+ fun:gst_update_registry
+ fun:init_post
+ fun:g_option_context_parse
+ fun:gst_init_check
+
+}
+
+{
+ g_task_run_in_thread (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_slice_alloc
+ fun:g_slice_alloc0
+ fun:g_system_thread_new
+ fun:g_thread_new_internal
+ fun:g_thread_pool_start_thread
+ fun:g_thread_pool_push
+ fun:g_task_start_task_thread
+ fun:g_task_run_in_thread
+}
+
+{
+ # Large leak in cairo_image_surface_create
+ _cairo_image_surface_create_with_pixman_format (Third Party)
+ Memcheck:Leak
+ fun:malloc
+ fun:_cairo_image_surface_create_for_pixman_image
+ fun:_cairo_image_surface_create_with_pixman_format
+ fun:_ZN7WebCore21copyCairoImageSurfaceEP14_cairo_surface
+}
+
+
+#-----------------------------------------------------------------------
+# 2. Intentional unit test errors, false positives
+# in our own code, or leaks that are so trivial they are not worth fixing.
+
+{
+ # According to dglazkov, these are one-time leaks and intentional.
+ # They may go away if the change to move these off the heap lands.
+ WebCore::SVGNames::init (Intentional)
+ Memcheck:Leak
+ ...
+ fun:_ZN7WebCore8SVGNames4initEv
+}
+
+{
+ # This is an on demand initialization which is done and then intentionally
+ # kept around (not freed) while the process is running.
+ WebCore::XMLNames::init (Intentional)
+ Memcheck:Leak
+ ...
+ fun:_ZN7WebCore8XMLNames4initEv
+}
+
+{
+ # This is WebKit wide theading initialization which is intentionally kept
+ # around (not freed) while the process is running.
+ WTF::ThreadIdentifierData::initialize() (Intentional)
+ Memcheck:Leak
+ ...
+ fun:_ZN3WTF20ThreadIdentifierData10initializeEj
+}
+
+{
+ # This is WebKit wide theading initialization which is intentionally kept
+ # around (not freed) while the process is running.
+ WTF::ThreadData (Intentional)
+ Memcheck:Leak
+ ...
+ fun:_ZN3WTF13wtfThreadDataEv
+}
+
+{
+ WTF::BitVector (Intentional)
+ Memcheck:Leak
+ fun:malloc
+ fun:_ZN3WTF10fastMallocEm
+ fun:_ZN3WTF9BitVector13OutOfLineBits6createEm
+ fun:_ZN3WTF9BitVector15resizeOutOfLineEm
+ fun:_ZN3WTF9BitVector10ensureSizeEm
+ fun:_ZN3WTF9BitVectorC1Em
+}
+
+{
+ # WTF::ThreadSpecific leaks a few bytes at a time.
+ WTF::ThreadSpecific::set() (Intentional)
+ Memcheck:Leak
+ fun:_Znw*
+ fun:_ZN3WTF14ThreadSpecificIbE3setEPb
+ fun:_ZN3WTF14ThreadSpecificIbEcvPbEv
+ fun:_ZN3WTF14ThreadSpecificIbEdeEv
+ fun:_ZN3WTF16registerGCThreadEv
+ fun:_ZN3JSC8GCThread12gcThreadMainEv
+ fun:_ZN3JSC8GCThread17gcThreadStartFuncEPv
+ fun:_ZN3WTFL16threadEntryPointEPv
+}
+
+{
+ # DOMObjectCache memory is not freed.
+ webkit_dom_document_get_default_view (Intentional)
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_slice_alloc
+ fun:_ZN6WebKit14DOMObjectCache3putEPvS1_
+ fun:_ZL33webkit_dom_dom_window_constructormjP22_GObjectConstructParam
+ fun:g_object_newv
+ fun:g_object_new_valist
+ fun:g_object_new
+ fun:_ZN6WebKit13wrapDOMWindowEPN7WebCore9DOMWindowE
+ fun:webkit_dom_document_get_default_view
+ }
+
+#-----------------------------------------------------------------------
+# 3. Suppressions for real webkit bugs that are not yet fixed.
+# These should all be in webkit's bug tracking system (but a few aren't yet).
+
+{
+ # AtkProperty is cached but not released (see https://bugs.webkit.org/show_bug.cgi?id=118567#c2).
+ cacheAndReturnAtkProperty
+ Memcheck:Leak
+ fun:malloc
+ fun:_ZN3WTF10fastMallocEm
+ fun:_ZN3WTF13CStringBuffer19createUninitializedEm
+ fun:_ZN3WTF7CString4initEPKcm
+ fun:_ZN3WTF7CStringC1EPKcm
+ fun:_ZNK3WTF6String4utf8ENS0_14ConversionModeE
+ fun:cacheAndReturnAtkProperty
+}
+
+{
+ # AtkRelationSet is never freed because the target AtkObject is
+ # cached. See https://bugs.webkit.org/show_bug.cgi?id=118567.
+ AccessibilityUIElement::title()
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:g_object_weak_ref
+ fun:atk_relation_set_property
+ fun:g_object_newv
+ fun:g_object_new_valist
+ fun:g_object_new
+ fun:atk_relation_new
+ fun:atk_relation_set_add_relation_by_type
+ fun:_ZL31setAtkRelationSetFromCoreObjectPN7WebCore19AccessibilityObjectEP15_AtkRelationSet
+ fun:_ZL30webkitAccessibleRefRelationSetP10_AtkObject
+ fun:_ZN22AccessibilityUIElement14titleUIElementEv
+}
+
+{
+ # Leak in webkitAccessibleNew https://bugs.webkit.org/show_bug.cgi?id=118382
+ webkitAccessibleNew
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:webkitAccessibleNew
+}
+
+{
+ # Leak ATK text https://bugs.webkit.org/show_bug.cgi?id=118385
+ webkitAccessibleTextGetText
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_strdup
+ fun:_ZL27webkitAccessibleTextGetTextP8_AtkTextii
+ fun:_ZL23webkitAccessibleGetNameP10_AtkObject
+}
+
+{
+ # Leak PluginObject in exceptional circumstances https://bugs.webkit.org/show_bug.cgi?id=118528
+ WebCore::PluginView::start()
+ Memcheck:Leak
+ fun:malloc
+ fun:_ZL14pluginAllocateP4_NPPP7NPClass
+ fun:_NPN_CreateObject
+ fun:NPP_New
+ fun:_ZN7WebCore10PluginView5startEv
+}
+
+{
+ # TextCodecICU::registerCodecs is leaking https://bugs.webkit.org/show_bug.cgi?id=118505
+ WebCore::TextCodec::registerCodecs()
+ Memcheck:Leak
+ fun:malloc
+ fun:_ZN3WTF10fastMallocEm
+ fun:_ZN3WTF10fastStrDupEPKc
+ fun:_ZN7WebCore12TextCodecICU14registerCodecsEPFvPKcPFN3WTF10PassOwnPtrINS_9TextCodecEEERKNS_12TextEncodingEPKvESB_E
+}
+
+{
+ # DumpRenderTree WebKitWebView is leaked
+ webViewCreate
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_slice_alloc
+ fun:g_slist_prepend
+ fun:_ZL13webViewCreateP14_WebKitWebViewP15_WebKitWebFrame
+ fun:webkit_marshal_OBJECT__OBJECT
+ fun:g_closure_invoke
+ fun:signal_emit_unlocked_R
+ fun:g_signal_emit_valist
+ fun:g_signal_emit_by_name
+ fun:_ZN6WebKit12ChromeClient12createWindowEPN7WebCore5FrameERKNS1_16FrameLoadRequestERKNS1_14WindowFeaturesERKNS1_16NavigationActionE
+ fun:_ZNK7WebCore6Chrome12createWindowEPNS_5FrameERKNS_16FrameLoadRequestERKNS_14WindowFeaturesERKNS_16NavigationActionE
+ fun:_ZN7WebCore12createWindowEPNS_5FrameES1_RKNS_16FrameLoadRequestERKNS_14WindowFeaturesERb
+ fun:_ZN7WebCore9DOMWindow12createWindowERKN3WTF6StringERKNS1_12AtomicStringERKNS_14WindowFeaturesEPS0_PNS_5FrameESD_PFvSB_PvESE_
+ fun:_ZN7WebCore9DOMWindow4openERKN3WTF6StringERKNS1_12AtomicStringES4_PS0_S8_
+ fun:_ZN7WebCore11JSDOMWindow4openEPN3JSC9ExecStateE
+ fun:_ZN7WebCore32jsDOMWindowPrototypeFunctionOpenEPN3JSC9ExecStateE
+ }
Modified: trunk/Tools/Scripts/webkitpy/port/gtk.py (154386 => 154387)
--- trunk/Tools/Scripts/webkitpy/port/gtk.py 2013-08-21 16:00:26 UTC (rev 154386)
+++ trunk/Tools/Scripts/webkitpy/port/gtk.py 2013-08-21 16:11:10 UTC (rev 154387)
@@ -70,6 +70,12 @@
return multiplier * 12 * 1000
return multiplier * 6 * 1000
+ def driver_stop_timeout(self):
+ if self.get_option("leaks"):
+ # Wait the default timeout time before killing the process in driver.stop().
+ return self.default_timeout_ms()
+ return super(GtkPort, self).driver_stop_timeout()
+
def setup_test_run(self):
super(GtkPort, self).setup_test_run()
self._pulseaudio_sanitizer.unload_pulseaudio_module()
@@ -94,6 +100,7 @@
environment['G_DEBUG'] = 'gc-friendly'
xmlfilename = "".join(("drt-%p-", uuid.uuid1().hex, "-leaks.xml"))
xmlfile = os.path.join(self.results_directory(), xmlfilename)
+ suppressionsfile = self.path_from_webkit_base('Tools', 'Scripts', 'valgrind', 'suppressions.txt')
environment['VALGRIND_OPTS'] = \
"--tool=memcheck " \
"--num-callers=40 " \
@@ -108,7 +115,8 @@
"--undef-value-errors=no " \
"--gen-suppressions=all " \
"--xml=yes " \
- "--xml-file=\"%s\" " % (xmlfile)
+ "--xml-file=\"%s\" " \
+ "--suppressions=%s" % (xmlfile, suppressionsfile)
return environment
def _generate_all_test_configurations(self):
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes