From: Kahrl Date: Thu, 13 Jun 2013 01:05:47 +0000 (+0200) Subject: When server sends late media, log to errorstream instead of crashing. X-Git-Tag: 0.4.8~340 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b3001bcd6e041f89db8514bf8603214fba6dd91e;p=oweals%2Fminetest.git When server sends late media, log to errorstream instead of crashing. Do a check for valid num_files before doing assert(!m_mesh_update_thread.IsRunning()); In particular, don't execute the assertion if all media has already been received. --- diff --git a/src/client.cpp b/src/client.cpp index ccd2034fc..19105b504 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -797,7 +797,8 @@ void Client::step(float dtime) all_stopped &= !(*thread)->IsRunning(); while (!(*thread)->m_file_data.empty()) { std::pair out = (*thread)->m_file_data.pop_front(); - ++m_media_received_count; + if(m_media_received_count < m_media_count) + m_media_received_count++; bool success = loadMedia(out.second, out.first); if(success){ @@ -1731,15 +1732,9 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) } else if(command == TOCLIENT_MEDIA) { - if (m_media_count == 0) - return; std::string datastring((char*)&data[2], datasize-2); std::istringstream is(datastring, std::ios_base::binary); - // Mesh update thread must be stopped while - // updating content definitions - assert(!m_mesh_update_thread.IsRunning()); - /* u16 command u16 total number of file bunches @@ -1754,11 +1749,31 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) */ int num_bunches = readU16(is); int bunch_i = readU16(is); - int num_files = readU32(is); + u32 num_files = readU32(is); infostream<<"Client: Received files: bunch "<