[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