On Thu, Dec 18, 2014 at 09:41:47AM +0000, Daniel Mrzyglod wrote: > In test_sched, we are missing NULL pointer checks after calls to create the > mempool and to allocate an mbuf. Add in these checks using VERIFY macros. > > Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod at intel.com> > --- > app/test/test_sched.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/app/test/test_sched.c b/app/test/test_sched.c > index c957d80..9b6e037 100644 > --- a/app/test/test_sched.c > +++ b/app/test/test_sched.c > @@ -166,6 +166,7 @@ test_sched(void) > int err; > > mp = create_mempool(); > + VERIFY(mp != NULL,"Error create mempool\n"); > > port_param.socket = 0; > port_param.rate = (uint64_t) 10000 * 1000 * 1000 / 8; > @@ -184,6 +185,7 @@ test_sched(void) > > for (i = 0; i < 10; i++) { > in_mbufs[i] = rte_pktmbuf_alloc(mp); > + VERIFY(in_mbufs[i] != NULL, "Bad packet allocation"); > prepare_pkt(in_mbufs[i]); > } > > -- > 2.1.0 > >
Looking at the VERIFY macro, its defined as: #define VERIFY(exp,fmt,args...) \ if (!(exp)) { \ printf(fmt, ##args); return -1; \ } Thats really bad practice, as it embodies a return into the VERIFY macro, creating hidden function exit points that the programmer can't clean up within. Every use of the VERIFY macro in test_sched causes the program to return without freeing any of the memory allocated in the function (not that the function is any good at cleaning up after itself anyway), but I would recommend that you modify the macro as such: #define VERIFY(exp, fmt, args...) \ if (!(exp)) { \ printf(fmt, ##args); \ 0;\ } else \ 1;\ } That way you can use the macro like this: if (VERIFY(in_mbufs[i] != NULL, "Bad packet allocation") { //Insert cleanup code here } Neil