diff options
Diffstat (limited to '3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch')
-rw-r--r-- | 3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch b/3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch new file mode 100644 index 0000000..c6e721d --- /dev/null +++ b/3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch @@ -0,0 +1,42 @@ +Problem: When enough lost data accumulates, RDATA packets are sent at + a massively reduced rate and block the congestion control + window for subsequent RDATA packets. This results in a + transmission rate of close to zero for up to 15 seconds in + experiments. +Solution: Allow sending of RDATA packets even when congestion control + would normally disallow it, but still consume a token if + there is one left. + +diff -Naur openpgm-r1135-pristine/pgm/source.c openpgm-svn-r1135/pgm/source.c +--- openpgm-r1135-pristine/pgm/source.c 2010-09-09 03:24:47.000000000 +0200 ++++ openpgm-svn-r1135/pgm/source.c 2010-09-24 17:40:12.000000000 +0200 +@@ -2299,13 +2299,13 @@ + header->pgm_checksum = pgm_csum_fold (pgm_csum_block_add (unfolded_header, unfolded_odata, pgm_header_len)); + + /* congestion control */ +- if (sock->use_pgmcc && +- sock->tokens < pgm_fp8 (1)) +- { ++// if (sock->use_pgmcc && ++// sock->tokens < pgm_fp8 (1)) ++// { + // pgm_trace (PGM_LOG_ROLE_CONGESTION_CONTROL,_("Token limit reached.")); +- sock->blocklen = tpdu_length; +- return FALSE; +- } ++// sock->blocklen = tpdu_length; ++// return FALSE; ++// } + + const ssize_t sent = pgm_sendto (sock, + sock->is_controlled_rdata, /* rate limited */ +@@ -2323,7 +2323,8 @@ + const pgm_time_t now = pgm_time_update_now(); + + if (sock->use_pgmcc) { +- sock->tokens -= pgm_fp8 (1); ++ if (sock->tokens >= pgm_fp8 (1)) ++ sock->tokens -= pgm_fp8 (1); + sock->ack_expiry = now + sock->ack_expiry_ivl; + } + |