diff options
author | Andrey Nazarov <skuller@skuller.net> | 2010-09-10 16:00:14 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2010-09-10 16:00:14 +0000 |
commit | 08f1222fa53e52d53ee5969e46be87f7c44cc9f8 (patch) | |
tree | 14cd5c26b91cfc49c0f12599c781599db1127a67 | |
parent | 9f09cb9993a3dc689f8fdc07672e3ece12271e62 (diff) |
Kill frozen MVD channel if there is no buffered data and GTV connection dies.
-rw-r--r-- | source/mvd_client.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/source/mvd_client.c b/source/mvd_client.c index 56c3af8..428e1cf 100644 --- a/source/mvd_client.c +++ b/source/mvd_client.c @@ -681,12 +681,27 @@ static void write_message( gtv_t *gtv, gtv_clientop_t op ) { write_stream( gtv, msg_write.data, msg_write.cursize ); } +static void q_noreturn gtv_oob_kill( mvd_t *mvd ) { + gtv_t *gtv = mvd->gtv; + + if( gtv ) { + // don't kill connection! + gtv->mvd = NULL; + mvd->gtv = NULL; + } + + MVD_Destroyf( mvd, "Ran out of buffers" ); +} + static qboolean gtv_wait_stop( mvd_t *mvd ) { gtv_t *gtv = mvd->gtv; int min_packets = mvd->min_packets, usage; // if not connected, flush any data left if( !gtv || gtv->state != GTV_READING ) { + if( !mvd->num_packets ) { + gtv_oob_kill( mvd ); + } min_packets = 1; } @@ -728,9 +743,7 @@ static void gtv_wait_start( mvd_t *mvd ) { // FIXME: if connection is suspended, kill the channel if( gtv->state != GTV_READING ) { - gtv->mvd = NULL; - mvd->gtv = NULL; // but don't kill connection! - MVD_Destroyf( mvd, "Ran out of buffers" ); + gtv_oob_kill( mvd ); } Com_Printf( "[%s] -=- Buffering data...\n", mvd->name ); |