parallel-checkout: send the new object_id algo field to the workers
authorMatheus Tavares <matheus.bernardino@usp.br>
Mon, 17 May 2021 19:49:03 +0000 (16:49 -0300)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 May 2021 20:38:54 +0000 (05:38 +0900)
commit3d20ed27b8bdac5c82f4f78af802f9afa499f651
tree4ac43f95e03a611d9e87630d9616d27cec0eefff
parentbf949ade81106fbda068c1fdb2c6fd1cb1babe7e
parallel-checkout: send the new object_id algo field to the workers

An object_id storing a SHA-1 name has some unused bytes at the end of
the hash array. Since these bytes are not used, they are usually not
initialized to any value either. However, at
parallel_checkout.c:send_one_item() the object_id of a cache entry is
copied into a buffer which is later sent to a checkout worker through a
pipe write(). This makes Valgrind complain about passing uninitialized
bytes to a syscall. The worker won't use these uninitialized bytes
either, but the warning could confuse someone trying to debug this code;
So instead of using oidcpy(), send_one_item() uses hashcpy() to only
copy the used/initialized bytes of the object_id, and leave the
remaining part with zeros.

However, since cf0983213c ("hash: add an algo member to struct
object_id", 2021-04-26), using hashcpy() is no longer sufficient here as
it won't copy the new algo field from the object_id. Let's add and use a
new function which meets both our requirements of copying all the
important object_id data while still avoiding the uninitialized bytes,
by padding the end of the hash array in the destination object_id. With
this change, we also no longer need the destination buffer from
send_one_item() to be initialized with zeros, so let's switch from
xcalloc() to xmalloc() to make this clear.

Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
hash.h
parallel-checkout.c