diff --git a/README.md b/README.md
index 4c180d863..26f185acf 100755
--- a/README.md
+++ b/README.md
@@ -341,6 +341,7 @@ Remark:
## History
+* v2.0, 2016-09-12, fix fast stream error bug. 2.0.216
* v2.0, 2016-09-09, [2.0 beta1(2.0.215)][r2.0b1] released. 89941 lines.
* v2.0, 2016-09-09, refine librtmp comments about NALUs. 2.0.215
* v2.0, 2016-09-05, fix memory leak at source. 2.0.214
diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp
index 246d04d5e..3f633f129 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 2
#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_buffer.cpp b/trunk/src/protocol/srs_protocol_buffer.cpp
index b514ceaa7..7361e67a9 100755
--- a/trunk/src/protocol/srs_protocol_buffer.cpp
+++ b/trunk/src/protocol/srs_protocol_buffer.cpp
@@ -146,11 +146,13 @@ int SrsFastBuffer::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 SrsFastBuffer::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);