summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2010-09-10 16:00:14 +0000
committerAndrey Nazarov <skuller@skuller.net>2010-09-10 16:00:14 +0000
commit08f1222fa53e52d53ee5969e46be87f7c44cc9f8 (patch)
tree14cd5c26b91cfc49c0f12599c781599db1127a67
parent9f09cb9993a3dc689f8fdc07672e3ece12271e62 (diff)
Kill frozen MVD channel if there is no buffered data and GTV connection dies.
-rw-r--r--source/mvd_client.c19
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 );