Hi all, I've just installed distcc on FreeBSD xxx.yyy.ru 7.0-CURRENT-200703 FreeBSD 7.0-CURRENT-200703 #0: Tue Mar 6 22:35:04 UTC 2007 [EMAIL PROTECTED]:/usr/obj/usr/src/sys/GENERIC amd64 and found that sendfile() on it can (and often do) send partial file size. Seems, that it works some send-algorithm, I didn't find in manual what is it.
I've attached simple patch to show the problem (and to fix it). Here the log: distccd[30529] (dcc_check_client) connection from 212.5.80.7:50383 distccd[30529] compile from entry.cpp to entry.o distccd[30529] (dcc_pump_readwrite) Notice: need to transmit 872815 bytes distccd[30529] (dcc_r_file_timed) 872815 bytes received in 0.079618s, rate 10706kB/s distccd[30529] (dcc_collect_child) cc times: user 1.507591s, system 0.173373s, 15932 minflt, 0 majflt distccd[30529] (sys_sendfile) Notice: need to transmit 287352 bytes at offset 0 distccd[30529] (sys_sendfile) Notice: transmitted 143992 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 143992 bytes; retrying 143360 @143992 distccd[30529] (sys_sendfile) Notice: need to transmit 143360 bytes at offset 143992 distccd[30529] (sys_sendfile) Notice: transmitted 73096 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 73096 bytes; retrying 70264 @217088 distccd[30529] (sys_sendfile) Notice: need to transmit 70264 bytes at offset 217088 distccd[30529] (sys_sendfile) Notice: transmitted 36864 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 36864 bytes; retrying 33400 @253952 distccd[30529] (sys_sendfile) Notice: need to transmit 33400 bytes at offset 253952 distccd[30529] (sys_sendfile) Notice: transmitted 17016 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 17016 bytes; retrying 16384 @270968 distccd[30529] (sys_sendfile) Notice: need to transmit 16384 bytes at offset 270968 distccd[30529] (sys_sendfile) Notice: transmitted 8824 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 8824 bytes; retrying 7560 @279792 distccd[30529] (sys_sendfile) Notice: need to transmit 7560 bytes at offset 279792 distccd[30529] (sys_sendfile) Notice: transmitted 4728 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 4728 bytes; retrying 2832 @284520 distccd[30529] (sys_sendfile) Notice: need to transmit 2832 bytes at offset 284520 distccd[30529] (sys_sendfile) Notice: transmitted 2200 bytes distccd[30529] (dcc_pump_sendfile) Notice: sendfile: partial transmission of 2200 bytes; retrying 632 @286720 distccd[30529] (sys_sendfile) Notice: need to transmit 632 bytes at offset 286720 distccd[30529] (sys_sendfile) Notice: transmitted 632 bytes distccd[30529] g++ entry.cpp on localhost completed ok distccd[30529] job complete
--- src.old/sendfile.c Sun Oct 24 09:05:49 2004
+++ src/sendfile.c Mon Oct 8 20:35:58 2007
@@ -84,6 +84,7 @@
#if defined(__FreeBSD__)
static ssize_t sys_sendfile(int ofd, int ifd, off_t *offset, size_t size)
{
+ rs_log_notice("need to transmit %ld bytes at offset %ld", size, *offset);
off_t sent_bytes;
int ret;
@@ -107,8 +108,9 @@
return -1;
}
} else if (ret == 0) {
- *offset += size;
- return size;
+ *offset += sent_bytes;
+ rs_log_notice("transmitted %ld bytes", sent_bytes);
+ return sent_bytes;
} else {
rs_log_error("don't know how to handle return %d from BSD sendfile",
ret);
0x0A74C34A.asc
Description: application/pgp-keys
signature.asc
Description: OpenPGP digital signature
__ distcc mailing list http://distcc.samba.org/ To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/distcc
