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

Re: git.git as of tonight

From
Johannes Sixt <j6t@kdbg.org>
Date
Nov 3, 2015, 21:03 UTC
Message-ID
<56392106.1010401@kdbg.org>
In-Reply-To
<CAGZ79kbAj-tZS3X1EwFw_gGh1=YU8M0OmEX91W8f++fqs6TiBA@mail.gmail.com>
Am 03.11.2015 um 19:18 schrieb Stefan Beller:
> ... ReadFileEx ... "overlapped" operation.
Let's not go there just yet.
Show 11 quoted lines
>>   1. Make this an optional feature so that platforms can compile it
>>      out, if it is not already done.  My preference, even if we go
>>      that route, would be to see if we can find a way to preserve the
>>      overall code structure (e.g. instead of spawning multiple
>>      workers, which is why the code needs NONBLOCK to avoid getting
>>      stuck on reading from one while others are working, perhaps we
>>      can spawn only one and not do a nonblock read?).
>
> Yeah that would be my understanding as well. If we don't come up with
> a good solution for parallelism in Windows now, we'd need to make it at
> least working in the jobs=1 case as well as it worked before.
That should be possible. I discovered today that we have this function:
static void set_nonblocking(int fd)
{
	int flags = fcntl(fd, F_GETFL);
	if (flags < 0)
		warning("Could not get file status flags, "
			"output will be degraded");
	else if (fcntl(fd, F_SETFL, flags | O_NONBLOCK))
		warning("Could not set file status flags, "
			"output will be degraded");
}

Notice that it is not a fatal condition if O_NONBLOCK cannot be established. (BTW, did you ever test this condition?) If we add two lines (which remove the stuff that does not work on Windows) like this:

static void set_nonblocking(int fd)
{
#ifndef GIT_WINDOWS_NATIVE
	int flags = fcntl(fd, F_GETFL);
	if (flags < 0)
		warning("Could not get file status flags, "
			"output will be degraded");
	else if (fcntl(fd, F_SETFL, flags | O_NONBLOCK))
#endif
		warning("Could not set file status flags, "
			"output will be degraded");
}

we should get something that works, theoretically. We still need a more complete waitpid emulation, but that does not look like rocket science. I'll investigate further in this direction.

-- Hannes
Previous: Stefan BellerNext: Stefan Beller
Message 8 of 18 in “git.git as of tonight”
  1. Junio C HamanoNov 2, 2015
  2. Johannes SixtNov 2, 2015
  3. Junio C HamanoNov 2, 2015
  4. Stefan BellerNov 2, 2015
  5. Johannes SixtNov 3, 2015
  6. Junio C HamanoNov 3, 2015
  7. Stefan BellerNov 3, 2015
  8. Johannes SixtNov 3, 2015
  9. Stefan BellerNov 3, 2015
  10. Torsten BögershausenNov 4, 2015
  11. Stefan BellerNov 4, 2015
  12. 0/2 Missing O_NONBLOCK under Windows (was: git.git as of tonight)Stefan Beller, Nov 4, 2015
  13. 1/2 run-parallel: rename set_nonblocking to set_nonblocking_or_dieStefan Beller, Nov 4, 2015
  14. Torsten BögershausenNov 5, 2015
  15. Junio C HamanoNov 5, 2015
  16. Junio C HamanoNov 5, 2015
  17. Jeff KingNov 5, 2015
  18. 2/2 run-parallel: Run sequential if nonblocking I/O is unavailableStefan Beller, Nov 4, 2015

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.