From 766ed7c0f132488646599d0cd73a25ffe1eecf34 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 29 Sep 1998 12:15:08 +0000 Subject: Patch from Eric Norum : 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. --- c/src/lib/libnetworking/rtems/rtems_syscall.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'c/src/lib') diff --git a/c/src/lib/libnetworking/rtems/rtems_syscall.c b/c/src/lib/libnetworking/rtems/rtems_syscall.c index a526eb2254..782a2f907b 100644 --- a/c/src/lib/libnetworking/rtems/rtems_syscall.c +++ b/c/src/lib/libnetworking/rtems/rtems_syscall.c @@ -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; } -- cgit v1.2.3