diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-02-05 00:29:23 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-02-05 00:29:23 +0000 |
commit | ecec2ba7bd4f5b4786c30f7ed40db5faa124352d (patch) | |
tree | 07e2f7e39aa99a734445f1819a606f5a47e7a19f /c/src/libnetworking | |
parent | Corrected spacing and added some new error checks that were needed (diff) | |
download | rtems-ecec2ba7bd4f5b4786c30f7ed40db5faa124352d.tar.bz2 |
Patch from Eric Norum to correct bug induced by select() patch.
Diffstat (limited to 'c/src/libnetworking')
-rw-r--r-- | c/src/libnetworking/rtems/rtems_bsdnet_internal.h | 3 | ||||
-rw-r--r-- | c/src/libnetworking/rtems/rtems_glue.c | 13 |
2 files changed, 11 insertions, 5 deletions
diff --git a/c/src/libnetworking/rtems/rtems_bsdnet_internal.h b/c/src/libnetworking/rtems/rtems_bsdnet_internal.h index 71df12898f..8cbba180d6 100644 --- a/c/src/libnetworking/rtems/rtems_bsdnet_internal.h +++ b/c/src/libnetworking/rtems/rtems_bsdnet_internal.h @@ -188,5 +188,8 @@ int rtems_bsdnet_makeFdForSocket (void *); #define NETISR_IP_EVENT (1 << NETISR_IP) #define NETISR_ARP_EVENT (1 << NETISR_ARP) #define NETISR_EVENTS (NETISR_IP_EVENT|NETISR_ARP_EVENT) +#if (SBWAIT_EVENT & SOSLEEP_EVENT & NETISR_EVENTS) +# error "Network event conflict" +#endif #endif /* _RTEMS_BSDNET_INTERNAL_H_ */ diff --git a/c/src/libnetworking/rtems/rtems_glue.c b/c/src/libnetworking/rtems/rtems_glue.c index 28fb179c22..5eb885e70e 100644 --- a/c/src/libnetworking/rtems/rtems_glue.c +++ b/c/src/libnetworking/rtems/rtems_glue.c @@ -296,6 +296,11 @@ sbwait(sb) sb->sb_sel.si_pid = tid; /* + * Show that socket is waiting + */ + sb->sb_flags |= SB_WAIT; + + /* * Release the network semaphore. */ rtems_bsdnet_semaphore_release (); @@ -329,11 +334,9 @@ sowakeup(so, sb) register struct socket *so; register struct sockbuf *sb; { - rtems_id tid; - - if ((tid = sb->sb_sel.si_pid) != 0) { - sb->sb_sel.si_pid = 0; - rtems_event_send (tid, SBWAIT_EVENT); + if (sb->sb_flags & SB_WAIT) { + sb->sb_flags &= ~SB_WAIT; + rtems_event_send (sb->sb_sel.si_pid, SBWAIT_EVENT); } } |