Thread (3 messages) 3 messages, 3 authors, 2020-11-24

Re: Bug report: orphaned pack-objects after killing upload-pack on [

From: 唐宇奕 <hidden>
Date: 2020-11-24 03:21:44

when will this bug be fixed?

Junio C Hamano [off-list ref] 于2020年11月22日周日 上午5:54写道:
Jeff King [off-list ref] writes:
quoted
Yeah, clean_on_exit seems quite reasonable to me. I suspect nobody ever
really noticed, because as soon as pack-objects starts to write out the
pack, it will get SIGPIPE or EPIPE and die. But there is no point in
letting it chug on expensive object enumeration or delta compression if
upload-pack has already exited.

I don't know that wait_after_clean is necessary. We don't need to wait
for pack-objects to fail.

On the flip side, one of the reasons I added clean_on_exit long ago was
for the similar issue on the push side, which is even worse. Here we
might just waste some CPU, but on the push side we connect pack-objects
directly to the remote socket, so it could actually complete the push
(from the server's perspective) after the local git-push has died. Or at
least I think that was possible at one point; it might not be the case
any more.

I wrote this patch ages ago, and it is still sitting close to the bottom
(if not the bottom) of my todo stack, waiting to be investigated. ;)
Sounds sensible.
quoted
-- >8 --
Subject: [PATCH] send-pack: kill pack-objects helper on signal or exit

We spawn an external pack-objects process to actually send
objects to the remote side. If we are killed by a signal
during this process, the pack-objects will keep running and
complete the push, which may surprise the user. We should
take it down when we go down.

Signed-off-by: Jeff King <redacted>
---
 send-pack.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/send-pack.c b/send-pack.c
index eb4a44270b..d2701bf35c 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -85,6 +85,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *extra, struc
      po.in = -1;
      po.out = args->stateless_rpc ? -1 : fd;
      po.git_cmd = 1;
+     po.clean_on_exit = 1;
      if (start_command(&po))
              die_errno("git pack-objects failed");
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help