diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 2f151140e..713aeb7d1 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 3 #define VERSION_MINOR 0 -#define VERSION_REVISION 215 +#define VERSION_REVISION 216 // generated by configure, only macros. #include diff --git a/trunk/src/protocol/srs_protocol_stream.cpp b/trunk/src/protocol/srs_protocol_stream.cpp index 9892645e7..d9d6e9015 100755 --- a/trunk/src/protocol/srs_protocol_stream.cpp +++ b/trunk/src/protocol/srs_protocol_stream.cpp @@ -146,11 +146,13 @@ int SrsFastStream::grow(ISrsBufferReader* reader, int required_size) // the free space of buffer, // buffer = consumed_bytes + exists_bytes + free_space. int nb_free_space = (int)(buffer + nb_buffer - end); + + // the bytes already in buffer + int nb_exists_bytes = (int)(end - p); + srs_assert(nb_exists_bytes >= 0); + // resize the space when no left space. - if (nb_free_space < required_size) { - // the bytes already in buffer - int nb_exists_bytes = (int)(end - p); - srs_assert(nb_exists_bytes >= 0); + if (nb_free_space < required_size - nb_exists_bytes) { srs_verbose("move fast buffer %d bytes", nb_exists_bytes); // reset or move to get more space. @@ -168,7 +170,7 @@ int SrsFastStream::grow(ISrsBufferReader* reader, int required_size) // check whether enough free space in buffer. nb_free_space = (int)(buffer + nb_buffer - end); - if (nb_free_space < required_size) { + if (nb_free_space < required_size - nb_exists_bytes) { ret = ERROR_READER_BUFFER_OVERFLOW; srs_error("buffer overflow, required=%d, max=%d, left=%d, ret=%d", required_size, nb_buffer, nb_free_space, ret);