diff --git a/engine/server/server.h b/engine/server/server.h index fd312376f..41628849f 100644 --- a/engine/server/server.h +++ b/engine/server/server.h @@ -1243,7 +1243,7 @@ typedef struct mvddest_s { } mvddest_t; void SV_MVDPings (void); void SV_MVDWriteToDisk(int type, int to, float time); -void MVDWrite_Begin(qbyte type, int to, int size); +qboolean MVDWrite_Begin(qbyte type, int to, int size); void MVDSetMsgBuf(demobuf_t *prev,demobuf_t *cur); void SV_MVDStop (int reason, qboolean mvdonly); void SV_MVDStop_f (void); diff --git a/engine/server/sv_mvd.c b/engine/server/sv_mvd.c index 7c0220088..a2e41b8f2 100644 --- a/engine/server/sv_mvd.c +++ b/engine/server/sv_mvd.c @@ -1009,7 +1009,7 @@ void MVDMoveBuf(void) demo.dbuf->maxsize = MAXSIZE + demo.dbuf->bufsize; } -void MVDWrite_Begin(qbyte type, int to, int size) +qboolean MVDWrite_Begin(qbyte type, int to, int size) { qbyte *p; qboolean move = false; @@ -1022,7 +1022,7 @@ void MVDWrite_Begin(qbyte type, int to, int size) move = true; if (!SV_MVDWritePackets(1)) - return; + return false; if (move && demobuffer->start > demo.dbuf->bufsize + header + size) MVDMoveBuf(); @@ -1048,6 +1048,8 @@ void MVDWrite_Begin(qbyte type, int to, int size) demo.dbuf->h->size += size; if ((demobuffer->end += size) > demobuffer->last) demobuffer->last = demobuffer->end; + + return true; } /* diff --git a/engine/server/sv_send.c b/engine/server/sv_send.c index dd7c2e2cc..1e2b9be09 100644 --- a/engine/server/sv_send.c +++ b/engine/server/sv_send.c @@ -2073,8 +2073,12 @@ void SV_SendMVDMessage(void) msg.cursize = 0; if (!demo.recorder.delta_sequence) demo.recorder.delta_sequence = -1; + SV_WriteEntitiesToClient (&demo.recorder, &msg, true); - MVDWrite_Begin(dem_all, 0, msg.cursize); + + if (!MVDWrite_Begin(dem_all, 0, msg.cursize)) + return; + SZ_Write ((sizebuf_t*)demo.dbuf, msg.data, msg.cursize); // copy the accumulated multicast datagram // for this client out to the message