Fix bug 1784

http://bugzilla.lyx.org/show_bug.cgi?id=1784


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26737 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Enrico Forestieri 2008-10-05 00:50:39 +00:00
parent 8b165c9c39
commit 964a4fac79

View File

@ -252,6 +252,12 @@ void LyXComm::read_ready()
int const charbuf_size = 100;
char charbuf[charbuf_size];
// As O_NONBLOCK is set, until no data is available for reading,
// read() doesn't block but returns -1 and set errno to EAGAIN.
// After a client that opened the pipe for writing, closes it
// (and no other client is using the pipe), read() would always
// return 0 and thus the connection has to be reset.
errno = 0;
int status;
// the single = is intended here.
@ -273,12 +279,13 @@ void LyXComm::read_ready()
clientcb_(client_, cmd);
//\n or not \n?
}
}
} else {
if (errno == EAGAIN) {
// Nothing to read, continue
errno = 0;
return;
}
if (errno != 0) {
// An error occurred, better bailing out
LYXERR0("LyXComm: " << strerror(errno));
if (!read_buffer_.empty()) {
LYXERR0("LyXComm: truncated command: " << read_buffer_);
@ -288,8 +295,9 @@ void LyXComm::read_ready()
}
}
// The connection gets reset in errno != EAGAIN
// Why does it need to be reset if errno == 0?
// The connection gets reset when read() returns 0 (meaning that the
// last client closed the pipe) or an error occurred, in which case
// read() returns -1 and errno != EAGAIN.
closeConnection();
openConnection();
errno = 0;