forked from Imagelibrary/rtems
Patch from Eric Norum <eric@skatter.usask.ca>:
Remember the test to see if a socket could be read and written at
the same time by two different tasks? I discovered that if both
tasks attempt to close the socket a panic can occur from inside the
BSD code.
Closing the same socket twice from two different threads is
certainly an error, but a panic is not the greatest error reporting
method :-)
The following small change to the socket close routine should reduce
the chances of the panic.
This commit is contained in:
@@ -683,16 +683,15 @@ rtems_bsdnet_close (int fd)
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return -1;
|
||||
}
|
||||
error = soclose (so);
|
||||
i = rtems_file_descriptor_base(fd);
|
||||
fdsock[i].indexFreeNext = indexFreeHead;;
|
||||
indexFreeHead = i;
|
||||
error = soclose (so);
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
if (error) {
|
||||
errno = error;
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return -1;
|
||||
}
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -683,16 +683,15 @@ rtems_bsdnet_close (int fd)
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return -1;
|
||||
}
|
||||
error = soclose (so);
|
||||
i = rtems_file_descriptor_base(fd);
|
||||
fdsock[i].indexFreeNext = indexFreeHead;;
|
||||
indexFreeHead = i;
|
||||
error = soclose (so);
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
if (error) {
|
||||
errno = error;
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return -1;
|
||||
}
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -683,16 +683,15 @@ rtems_bsdnet_close (int fd)
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return -1;
|
||||
}
|
||||
error = soclose (so);
|
||||
i = rtems_file_descriptor_base(fd);
|
||||
fdsock[i].indexFreeNext = indexFreeHead;;
|
||||
indexFreeHead = i;
|
||||
error = soclose (so);
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
if (error) {
|
||||
errno = error;
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return -1;
|
||||
}
|
||||
rtems_bsdnet_semaphore_release ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user