[Cvsnt] Build 58b, the Eclipse CVS Client and cvs_flusherr()
John Goehringer
jgoehrin at sct.com
Thu Apr 11 02:22:41 BST 2002
Hi,
Been working with the Eclipse CVS client and the
1.11.1.3 builds. It's been reported that the newest
Eclipse builds work ok with build 58b, but
we found a problem with doing checkouts.
The checkout from Eclipse finishes without reporting
an error, but no files are fetched.
Tracked this down to server.c/server_protocol()
getting a very large count_needed from buf_copy_counted(),
and never sending the output back to the client.
The large count_needed is the int value of
'Mod-', as in Mod-time 9 Oct 1997 17:50:00 -0000.
The Eclipse CVS client does not support the "MT"
response, so in server.c/cvs_output_tagged()
cvs_output() is called to send to the client. cvs_output()
calls cvs_flusherr(), which calls buf_send_special_count().
buf_send_special_count() prepends it's count as the first
data packet, chains any existing data from the passed
buffer to data->next, and calls buf_send_output().
If there is data in the buf sent to buf_send_special_count(),
it is sent over the pipe without the leading count, so
server_protocol() ends up picking those first 4 bytes
(Mod-) as the count, a large number.
My patch is to add buf_send_counted (protocol) to
cvs_flusherr() prior to buf_send_special_count (protocol, -2)
so
else if (server_active)
{
/* make sure stderr is flushed before we send the flush count on the
* protocol pipe
*/
fflush (stderr);
/* Send a special count to tell the parent to flush. */
buf_send_special_count (protocol, -2);
}
becomes
else if (server_active)
{
/* buf_send_special_count sends it's count only, so be sure to send
* any current data with it's count first.
*/
buf_send_counted (protocol);
/* make sure stderr is flushed before we send the flush count on the
* protocol pipe
*/
fflush (stderr);
/* Send a special count to tell the parent to flush. */
buf_send_special_count (protocol, -2);
}
John Goehringer
_______________________________________________
Cvsnt mailing list
Cvsnt at cvsnt.org
http://www.cvsnt.org/cgi-bin/mailman/listinfo/cvsnt
More information about the cvsnt
mailing list