nb: flush all write data as long as we make progress
Change-Id: I138c54258eb54570e7a583bb62b1f4d26ef70ef1 Reviewed-on: https://gerrit.libreoffice.org/34447 Reviewed-by: Ashod Nakashian <ashnakash@gmail.com> Tested-by: Ashod Nakashian <ashnakash@gmail.com>
This commit is contained in:
parent
11c7a213d6
commit
a0df079c9b
1 changed files with 18 additions and 12 deletions
|
@ -351,20 +351,26 @@ public:
|
||||||
/// Override to write data out to socket.
|
/// Override to write data out to socket.
|
||||||
virtual void writeOutgoingData()
|
virtual void writeOutgoingData()
|
||||||
{
|
{
|
||||||
assert (_outBuffer.size() > 0);
|
while (!_outBuffer.empty())
|
||||||
ssize_t len;
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
len = writeData(&_outBuffer[0], _outBuffer.size());
|
ssize_t len;
|
||||||
}
|
do
|
||||||
while (len < 0 && errno == EINTR);
|
{
|
||||||
|
len = writeData(&_outBuffer[0], _outBuffer.size());
|
||||||
|
}
|
||||||
|
while (len < 0 && errno == EINTR);
|
||||||
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
_outBuffer.erase(_outBuffer.begin(),
|
_outBuffer.erase(_outBuffer.begin(),
|
||||||
_outBuffer.begin() + len);
|
_outBuffer.begin() + len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Poll will handle errors.
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// else poll will handle errors
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Override to handle reading of socket data differently.
|
/// Override to handle reading of socket data differently.
|
||||||
|
@ -381,7 +387,7 @@ public:
|
||||||
|
|
||||||
int getPollEvents() override
|
int getPollEvents() override
|
||||||
{
|
{
|
||||||
// Only poll for read we if we have nothing to write.
|
// Only poll for read if we have nothing to write.
|
||||||
return (_outBuffer.empty() ? POLLIN : POLLIN | POLLOUT);
|
return (_outBuffer.empty() ? POLLIN : POLLIN | POLLOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue