Fix done state for WebSocket reads

This commit is contained in:
Vinnie Falco
2017-08-15 12:49:02 -07:00
parent aabd33a677
commit a435dde2a3
2 changed files with 192 additions and 182 deletions

View File

@ -1,3 +1,11 @@
Version 107:
WebSocket
* Fix done state for WebSocket reads
--------------------------------------------------------------------------------
Version 106: Version 106:
* Dynamic buffer input areas are mutable * Dynamic buffer input areas are mutable

View File

@ -346,11 +346,12 @@ operator()(
// Empty non-final frame // Empty non-final frame
goto loop; goto loop;
} }
ws_.rd_.done = ws_.rd_.remain == 0 && ws_.rd_.fh.fin; ws_.rd_.done = false;
if(ws_.rd_.done)
goto upcall; // Empty final frame
} }
if(! ws_.pmd_ || ! ws_.pmd_->rd_set) if(! ws_.pmd_ || ! ws_.pmd_->rd_set)
{
// Check for empty final frame
if(ws_.rd_.remain > 0 || ! ws_.rd_.fh.fin)
{ {
if(ws_.rd_.buf.size() == 0 && ws_.rd_.buf.max_size() > if(ws_.rd_.buf.size() == 0 && ws_.rd_.buf.max_size() >
(std::min)(clamp(ws_.rd_.remain), (std::min)(clamp(ws_.rd_.remain),
@ -431,8 +432,8 @@ operator()(
bytes_written_ += bytes_transferred; bytes_written_ += bytes_transferred;
ws_.rd_.size += bytes_transferred; ws_.rd_.size += bytes_transferred;
} }
ws_.rd_.done = }
ws_.rd_.remain == 0 && ws_.rd_.fh.fin; ws_.rd_.done = ws_.rd_.remain == 0 && ws_.rd_.fh.fin;
goto upcall; goto upcall;
} }
else else
@ -1033,15 +1034,16 @@ loop:
// Empty non-final frame // Empty non-final frame
goto loop; goto loop;
} }
rd_.done = rd_.remain == 0 && rd_.fh.fin; rd_.done = false;
} }
else else
{ {
ec.assign(0, ec.category()); ec.assign(0, ec.category());
} }
if( ! rd_.done)
{
if(! pmd_ || ! pmd_->rd_set) if(! pmd_ || ! pmd_->rd_set)
{
// Check for empty final frame
if(rd_.remain > 0 || ! rd_.fh.fin)
{ {
if(rd_.buf.size() == 0 && rd_.buf.max_size() > if(rd_.buf.size() == 0 && rd_.buf.max_size() >
(std::min)(clamp(rd_.remain), (std::min)(clamp(rd_.remain),
@ -1122,6 +1124,7 @@ loop:
bytes_written += bytes_transferred; bytes_written += bytes_transferred;
rd_.size += bytes_transferred; rd_.size += bytes_transferred;
} }
}
rd_.done = rd_.remain == 0 && rd_.fh.fin; rd_.done = rd_.remain == 0 && rd_.fh.fin;
} }
else else
@ -1250,7 +1253,6 @@ loop:
} }
} }
} }
}
return bytes_written; return bytes_written;
} }