ETHER: Fix additional race when closing a NAT(slirp) network connected device

This commit is contained in:
Mark Pizzolato 2019-08-23 23:55:41 -07:00
parent eaf34fe2c6
commit a031e69881
2 changed files with 6 additions and 2 deletions

View file

@ -1902,9 +1902,9 @@ sim_debug(dev->dbit, dev->dptr, "Writer Thread Starting\n");
pthread_mutex_lock (&dev->writer_lock); pthread_mutex_lock (&dev->writer_lock);
while (dev->handle) { while (dev->handle) {
pthread_cond_wait (&dev->writer_cond, &dev->writer_lock); pthread_cond_wait (&dev->writer_cond, &dev->writer_lock);
while (NULL != (request = dev->write_requests)) {
if (dev->handle == NULL) /* Shutting down? */ if (dev->handle == NULL) /* Shutting down? */
break; break;
while (NULL != (request = dev->write_requests)) {
/* Pull buffer off request list */ /* Pull buffer off request list */
dev->write_requests = request->next; dev->write_requests = request->next;
pthread_mutex_unlock (&dev->writer_lock); pthread_mutex_unlock (&dev->writer_lock);

View file

@ -456,6 +456,10 @@ int sim_slirp_send (SLIRP *slirp, const char *msg, size_t len, int flags)
struct slirp_write_request *request; struct slirp_write_request *request;
int wake_needed = 0; int wake_needed = 0;
if (!slirp) {
errno = EBADF;
return 0;
}
/* Get a buffer */ /* Get a buffer */
pthread_mutex_lock (&slirp->write_buffer_lock); pthread_mutex_lock (&slirp->write_buffer_lock);
if (NULL != (request = slirp->write_buffers)) if (NULL != (request = slirp->write_buffers))