git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/5] Change git_connect() to return a struct child_process instead of a pid_t.

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 1, 2007, 08:39 UTC
Message-ID
<7vtzpbrzye.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<4700A067.3010004@viscovery.net>
Johannes Sixt <j.sixt@viscovery.net> writes:
Show 27 quoted lines
> Junio C Hamano schrieb:
>> Johannes Sixt <johannes.sixt@telecom.at> writes:
>>
>>> This prepares the API of git_connect() and finish_connect() to operate on
>>> a struct child_process. Currently, we just use that object as a placeholder
>>> for the pid that we used to return. A follow-up patch will change the
>>> implementation of git_connect() and finish_connect() to make full use
>>> of the object.
>>
>> Good description, except removal of checks for negative return
>> of the calling sites raised my eyebrow and had me spend a few
>> more minutes to review than necessary (see below).
>
> I've thought about this issue a bit more.
>
> Letting git_connect() die on error unconditionally is poison for any
> libification efforts. So here's a plan:
>
> 1. Let git_connect() return a struct child_process even for the
>    non-forking case. This way a return value of NULL can uniquely
>    identify a failure.
> ...
> Since my patch doesn't do (1), it can't do (2), i.e. keep the error
> checks -
> they must be removed because no unique failure value exists. So I
> could complete (1) in a new version of this patch, in order to also do
> (2). What is your preference?

In any case, I'd rather first have one that hides fork/exec behind child_process first without changing the call to die() in git_connect() in this round. I am still in "post feature release clean-up" mood ;-)

As to error indication, it somehow does not feel right to return something called "child _process_" structure when we want to tell the caller that there is no process to wait for in the no-error case, although the fact that we can use .in/.out fd in the structure when we _do_ have child process is attractive.

As an alternative, we could keep the "NULL return means there was no need to fork" semantics of git_connect(), and instead add "int *status_ret" parameter for the caller to check.

Previous: Johannes SixtNext: Johannes Sixt
Message 21 of 30 in “fork/exec removal series”
  1. 0/5 fork/exec removal seriesJohannes Sixt, Sep 30, 2007
  2. 1/5 Change git_connect() to return a struct child_process instead of a pid_t.Johannes Sixt, Sep 30, 2007
  3. 2/5 Use start_command() in git_connect() instead of explicit fork/exec.Johannes Sixt, Sep 30, 2007
  4. 3/5 Use start_command() to run the filter instead of explicit fork/exec.Johannes Sixt, Sep 30, 2007
  5. 4/5 Use run_command() to spawn external diff programs instead of fork/exec.Johannes Sixt, Sep 30, 2007
  6. 5/5 Use start_comand() in builtin-fetch-pack.c instead of explicit fork/exec.Johannes Sixt, Sep 30, 2007
  7. Johannes SchindelinSep 30, 2007
  8. Johannes SchindelinSep 30, 2007
  9. Junio C HamanoSep 30, 2007
  10. Johannes SixtSep 30, 2007
  11. 0/5 fork/exec removal seriesJohannes Sixt, Oct 3, 2007
  12. 1/5 Change git_connect() to return a struct child_process instead of a pid_t.Johannes Sixt, Oct 3, 2007
  13. 2/5 Use start_command() in git_connect() instead of explicit fork/exec.Johannes Sixt, Oct 3, 2007
  14. 3/5 Use start_command() to run the filter instead of explicit fork/exec.Johannes Sixt, Oct 3, 2007
  15. 4/5 Use run_command() to spawn external diff programs instead of fork/exec.Johannes Sixt, Oct 3, 2007
  16. 5/5 Use start_comand() in builtin-fetch-pack.c instead of explicit fork/exec.Johannes Sixt, Oct 3, 2007
  17. Junio C HamanoOct 4, 2007
  18. Johannes SixtOct 4, 2007
  19. Johannes SixtOct 4, 2007
  20. Johannes SixtOct 1, 2007
  21. Junio C HamanoOct 1, 2007
  22. Johannes SixtOct 1, 2007
  23. Junio C HamanoOct 2, 2007
  24. Johannes SchindelinSep 30, 2007
  25. Junio C HamanoSep 30, 2007
  26. Johannes SchindelinSep 30, 2007
  27. Johannes SixtSep 30, 2007
  28. Johannes SchindelinSep 30, 2007
  29. Johannes SixtOct 1, 2007
  30. David KastrupOct 1, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.