@@ -387,6 +387,35 @@ static const struct test *find_test_int(const char *name)
387
387
}
388
388
389
389
390
+ static int test_exec (const struct test * test )
391
+ {
392
+ if (!test )
393
+ return EINVAL ;
394
+
395
+ struct memstat mstat_before ;
396
+ struct memstat mstat_after ;
397
+
398
+ mem_get_stat (& mstat_before );
399
+
400
+ int err = test -> exec ();
401
+ re_fhs_flush ();
402
+
403
+ mem_get_stat (& mstat_after );
404
+
405
+ if (mstat_before .blocks_cur != mstat_after .blocks_cur ) {
406
+ mem_debug ();
407
+ re_assert (false && "Test leaks memory blocks" );
408
+ }
409
+
410
+ if (mstat_before .bytes_cur != mstat_after .bytes_cur ) {
411
+ mem_debug ();
412
+ re_assert (false && "Test leaks memory bytes" );
413
+ }
414
+
415
+ return err ;
416
+ }
417
+
418
+
390
419
/**
391
420
* Run a single testcase in OOM (Out-of-memory) mode.
392
421
*
@@ -418,7 +447,7 @@ static int testcase_oom(const struct test *test, int levels, bool verbose)
418
447
419
448
mem_threshold_set (i );
420
449
421
- err = test -> exec ( );
450
+ err = test_exec ( test );
422
451
if (err == 0 ) {
423
452
/* success, stop now */
424
453
break ;
@@ -522,7 +551,7 @@ static int test_unit(const char *name, bool verbose)
522
551
goto out ;
523
552
}
524
553
525
- err = test -> exec ( );
554
+ err = test_exec ( test );
526
555
if (err ) {
527
556
DEBUG_WARNING ("%s: test failed (%m)\n" , name , err );
528
557
goto out ;
@@ -595,7 +624,7 @@ static int testcase_perf(const struct test *test, double *usec_avgp)
595
624
usec_start = tmr_jiffies_usec ();
596
625
for (i = 1 ; i <= DRYRUN_MAX ; i ++ ) {
597
626
598
- err = test -> exec ( );
627
+ err = test_exec ( test );
599
628
if (err )
600
629
return err ;
601
630
@@ -613,7 +642,7 @@ static int testcase_perf(const struct test *test, double *usec_avgp)
613
642
/* now for the real measurement */
614
643
usec_start = tmr_jiffies_usec ();
615
644
for (i = 0 ; i < n ; i ++ ) {
616
- err = test -> exec ( );
645
+ err = test_exec ( test );
617
646
if (err )
618
647
return err ;
619
648
}
@@ -786,7 +815,7 @@ static int thread_handler(void *arg)
786
815
return 0 ;
787
816
}
788
817
789
- err = thr -> test -> exec ( );
818
+ err = test_exec ( thr -> test );
790
819
if (err ) {
791
820
if (err == ESKIPPED ) {
792
821
err = 0 ;
@@ -1100,7 +1129,7 @@ int test_integration(const char *name, bool verbose)
1100
1129
(void )re_fprintf (stderr , " %-24s: " , test -> name );
1101
1130
1102
1131
if (test -> exec )
1103
- err = test -> exec ( );
1132
+ err = test_exec ( test );
1104
1133
1105
1134
if (err )
1106
1135
DEBUG_WARNING (" %-24s: NOK: %m\n" , test -> name , err );
@@ -1119,7 +1148,7 @@ int test_integration(const char *name, bool verbose)
1119
1148
(void )re_fprintf (stderr , " %-32s: " , test -> name );
1120
1149
1121
1150
if (test -> exec )
1122
- err = test -> exec ( );
1151
+ err = test_exec ( test );
1123
1152
1124
1153
if (err ) {
1125
1154
DEBUG_WARNING (" %-24s: NOK: %m\n" , test -> name , err );
0 commit comments