summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-12-04 15:14:43 +0200
committerimarom <imarom@cisco.com>2016-12-04 15:14:43 +0200
commit10e549c80e4652161c0b212be835ec01e33441e9 (patch)
tree57152c5e05077bc40d9cd2801f639ccc0875d47a
parentc2e0fc656cb6b3e34939dbe2b9495282f6fd0f53 (diff)
valgrind cleanup and suppresion
Signed-off-by: imarom <imarom@cisco.com>
-rwxr-xr-xscripts/t-rex-64-valgrind3
-rw-r--r--scripts/valgrind.sup57
-rw-r--r--src/main_dpdk.cpp19
3 files changed, 74 insertions, 5 deletions
diff --git a/scripts/t-rex-64-valgrind b/scripts/t-rex-64-valgrind
index 5ac2becf..d11491ba 100755
--- a/scripts/t-rex-64-valgrind
+++ b/scripts/t-rex-64-valgrind
@@ -31,7 +31,8 @@ export LD_LIBRARY_PATH=$PWD:$PWD/dumy_libs
fi
export VALGRIND_LIB=/auto/proj-pcube-b/apps/PL-b/tools/valgrind-dpdk/lib/valgrind
-export VALGRIND_BIN="/auto/proj-pcube-b/apps/PL-b/tools/valgrind-dpdk/bin/valgrind --leak-check=full"
+export VALGRIND_BIN="/auto/proj-pcube-b/apps/PL-b/tools/valgrind-dpdk/bin/valgrind --leak-check=full --error-exitcode=1 --suppressions=valgrind.sup"
+export GLIBCXX_FORCE_NEW=1
if [ -t 0 ] && [ -t 1 ]; then
export is_tty=true
diff --git a/scripts/valgrind.sup b/scripts/valgrind.sup
new file mode 100644
index 00000000..b6bcc883
--- /dev/null
+++ b/scripts/valgrind.sup
@@ -0,0 +1,57 @@
+{
+ DL issue
+ 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:/lib/x86_64-linux-gnu/ld-2.19.so
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+
+{
+ DPDK threads
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate_tls
+ fun:allocate_stack
+ fun:pthread_create@@GLIBC_2.2.5
+ fun:rte_eal_init
+ fun:_Z9main_testiPPc
+ fun:(below main)
+}
+
+{
+ DPDK interrupt thread
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate_tls
+ fun:allocate_stack
+ fun:pthread_create@@GLIBC_2.2.5
+ fun:rte_eal_intr_init
+ fun:rte_eal_init
+ fun:_Z9main_testiPPc
+ fun:(below main)
+}
+
+{
+ DPDK epoll ctl
+ Memcheck:Param
+ epoll_ctl(event)
+ fun:epoll_ctl
+ fun:eal_intr_thread_main
+ fun:start_thread
+ fun:clone
+}
+
diff --git a/src/main_dpdk.cpp b/src/main_dpdk.cpp
index add2e70d..c9e0c6a1 100644
--- a/src/main_dpdk.cpp
+++ b/src/main_dpdk.cpp
@@ -3429,12 +3429,14 @@ bool CGlobalTRex::is_all_links_are_up(bool dump){
void CGlobalTRex::try_stop_all_cores(){
TrexStatelessDpQuit * dp_msg= new TrexStatelessDpQuit();
- TrexStatelessRxQuit * rx_msg= new TrexStatelessRxQuit();
send_message_all_dp(dp_msg);
+ delete dp_msg;
+
if (get_is_stateless()) {
+ TrexStatelessRxQuit * rx_msg= new TrexStatelessRxQuit();
send_message_to_rx(rx_msg);
}
- delete dp_msg;
+
// no need to delete rx_msg. Deleted by receiver
bool all_core_finished = false;
int i;
@@ -3796,7 +3798,14 @@ bool CGlobalTRex::Create(){
}
void CGlobalTRex::Delete(){
+
m_zmq_publisher.Delete();
+ m_fl.Delete();
+
+ if (m_trex_stateless) {
+ delete m_trex_stateless;
+ m_trex_stateless = NULL;
+ }
}
@@ -4597,8 +4606,11 @@ void CGlobalTRex::shutdown() {
for (int i = 0; i < m_max_ports; i++) {
m_ports[i].stop();
}
+
if (m_mark_for_shutdown != SHUTDOWN_TEST_ENDED) {
/* we should stop latency and exit to stop agents */
+ Delete();
+ utl_termio_reset();
exit(-1);
}
}
@@ -4762,7 +4774,6 @@ int CGlobalTRex::stop_master(){
dump_stats(stdout,CGlobalStats::dmpSTANDARD);
dump_post_test_stats(stdout);
- m_fl.Delete();
return (0);
}
@@ -5615,7 +5626,7 @@ int main_test(int argc , char * argv[]){
g_trex.stop_master();
g_trex.Delete();
utl_termio_reset();
-
+
return (0);
}