diff options
author | Martin Mares <mj@ucw.cz> | 2004-05-31 17:55:30 +0000 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2004-05-31 17:55:30 +0000 |
commit | 5f2a6a9ff324d846c86ffafb60ae5a4c01d06313 (patch) | |
tree | 36be871d290f918f9ae79a22b583069626277f2c /sysdep | |
parent | a4ffe2739d1a3efb45f209b63b2b6faa558e43a9 (diff) |
Fix handling on full pipe to client in bird. Prevent packet overflows
for even only medium sized route table output. Fix a strange garbled
output problem in the client. The latter seems to be caused by some
library doing tcflush while there is still command output pending. So
the best fix here is to do fflush and then tcdrain. Note that this
problem occurs only under certain load situations and is not too easy to
reproduce.
(by Andreas)
Diffstat (limited to 'sysdep')
-rw-r--r-- | sysdep/unix/main.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c index e16eb699..75852c18 100644 --- a/sysdep/unix/main.c +++ b/sysdep/unix/main.c @@ -183,10 +183,12 @@ cli_write(cli *c) if (c->tx_pos) { struct cli_out *o = c->tx_pos; - c->tx_pos = o->next; s->tbuf = o->outpos; if (sk_send(s, o->wpos - o->outpos) > 0) - ev_schedule(c->event); + { + c->tx_pos = o->next; + ev_schedule(c->event); + } } return !c->tx_pos; } |