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;
 }
 

Reply via email to