[Spice-devel] [PATCH spice-server 4/4] main_channel: start monitoring if the client connection is alive after completing the bit-rate test
Alon Levy
alevy at redhat.com
Wed Aug 14 09:28:19 PDT 2013
Maybe split the title into a smaller length title and the rest?
Other then that looks good, ACK.
> ---
> server/main_channel.c | 27 +++++++++++++++++++++------
> server/main_channel.h | 2 +-
> server/reds.c | 3 +--
> 3 files changed, 23 insertions(+), 9 deletions(-)
>
> diff --git a/server/main_channel.c b/server/main_channel.c
> index fe032a6..54718ba 100644
> --- a/server/main_channel.c
> +++ b/server/main_channel.c
> @@ -55,6 +55,8 @@
>
> #define PING_INTERVAL (1000 * 10)
>
> +#define CLIENT_CONNECTIVITY_TIMEOUT (30*1000) // 30 seconds
> +
> static uint8_t zero_page[ZERO_BUF_SIZE] = {0};
>
> enum {
> @@ -201,16 +203,20 @@ RedClient
> *main_channel_get_client_by_link_id(MainChannel *main_chan, uint32_t c
>
> static int main_channel_client_push_ping(MainChannelClient *mcc, int size);
>
> -void main_channel_client_start_net_test(MainChannelClient *mcc)
> +void main_channel_client_start_net_test(MainChannelClient *mcc, int
> test_rate)
> {
> if (!mcc || mcc->net_test_id) {
> return;
> }
> - if (main_channel_client_push_ping(mcc, NET_TEST_WARMUP_BYTES)
> - && main_channel_client_push_ping(mcc, 0)
> - && main_channel_client_push_ping(mcc, NET_TEST_BYTES)) {
> - mcc->net_test_id = mcc->ping_id - 2;
> - mcc->net_test_stage = NET_TEST_STAGE_WARMUP;
> + if (test_rate) {
> + if (main_channel_client_push_ping(mcc, NET_TEST_WARMUP_BYTES)
> + && main_channel_client_push_ping(mcc, 0)
> + && main_channel_client_push_ping(mcc, NET_TEST_BYTES)) {
> + mcc->net_test_id = mcc->ping_id - 2;
> + mcc->net_test_stage = NET_TEST_STAGE_WARMUP;
> + }
> + } else {
> + red_channel_client_start_connectivity_monitoring(&mcc->base,
> CLIENT_CONNECTIVITY_TIMEOUT);
> }
> }
>
> @@ -970,6 +976,8 @@ static int main_channel_handle_parsed(RedChannelClient
> *rcc, uint32_t size, uint
> spice_printerr("net test: invalid values, latency %"
> PRIu64
> " roundtrip %" PRIu64 ". assuming high"
> "bandwidth", mcc->latency, roundtrip);
> +
> red_channel_client_start_connectivity_monitoring(&mcc->base,
> +
> CLIENT_CONNECTIVITY_TIMEOUT);
> break;
> }
> mcc->bitrate_per_sec = (uint64_t)(NET_TEST_BYTES * 8) *
> 1000000
> @@ -980,6 +988,8 @@ static int main_channel_handle_parsed(RedChannelClient
> *rcc, uint32_t size, uint
> mcc->bitrate_per_sec,
> (double)mcc->bitrate_per_sec / 1024 / 1024,
> main_channel_client_is_low_bandwidth(mcc) ? " LOW
> BANDWIDTH" : "");
> + red_channel_client_start_connectivity_monitoring(&mcc->base,
> +
> CLIENT_CONNECTIVITY_TIMEOUT);
> break;
> default:
> spice_printerr("invalid net test stage, ping id %d test id
> %d stage %d",
> @@ -989,6 +999,11 @@ static int main_channel_handle_parsed(RedChannelClient
> *rcc, uint32_t size, uint
> mcc->net_test_stage = NET_TEST_STAGE_INVALID;
> }
> break;
> + } else {
> + /*
> + * channel client monitors the connectivity using ping-pong
> messages
> + */
> + red_channel_client_handle_message(rcc, size, type, message);
> }
> #ifdef RED_STATISTICS
> reds_update_stat_value(roundtrip);
> diff --git a/server/main_channel.h b/server/main_channel.h
> index 27367a4..29eb8d4 100644
> --- a/server/main_channel.h
> +++ b/server/main_channel.h
> @@ -54,7 +54,7 @@ void main_channel_push_agent_disconnected(MainChannel
> *main_chan);
> void main_channel_client_push_agent_tokens(MainChannelClient *mcc, uint32_t
> num_tokens);
> void main_channel_client_push_agent_data(MainChannelClient *mcc, uint8_t*
> data, size_t len,
> spice_marshaller_item_free_func
> free_data, void *opaque);
> -void main_channel_client_start_net_test(MainChannelClient *mcc);
> +void main_channel_client_start_net_test(MainChannelClient *mcc, int
> test_rate);
> // TODO: huge. Consider making a reds_* interface for these functions
> // and calling from main.
> void main_channel_push_init(MainChannelClient *mcc, int
> display_channels_hint,
> diff --git a/server/reds.c b/server/reds.c
> index ae87c90..0f81a32 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -1718,11 +1718,10 @@ static void reds_handle_main_link(RedLinkInfo *link)
> main_channel_push_name(mcc, spice_name);
> if (spice_uuid_is_set)
> main_channel_push_uuid(mcc, spice_uuid);
> -
> - main_channel_client_start_net_test(mcc);
> } else {
> reds_mig_target_client_add(client);
> }
> + main_channel_client_start_net_test(mcc, !mig_target);
> }
>
> #define RED_MOUSE_STATE_TO_LOCAL(state) \
> --
> 1.8.1.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list