From 8124e92f6d716702e4060e9cb79a9e378c05803b Mon Sep 17 00:00:00 2001 From: Brett Gordon Date: Thu, 22 Sep 2016 10:10:53 -0400 Subject: [PATCH] syscall_net: various bug fixes. --- Kernel/syscall_net.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Kernel/syscall_net.c b/Kernel/syscall_net.c index 1beab3e0..6716274e 100644 --- a/Kernel/syscall_net.c +++ b/Kernel/syscall_net.c @@ -95,6 +95,7 @@ static struct socket *alloc_socket(void) while (s < sockets + NSOCKET) { if (s->s_state == SS_UNUSED) { s->s_state = SS_INIT; + s->s_iflag = 0; irqrestore(irq); return s; } @@ -107,10 +108,13 @@ static struct socket *alloc_socket(void) struct socket *sock_alloc_accept(struct socket *s) { struct socket *n = alloc_socket(); + int sockno; if (n == NULL) return NULL; + sockno = n->s_num; memcpy(n, s, sizeof(*n)); + n->s_num = sockno; n->s_state = SS_ACCEPTING; n->s_data = s->s_num; return n; @@ -501,9 +505,9 @@ arg_t _accept(void) udata.u_error = EALREADY; return -1; } - + /* Needs locking versus interrupts */ - while ((n = sock_pending(s)) != NULL) { + while ((n = sock_pending(s)) == NULL) { if (psleep_flags(s, flag)) return -1; if (s->s_error) @@ -665,6 +669,6 @@ void sock_init(void) struct socket *s = sockets; uint8_t n = 0; while (s < sockets + NSOCKET) - s++->s_num = n; + s++->s_num = n++; netdev_init(); } -- 2.34.1