Thread (2 messages) 2 messages, 2 authors, 2025-09-29

Re: [PATCH 03/10] hook: convert 'post-rewrite' hook in sequencer.c to hook.h

From: Adrian Ratiu <hidden>
Date: 2025-09-29 07:33:42

On Fri, 26 Sep 2025, Junio C Hamano [off-list ref] wrote:
Phillip Wood [off-list ref] writes: 
quoted
quoted
+	ret = write_in_full(hook_stdin_fd, to_pipe->buf, 
to_pipe->len); 
This will block until the hook has read all of the 
input. Unless the hook drains and closes stdin before it does 
anything else it will block the parallel execution of other 
hooks. 
Ouch. 
I replied separately to this, because I do not think it is 
correct. :)

Please see my other reply and if there are further questions or 
concerns we can continue the discussion there, happy to address 
them.
 
quoted
quoted
+	if (ret < 0) { +		if (errno == EPIPE) { + 
return 1; /* child closed pipe, nothing more to feed */ + 
} 
Style: we don't use braces for single statement bodies. 
quoted
+		return ret; +	} + +	/* Reset the input buffer 
to avoid sending it again */ +	strbuf_reset(to_pipe); 
Shouldn't the return value do that? 
Sorry, I do not understand this comment, but did you mean 
to_pipe strbuf is left with some buffered bytes when we take the 
early-return path when we got an error above?
I described in the other reply how this function works. I messed 
up by making it more complicated than necessary. I'll simplify it 
in v2.

Basically I assumed this write works recursively and the reset 
stops the loop, so the next call exits early to stops loop.

Since we write just 1 strbuf once, there is no need for 
recursiveness and we can just return based on the return value, as 
Phillip suggested.
 
This part of the new code makes me wonder what the lifetime 
rules for the to_pipe message are? 

In the original code before this rewrite, it was clear that the 
caller of this function was responsible to allocate the strbuf, 
to feed it to the subprocess, and to release the resources it 
held.  Now, what is the rule?  The caller still prepares the 
strbuf, but the called machinery using the hook API will release 
the resources? 
It's the same as before: the caller owns the strbuf and releases 
it (see the strbuf_release(&sb); in this patch's context, I did 
not modify that).

I'll document this in addition to simplifying the function logic in v2.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help