Commit graph

23 commits

Author SHA1 Message Date
Thomas Haller
44dc97d184 platform: fetch objects via the event socket
Use the event socket to request object via NLM_F_DUMP.

No longer use 'priv->nlh' socket to fetch objects.
Instead fetch them via the priv->nlh_event socket that also
provides asynchronous events when objects change.

That way, the events are in sync with our explicit requests
and we can directly use the events. Previously, the events were
only used to indicate that a refetch must happen, so that every
event triggered a complete dump of all addresses/routes.

We still use 'priv->nlh' to make synchronous requests such as
adding/changing/deleting objects. That means, after we send a
request, we must make sure that the result manifested itself
at 'nlh_event' socket and the platform cache.
That's why we sometimes still must force a dump to sync changes.
That could be improved by using only one netlink socket so that
we would wait for the ACK of our request.

While not yet perfect, this already significantly reduces the number of
fetches. Additionally, before, whenever requesting a dump of addresses
or routes (which we did much more often, search for "get_kernel_object for type"
log lines), we always dumped IPv4 and IPv6 together. Now only request
the addr-family in question.

https://bugzilla.gnome.org/show_bug.cgi?id=747985
https://bugzilla.redhat.com/show_bug.cgi?id=1211133
(cherry picked from commit 051cf8bbde)
2015-06-21 15:30:49 +02:00
Thomas Haller
4fa342aefc valgrind: add comment to valgrind suppression explaining how to reproduce
(cherry picked from commit 0554474720)
2015-06-19 11:52:50 +02:00
Thomas Haller
dfa26cb007 valgrind: add valgrind suppression for Fedora 22
Fixes for example valgrind tests for ./libnm/tests/test-nm-client:

    ==25772== Conditional jump or move depends on uninitialised value(s)
    ==25772==    at 0x40198D8: index (strchr.S:106)
    ==25772==    by 0x400777C: expand_dynamic_string_token (dl-load.c:369)
    ==25772==    by 0x400777C: fillin_rpath (dl-load.c:439)
    ==25772==    by 0x4007FCF: _dl_init_paths (dl-load.c:816)
    ==25772==    by 0x4002F38: dl_main (rtld.c:1194)
    ==25772==    by 0x401750F: _dl_sysdep_start (dl-sysdep.c:249)
    ==25772==    by 0x4004C20: _dl_start_final (rtld.c:306)
    ==25772==    by 0x4004C20: _dl_start (rtld.c:412)
    ==25772==    by 0x4000C97: ??? (in /usr/lib64/ld-2.21.so)
    ==25772==    by 0x1: ???
    ==25772==    by 0xFFEFFF6B2: ???
    ==25772==    by 0xFFEFFF6EF: ???
    ==25772==
    {
       <insert_a_suppression_name_here>
       Memcheck:Cond
       fun:index
       fun:expand_dynamic_string_token
       fun:fillin_rpath
       fun:_dl_init_paths
       fun:dl_main
       fun:_dl_sysdep_start
       fun:_dl_start_final
       fun:_dl_start
       obj:/usr/lib64/ld-2.21.so
       obj:*
       obj:*
       obj:*
    }

(cherry picked from commit d84ac1baca)
2015-06-19 11:52:50 +02:00
Thomas Haller
2a8e698b76 valgrind: disable suppression for libnl
Not sure why (and whether!) this is really needed. Disable
it for now, resurrect it later if need be.

(cherry picked from commit bde42e78db)
2015-05-13 16:07:36 +02:00
Thomas Haller
7234352fd7 platform: fix memleak in link_delete()
Turns out, the valgrind suppression was hiding a memleak

(cherry picked from commit 0c258402c7)
2015-05-13 16:07:36 +02:00
Thomas Haller
272d2c83f1 valgrind: add libnl suppression
Add a comment about the upstream bug that fixes
the suppressed memleak in libnl.

Also, add a different backtrace for the same bug.
It currently doesn't hit easily, because we don't
call nl_msg_parse() often. In the future we will
though.

(cherry picked from commit 8e2ad8a3bd)
2015-05-13 16:07:35 +02:00
Thomas Haller
4ffc6f85c7 trivial: add comment to valgrind suppression file
(cherry picked from commit 815b436c0a)
2015-05-13 16:07:35 +02:00
Thomas Haller
f9ef0914b5 valgrind: add libnl suppression
Got this on F21, libnl 3.2.25-5.fc21

(cherry picked from commit 0731da16fa)
2015-05-13 16:07:35 +02:00
Thomas Haller
b6bc5641ed valgrind: fix suppressions for glib for Fedora 21
(cherry picked from commit b97a45957f)
2015-04-17 12:19:43 +02:00
Thomas Haller
aa725e3abf valgrind: add comment to suppressions file
(cherry picked from commit 40fbb36aad)
2015-04-17 12:19:43 +02:00
Thomas Haller
da27c799ad valgrind: fix suppressions for Fedora 20
Fixes: 266f133797
(cherry picked from commit 641a57994c)
2015-03-16 11:46:51 +01:00
Dan Williams
0bf4c1e5d5 valgrind: fix suppression for newer glib
(cherry picked from commit 28983b705c)
2015-03-16 11:43:17 +01:00
Dan Williams
266f133797 valgrind: update suppressions for newer glib and toolchain changes
It appears that the .isra and .part pieces can change depending on
how glib was built, so ignore those parts.  Add some new suppressions
for newer glib too.

(cherry picked from commit 3cde821344)
2015-03-16 11:43:17 +01:00
Thomas Haller
ab09532c6b libnm/tests: add valgrind suppressions
(cherry picked from commit bf68917ca3)
2015-03-13 11:50:05 +01:00
Thomas Haller
e92ba835ad tests: add valgrind suppression for callouts tests
(cherry picked from commit d5f8312996)
2015-03-13 11:50:04 +01:00
Thomas Haller
eab46bce70 tests: add valgrind suppression for test-general-with-expect
==8781== Syscall param rt_sigaction(act->sa_flags) points to uninitialised byte(s)
    ==8781==    at 0x5E547DD: __libc_sigaction (sigaction.c:64)
    ==8781==    by 0x8149025: unref_unix_signal_handler_unlocked (gmain.c:4981)
    ==8781==    by 0x81490BF: g_child_watch_finalize (gmain.c:5025)
    ==8781==    by 0x8149535: g_source_unref_internal (gmain.c:1997)
    ==8781==    by 0x814C377: g_main_context_dispatch (gmain.c:3094)
    ==8781==    by 0x814C627: g_main_context_iterate.isra.24 (gmain.c:3713)
    ==8781==    by 0x814CA39: g_main_loop_run (gmain.c:3907)
    ==8781==    by 0x11AC8B: test_nm_utils_kill_child_async_do (test-general-with-expect.c:90)
    ==8781==    by 0x119769: test_nm_utils_kill_child (test-general-with-expect.c:292)
    ==8781==    by 0x81705E0: g_test_run_suite_internal (gtestutils.c:2067)
    ==8781==    by 0x81707A5: g_test_run_suite_internal (gtestutils.c:2138)
    ==8781==    by 0x8170B1A: g_test_run_suite (gtestutils.c:2189)
    ==8781==  Address 0xffeffed28 is on thread 1's stack
    ==8781==
    {
       <insert_a_suppression_name_here>
       Memcheck:Param
       rt_sigaction(act->sa_flags)
       fun:__libc_sigaction
       fun:unref_unix_signal_handler_unlocked
       fun:g_child_watch_finalize
       fun:g_source_unref_internal
       fun:g_main_context_dispatch
       fun:g_main_context_iterate.isra.24
       fun:g_main_loop_run
       fun:test_nm_utils_kill_child_async_do
       fun:test_nm_utils_kill_child
       fun:g_test_run_suite_internal
       fun:g_test_run_suite_internal
       fun:g_test_run_suite
    }

(cherry picked from commit 171a9eabc6)
2015-03-13 11:50:04 +01:00
Thomas Haller
31483e23d1 test: add valgrind suppressions
`make check` failed on fc20.armv7hl

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-18 20:33:10 +01:00
Thomas Haller
d5626b9f41 test: adjust valgrind.suppressions for make check
Make some suppressions more generic, because they
did not match on my F20.

The previous suppression for 'fun:gobject_init_ctor'
also had a syntax error. Fix that too.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-08 14:29:19 +01:00
Thomas Haller
2540966492 test: update valgrind.suppressions for make check
`make check` '--with-valgrind=yes' failed due to memory leaks detected
by valgrind. These leaks originate from glib structures, and should be
ignored.

https://bugzilla.gnome.org/show_bug.cgi?id=705160

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-12-11 15:30:49 +01:00
Dan Williams
cefdb51fbe valgrind: suppressions update
This suppression didn't work on F17 for some reason, even though the
stacktrace was the same.  Valgrind wanted some kind of:

obj:<path to libglib>

between the calloc and the g_malloc0 lines; but we don't actually
care much about the calloc anyway.
2013-05-06 11:51:51 -05:00
Pavel Šimerda
15fd7cd75e platform: link management
Create the new nm-platform framework and implement link (or interface)
management. The nm-platform serves as the point of contact between
the rest of NetworkManager and the operating system.

There are two backends for nm-platform:

* NMFakePlatform: Fake kernel backend for testing purposes
* NMLinuxPlatform: Linux kernel backend for actual use

A comprehensive testsuite is included and will be extended with new
feature additions. To enable the Linux part of the testsuite, use
--enable-tests=root configure options and run 'make check' as root.
Use --enable-code-coverage for code coverage support.

  ./autogen.sh --enable-tests=root --enable-code-coverage
  make
  make -C src/platform check-code-coverage

Link features:

* Retrieve the list of links
* Translate between indexes and names
* Discover device type
* Add/remove dummy interfaces (for testing)

Thanks to Thomas Graf for helping with libnl3 synchronization issues.
2013-04-10 16:40:58 +02:00
Dan Williams
bc921e35da valgrind: add common suppressions
Stuff for GObject and NSS that is allocated but never expected
to be freed.
2013-04-01 17:12:37 -05:00
Pavel Šimerda
2675af05b9 testing: support for valgrind memory checking
Use @VALGRIND_RULES@ in Makefile.am for modules that you want to check
for memory leaks.
2013-03-22 23:08:20 +01:00