Angus Leeming wrote: >> Can someone confirm? Should I bug bugzilla? > > Yes, I can confirm and am investigating. It happens for both frontends, so > is probably in lyxserver.C itself. I've reverted the changes I made in > September last year and am currently recompiling.
Ok, I backed out the changes I made to lyxserver.C on 11 Sep last year with. With this change everything seems to be fine for both frontends (although I notice that Qt does not remove the pipes when lyx exits...) Lars, Ok to apply? -- Angus
Index: src/ChangeLog =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v retrieving revision 1.1020 diff -u -p -r1.1020 ChangeLog --- src/ChangeLog 31 Jan 2003 13:50:20 -0000 1.1020 +++ src/ChangeLog 5 Feb 2003 23:52:09 -0000 @@ -1,3 +1,9 @@ +2003-02-05 Angus Leeming <[EMAIL PROTECTED]> + + * lyxserver.C (read_ready): revert my patch of 11 September last year + as it sends PC cpu through the roof. Presumably this means that + the lyxserver will no longer run on an Alpha... + 2003-01-30 Angus Leeming <[EMAIL PROTECTED]> * factory.C (createInset): create an InsetCommandParam of type "index" @@ -9,7 +15,7 @@ 2003-01-28 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> * lyxfunc.C (getStatus): "buffer-export custom" should never be - disabled. + disabled. 2003-01-20 Michael Schmitt <[EMAIL PROTECTED]> @@ -24,10 +30,10 @@ in "View" menu * buffer.C (parseSingleLyXformat2Token): Fix misleading error - message + message * lyxfunc.C (getStatus): Make sure that formats other than - "fax" can also be disabled + "fax" can also be disabled 2003-01-16 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> Index: src/lyxserver.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxserver.C,v retrieving revision 1.47 diff -u -p -r1.47 lyxserver.C --- src/lyxserver.C 27 Nov 2002 10:30:13 -0000 1.47 +++ src/lyxserver.C 5 Feb 2003 23:52:09 -0000 @@ -272,38 +272,40 @@ void LyXComm::read_ready() if (status > 0) { charbuf[status] = '\0'; // turn it into a c string read_buffer_ += rtrim(charbuf, "\r"); - - } else if (errno != EAGAIN) { + // commit any commands read + while (read_buffer_.find('\n') != string::npos) { + // split() grabs the entire string if + // the delim /wasn't/ found. ?:-P + string cmd; + read_buffer_= split(read_buffer_, cmd,'\n'); + lyxerr[Debug::LYXSERVER] + << "LyXComm: status:" << status + << ", read_buffer_:" << read_buffer_ + << ", cmd:" << cmd << endl; + if (!cmd.empty()) + clientcb(client, cmd); + //\n or not \n? + } + } + if (errno == EAGAIN) { + errno = 0; + return; + } + if (errno != 0) { + lyxerr << "LyXComm: " << strerror(errno) << endl; if (!read_buffer_.empty()) { lyxerr << "LyXComm: truncated command: " - << read_buffer_ << '\n' - << "Resetting connection" << endl; + << read_buffer_ << endl; read_buffer_.erase(); } - - // reset connection - closeConnection(); - openConnection(); - break; - - } else { - // errno == EAGAIN - // Nothing new has arrived, so now's the time - // to tell the outside world if there's anything - // in the read buffer. - break; + break; // reset connection } } - if (!read_buffer_.empty()) { - read_buffer_ = rtrim(read_buffer_, "\n"); - lyxerr[Debug::LYXSERVER] - << "LyXComm: Received from fd " - << infd << '\n' - << '\"' << read_buffer_ << '\"' << endl; - clientcb(client, read_buffer_); - } - + // The connection gets reset in errno != EAGAIN + // Why does it need to be reset if errno == 0? + closeConnection(); + openConnection(); errno = 0; }