summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-02-05 00:29:23 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-02-05 00:29:23 +0000
commitecec2ba7bd4f5b4786c30f7ed40db5faa124352d (patch)
tree07e2f7e39aa99a734445f1819a606f5a47e7a19f
parentCorrected spacing and added some new error checks that were needed (diff)
downloadrtems-ecec2ba7bd4f5b4786c30f7ed40db5faa124352d.tar.bz2
Patch from Eric Norum to correct bug induced by select() patch.
-rw-r--r--c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h3
-rw-r--r--c/src/exec/libnetworking/rtems/rtems_glue.c13
-rw-r--r--c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h3
-rw-r--r--c/src/lib/libnetworking/rtems/rtems_glue.c13
-rw-r--r--c/src/libnetworking/rtems/rtems_bsdnet_internal.h3
-rw-r--r--c/src/libnetworking/rtems/rtems_glue.c13
-rw-r--r--cpukit/libnetworking/rtems/rtems_bsdnet_internal.h3
-rw-r--r--cpukit/libnetworking/rtems/rtems_glue.c13
8 files changed, 44 insertions, 20 deletions
diff --git a/c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h b/c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h
index 71df12898f..8cbba180d6 100644
--- a/c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h
+++ b/c/src/exec/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/exec/libnetworking/rtems/rtems_glue.c b/c/src/exec/libnetworking/rtems/rtems_glue.c
index 28fb179c22..5eb885e70e 100644
--- a/c/src/exec/libnetworking/rtems/rtems_glue.c
+++ b/c/src/exec/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);
}
}
diff --git a/c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h b/c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h
index 71df12898f..8cbba180d6 100644
--- a/c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h
+++ b/c/src/lib/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/lib/libnetworking/rtems/rtems_glue.c b/c/src/lib/libnetworking/rtems/rtems_glue.c
index 28fb179c22..5eb885e70e 100644
--- a/c/src/lib/libnetworking/rtems/rtems_glue.c
+++ b/c/src/lib/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);
}
}
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);
}
}
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
index 71df12898f..8cbba180d6 100644
--- a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
+++ b/cpukit/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/cpukit/libnetworking/rtems/rtems_glue.c b/cpukit/libnetworking/rtems/rtems_glue.c
index 28fb179c22..5eb885e70e 100644
--- a/cpukit/libnetworking/rtems/rtems_glue.c
+++ b/cpukit/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);
}
}