summaryrefslogtreecommitdiffstats
path: root/3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch
diff options
context:
space:
mode:
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.patch42
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;
+ }
+