mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 18:08:10 +00:00
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:
parent
8b165c9c39
commit
964a4fac79
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user