From: Joshua Wise Date: Sat, 6 Dec 2008 12:22:48 +0000 (-0500) Subject: Be a little bit quieter, and consequentially be a lot bit faster. X-Git-Url: http://git.joshuawise.com/netwatch.git/commitdiff_plain/03bcc4db7995b38ecda927e65d7bf2e657477664?hp=-c Be a little bit quieter, and consequentially be a lot bit faster. --- 03bcc4db7995b38ecda927e65d7bf2e657477664 diff --git a/net/net.c b/net/net.c index 5d0c75b..e7bb80a 100644 --- a/net/net.c +++ b/net/net.c @@ -30,6 +30,7 @@ void eth_poll() struct pbuf *p; struct eth_hdr *ethhdr; static int ticks = 0; + int i = 15; /* Don't process more than 15 packets at a time; we don't want the host to get TOO badly slowed down... */ if (!_nic) return; @@ -44,7 +45,7 @@ void eth_poll() tcp_tmr(); ticks++; - if ((p = _nic->recv(_nic)) != NULL) + while ((i--) && ((p = _nic->recv(_nic)) != NULL)) { // outputf("NIC: Packet: %d bytes", p->tot_len); diff --git a/net/rfb.c b/net/rfb.c index ff0f089..057c406 100644 --- a/net/rfb.c +++ b/net/rfb.c @@ -185,7 +185,6 @@ static void send_fsm(struct tcp_pcb *pcb, struct rfb_state *state) { /* FALL THROUGH */ case SST_SENDING: - while (1) { unsigned char mbuf[8192 /* XXX magic */]; @@ -199,26 +198,18 @@ static void send_fsm(struct tcp_pcb *pcb, struct rfb_state *state) { if (left > 8192) left = 8192; - if (left > tcp_mss(pcb)) { - sndlength = tcp_mss(pcb); - } else { - sndlength = left; - } + memcpy(mbuf, fb->fbaddr + state->update_pos, left); /* It's OK if it becomes smaller later. */ - memcpy(mbuf, fb->fbaddr + state->update_pos, sndlength); /* It's OK if it becomes smaller later. */ - + sndlength = left; do { err = tcp_write(pcb, mbuf, sndlength, TCP_WRITE_FLAG_COPY /* This is my memory on the stack, thank you very much. */); - if (err == ERR_MEM) { - outputf("RFB: ERR_MEM sending %d", sndlength); + if (err == ERR_MEM) /* Back down until lwip says we've got space. */ sndlength /= 2; - } } while (err == ERR_MEM && sndlength > 1); - if (err == ERR_OK) { - outputf("RFB: attempting send %d", sndlength); - } else { - outputf("RFB: send error %d", err); + if (err != ERR_OK) { + /* We'll just give up for now and come back when we have space later. */ + //outputf("RFB: send error %d", err); break; } @@ -460,7 +451,7 @@ static err_t rfb_recv(void *arg, struct tcp_pcb *pcb, case OK: outputf("RFB FSM: ok"); - /* Might as well send now... */ + /* Kick off a send. */ if (state->send_state == SST_IDLE && state->update_requested) { send_fsm(pcb, state);