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

[PATCH v2 1/1] index-pack: Disable threading on cygwin

From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Date
Jun 26, 2012, 18:19 UTC
Message-ID
<4FE9FD34.5020406@ramsay1.demon.co.uk>
From: Junio C Hamano <gitster@pobox.com>

The Cygwin implementation of pread() is not thread-safe since, just like the emulation provided by compat/pread.c, it uses a sequence of seek-read-seek calls. In order to avoid failues due to thread-safety issues, commit b038a61 disables threading when NO_PREAD is defined. (ie when using the emulation code in compat/pread.c).

We introduce a new build variable, NO_THREAD_SAFE_PREAD, which allows use to disable the threaded index-pack code on cygwin, in addition to the above NO_PREAD case.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
Hi Junio,
I made some small changes to your patch:
   - renamed FAKE_PREAD_NOT_THREAD_SAFE to NO_THREAD_SAFE_PREAD
   - when NO_PREAD, set NO_THREAD_SAFE_PREAD in the Makefile, rather
     than in git-compat-util.h
   - set NO_THREAD_SAFE_PREAD in the non-conditional part of the
     cygwin config section (ie not just versions before 1.7.x)

I can only test this by using it (all relevant tests pass with or without this patch, after all), so I have installed it for day-to-day use. I don't anticipate any problems, but I guess this patch has not actually been tested yet ... :-D

HTH

ATB, Ramsay Jones

 Makefile             | 8 ++++++++
 builtin/index-pack.c | 4 ++--
 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 4592f1f..67d761e 100644
--- a/Makefile
+++ b/Makefile
@@ -158,6 +158,9 @@ all::
 # Define NO_PREAD if you have a problem with pread() system call (e.g.
 # cygwin1.dll before v1.5.22).
 #
+# Define NO_THREAD_SAFE_PREAD if your pread() implementation is not
+# thread-safe. (e.g. compat/pread.c or cygwin)
+#
 # Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
 # generally faster on your platform than accessing the working directory.
 #
@@ -1051,6 +1054,7 @@ ifeq ($(uname_O),Cygwin)
 		NO_IPV6 = YesPlease
 		OLD_ICONV = UnfortunatelyYes
 	endif
+	NO_THREAD_SAFE_PREAD = YesPlease
 	NEEDS_LIBICONV = YesPlease
 	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
 	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
@@ -1659,6 +1663,10 @@ endif
 ifdef NO_PREAD
 	COMPAT_CFLAGS += -DNO_PREAD
 	COMPAT_OBJS += compat/pread.o
+	NO_THREAD_SAFE_PREAD = YesPlease
+endif
+ifdef NO_THREAD_SAFE_PREAD
+	BASIC_CFLAGS += -DNO_THREAD_SAFE_PREAD
 endif
 ifdef NO_FAST_WORKING_DIRECTORY
 	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index dc2cfe6..4705478 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -39,8 +39,8 @@ struct base_data {
 	int ofs_first, ofs_last;
 };
 
-#if !defined(NO_PTHREADS) && defined(NO_PREAD)
-/* NO_PREAD uses compat/pread.c, which is not thread-safe. Disable threading. */
+#if !defined(NO_PTHREADS) && defined(NO_THREAD_SAFE_PREAD)
+/* pread() emulation is not thread-safe. Disable threading. */
 #define NO_PTHREADS
 #endif
 
-- 
1.7.11.1.gef8c760
Next: Junio C Hamano
Message 1 of 5 in “index-pack: Disable threading on cygwin”
  1. 1/1 index-pack: Disable threading on cygwinRamsay Jones, Jun 26, 2012
  2. Junio C HamanoJun 26, 2012
  3. Erik Faye-LundJun 26, 2012
  4. Junio C HamanoJun 26, 2012
  5. Erik Faye-LundJun 26, 2012

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.