Thread (1 message) 1 message, 1 author, 2016-06-16

Re: [PATCH] Refactor recv_sideband()

From: Nicolas Pitre <nico@fluxnic.net>
Date: 2016-06-16 06:55:52

On Tue, 14 Jun 2016, Lukas Fleischer wrote:
Hi Nicolas,

On Tue, 14 Jun 2016 at 19:09:15, Nicolas Pitre wrote:
quoted
I just looked again at all the contraptions _I_ wrote (not Junio's) for 
a reason why I went to such extremes in making this code co complicated.

One aspect that is now lost with your patch is the atomic nature of the 
write.  See commit ed1902ef5c for the explanation.  You could probably 
use sprintf() into a temporary buffer and write it in one go to avoid 
segmented writes from the C library. It's probably not worth having that 
complex code just to avoid a string copy.
The old code calls fprintf() once per line and so does the new code. The
only difference is that in the old code, the single parts were
concatenated manually while the new code tells fprintf() to do the
concatenation itself while printing. Also note that fprintf() is
buffered -- so even if the new code would call it more often, it would
not really matter.
It is not buffered as it writes to stderr. And some C libs do separate 
calls to write() for every string format specifier. So "%s%s%c" may end 
up calling write() 3 times depending on the implementation.  The example 
I gave in commit ed1902ef5c is real and I even observed it with strace 
back then.


Nicolas
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help