X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..d86dfb91c834be43d9bcddd69ddbc7e463825fbd:/lib/base/message.cpp diff --git a/lib/base/message.cpp b/lib/base/message.cpp index dafbf3f8..48fcd210 100644 --- a/lib/base/message.cpp +++ b/lib/base/message.cpp @@ -17,25 +17,19 @@ eMessagePump::~eMessagePump() int eMessagePump::send(const void *data, int len) { - if (ismt) - content.lock(len); - return ::write(fd[1], data, len)<0; + int wr = ::write(fd[1], data, len); + if (ismt && wr > 0) + content.lock(wr); + return wr<0; } int eMessagePump::recv(void *data, int len) { unsigned char*dst=(unsigned char*)data; - while (len) - { - if (ismt) - content.unlock(len); - int r=::read(fd[0], dst, len); - if (r<0) - return r; - dst+=r; - len-=r; - } - return 0; + int recv=::read(fd[0], dst, len); + if (recv > 0 && ismt) + content.unlock(recv); + return recv; } int eMessagePump::getInputFD() const