1 # GLib Valgrind suppressions file
3 # This provides a list of suppressions for all of GLib (including GIO), for all
4 # Valgrind tools (memcheck, drd, helgrind, etc.) for the false positives and
5 # deliberate one-time leaks which GLib causes to be reported when running under
8 # When running an application which links to GLib under Valgrind, you can pass
9 # this suppression file to Valgrind using --suppressions=/path/to/glib-2.0.supp.
11 # http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress
13 # Note that there is currently no way for Valgrind to load this automatically
14 # (https://bugs.kde.org/show_bug.cgi?id=160905), so the best GLib can currently
15 # do is to install this file as part of its development package.
17 # This file should be updated if GLib introduces a new deliberate one-time leak,
18 # or another false race positive in Valgrind: please file bugs at:
20 # https://gitlab.gnome.org/GNOME/glib/issues/new
39 g-tls-backend-gnutls-init
42 fun:g_tls_backend_gnutls_init
50 fun:create_tokens_inlock
51 fun:initialize_module_inlock_reentrant
54 # One-time allocation from libc for getpwnam() results
61 fun:g_local_vfs_parse_name
105 fun:gobject_init_ctor
109 g-type-register-dynamic
113 fun:g_type_register_dynamic
117 g-type-register-static
121 fun:g_type_register_static
125 g-type-register-static-realloc
129 fun:g_type_register_static
133 g-type-register-static-calloc
137 fun:g_type_register_static
141 g-type-add-interface-dynamic
145 fun:g_type_add_interface_dynamic
149 g-type-add-interface-static
153 fun:g_type_add_interface_static
161 fun:g_rand_new_with_seed_array
172 fun:g_rand_new_with_seed_array
174 fun:get_global_random
190 fun:g_hash_table_resize
196 g-type-interface-init
200 fun:type_iface_vtable_base_init_Wm
206 fun:g_type_create_instance
208 fun:type_class_init_Wm
212 g-io-module-default-singleton-malloc
216 fun:g_type_create_instance
218 fun:_g_io_module_get_default
222 g-io-module-default-singleton-module
228 fun:_g_io_module_get_default
232 g-get-language-names-malloc
236 fun:g_get_language_names
240 g-get-language-names-calloc
244 fun:g_get_language_names
252 fun:g_static_mutex_get_mutex_impl
260 fun:g_system_thread_new
264 g-io-module-default-proxy-resolver-gnome
268 fun:g_proxy_resolver_gnome_init
270 fun:_g_io_module_get_default
273 # One-time getaddrinfo() configuration loading
275 g-threaded-resolver-getaddrinfo-config
279 fun:__resolv_conf_allocate
282 fun:do_lookup_by_name
285 # memcheck checks that the third argument to ioctl() is a valid pointer, but
286 # some ioctls use that argument as an integer
288 ioctl-with-non-pointer-param
292 fun:btrfs_reflink_with_progress
297 drd:ConflictingAccess
301 g-private-get-helgrind
309 drd:ConflictingAccess
313 g-private-set-helgrind
319 g-type-construct-free
320 drd:ConflictingAccess
321 fun:g_type_free_instance
324 g-type-construct-free-helgrind
326 fun:g_type_free_instance
331 drd:ConflictingAccess
335 g-variant-unref-helgrind
342 drd:ConflictingAccess
343 fun:_g_main_create_unix_signal_watch
346 g-unix-signals-dispatch
347 drd:ConflictingAccess
349 fun:dispatch_unix_signals*
352 g-unix-signals-dispatch-helgrind
355 fun:dispatch_unix_signals*
359 drd:ConflictingAccess
360 fun:g_unix_signal_watch*
363 g-unix-signals-other-helgrind
365 fun:g_unix_signal_watch*
368 g-unix-signals-handler
369 drd:ConflictingAccess
370 fun:g_unix_signal_handler*
373 g-unix-signals-handler-helgrind
375 fun:g_unix_signal_handler*
378 g-unix-signals-worker
379 drd:ConflictingAccess
383 g-unix-signals-worker-helgrind
390 drd:ConflictingAccess
392 fun:g_wakeup_acknowledge
397 drd:ConflictingAccess
398 fun:g_type_fundamental
401 g-type-fundamental-helgrind
403 fun:g_type_fundamental
406 g-type-class-peek-static
407 drd:ConflictingAccess
408 fun:g_type_class_peek_static
411 g-type-class-peek-static-helgrind
413 fun:g_type_class_peek_static
417 drd:ConflictingAccess
429 g-inet-address-get-type
430 drd:ConflictingAccess
431 fun:g_inet_address_get_type
434 g-inet-address-get-type-helgrind
436 fun:g_inet_address_get_type
439 # From: https://github.com/fredericgermain/valgrind/blob/master/glibc-2.X-drd.supp
442 drd:ConflictingAccess
447 drd:ConflictingAccess
452 drd:ConflictingAccess
456 # GSources do an opportunistic ref count check
458 g-source-set-ready-time
459 drd:ConflictingAccess
460 fun:g_source_set_ready_time
463 g-source-set-ready-time-helgrind
465 fun:g_source_set_ready_time
471 fun:g_source_iter_next
473 fun:g_main_context_iterate
477 g-object-instance-private
478 drd:ConflictingAccess
479 fun:*_get_instance_private
482 g-object-instance-private-helgrind
484 fun:*_get_instance_private
487 # GLib legitimately calls pthread_cond_signal without a mutex held
489 g-task-thread-complete
493 fun:g_task_thread_complete
496 g-task-thread-complete
500 fun:g_task_thread_complete
503 # False positive, but I can't explain how (FIXME)
512 # Real race, but is_cancelled() is an opportunistic function anyway
514 g-cancellable-is-cancelled
516 fun:g_cancellable_is_cancelled
525 fun:g_main_context_unref
532 fun:g_source_*_unlocked
537 fun:g_source_*_internal
542 g_object_real_dispose
544 fun:g_object_real_dispose
552 fun:g_object_new_valist
555 # g_set_user_dirs() deliberately leaks the previous cached g_get_user_*() values.
561 fun:set_str_if_different
565 # g_set_user_dirs() deliberately leaks the previous cached g_get_user_*() values.
571 fun:set_strv_if_different
575 # g_get_system_data_dirs() caches a one-time allocation
577 g_get_system_data_dirs
581 fun:g_build_system_data_dirs
582 fun:g_get_system_data_dirs
585 # g_get_user_data_dir() caches a one-time allocation
591 fun:g_build_user_data_dir
592 fun:g_get_user_data_dir
595 # gdesktopappinfo.c caches a one-time allocation global table of @desktop_file_dirs.
597 desktop_file_dirs_malloc
601 fun:desktop_file_dirs_lock
604 # gdesktopappinfo.c caches a one-time allocation global table of @desktop_file_dirs.
606 desktop_file_dirs_realloc
610 fun:desktop_file_dirs_lock
613 # gdesktopappinfo.c caches a one-time allocation global table of @desktop_file_dirs.
615 desktop_file_dir_unindexed_setup_search
619 fun:desktop_file_dir_unindexed_setup_search
620 fun:desktop_file_dir_unindexed_setup_search
623 # g_io_extension_point_register() caches a one-time allocation global table of @extension_points.
625 g_io_extension_point_register
629 fun:g_io_extension_point_register
632 # g_strerror() caches a one-time allocation global table of @errors.
642 # g_socket_connection_factory_register_type() caches a one-time allocation global table of @connection_types.
644 g_socket_connection_factory_register_type
648 fun:g_socket_connection_factory_register_type
651 # g_dbus_error_quark() never unregisters itself as a GDBusError domain, as it’s always available
657 fun:g_dbus_error_register_error_domain
658 fun:g_dbus_error_quark
661 # Thread-private data allocated once per thread
667 fun:g_private_set_alloc0
670 # Thread-private GMainContext stack
672 g_main_context_push_thread_default
677 fun:g_main_context_push_thread_default