ETHER: Fix additional race when closing a NAT(slirp) network connected device
This commit is contained in:
parent
eaf34fe2c6
commit
a031e69881
2 changed files with 6 additions and 2 deletions
|
@ -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);
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Add table
Reference in a new issue