diff --git a/sim_ether.c b/sim_ether.c index 4c75df70..fcc2aeb0 100644 --- a/sim_ether.c +++ b/sim_ether.c @@ -1940,8 +1940,15 @@ while (dev->handle) { /* Put buffer on free buffer list */ request->next = dev->write_buffers; dev->write_buffers = request; + request = NULL; } } +/* If we exited these loops with a request allocated, */ +/* avoid buffer leaking by putting it on free buffer list */ +if (request) { + request->next = dev->write_buffers; + dev->write_buffers = request; + } pthread_mutex_unlock (&dev->writer_lock); sim_debug(dev->dbit, dev->dptr, "Writer Thread Exiting\n");