diff options
author | Sebastien Braun | 2010-10-03 16:14:44 +0200 |
---|---|---|
committer | Sebastien Braun | 2010-10-03 16:14:44 +0200 |
commit | ffee0868ef1341cfb7622821431cb73c52590962 (patch) | |
tree | bc96be65e0346ea25a8effb2118de59b08d54466 /3rdparty/openpgm-svn-r1135-0003-fix-rdata-congestion-control.patch | |
parent | Add patch for OpenPGM to fix switch() fallthrough (diff) | |
download | pvs-ffee0868ef1341cfb7622821431cb73c52590962.tar.gz pvs-ffee0868ef1341cfb7622821431cb73c52590962.tar.xz pvs-ffee0868ef1341cfb7622821431cb73c52590962.zip |
Assorted Multicast Fixes:
- Upgrade bundled OpenPGM to SVN r1135
- Timing fixes: Make all rate-limited and timer-pending operation wait
for at least 1ms to avoid busy-waiting
- No distinction between sending and receiving sockets when setting
up socket options (Receivers need to be able to send anyway when
using PGMCC).
- Switch from fixed-rate transmission to using PGMCC for congestion
control.
- Remove some obnoxious debugging outputs
- Some white space fixes
- Introduce a short waiting time before actually starting file transmission
in order to allow enough SPM messages to be sent so that receivers
can initialize properly.
- Fix MCASTFTANNOUNCE message to include full file name instead of basename.
- Fix generateMcastTransferID in order to gather more random IDs. PVSGUI
may become confused if transfer IDs are reused.
- Properly dispose of clientFileReceiveDialog when multicast transfer is
finished.
- Properly display transfer size in clientFileReceiveDialog
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; + } + |