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

Re: http git and curl 7.16.0

From
Junio C Hamano <junkio@cox.net>
Date
Dec 27, 2006, 21:46 UTC
Message-ID
<7v8xgt57wu.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7vlkkt5d49.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
Show 15 quoted lines
>>> FWIW, I've seen the same with curl 7.16.0 on a Solaris 9 machine.
>>> It worked fine with curl 7.15.0.
>>
>> It works fine for me on Aurora Corona (sparc) with curl-7.15.5-1.al3, while
>> it fails as above on Fedora rawhide (i386) with curl-7.16.0-4.fc7.
>>
>> Furthermore, with new curl pulling from HTTP repos when there are updates
>> gives double free errors and a crash.
>
> Hmmm.  Could somebody please run http-fetch under gdb and see
> where it breaks?  The exact command line you need to use would
> be obtainable by running "sh -x git-clone" once.
>
> [jc: Nick CC'ed, although I haven't seen him on the list for
> some time...]

When we do not have NO_CURL_EASY_DUPHANDLE defined, http.c prepares a single "CURL *curl_default" with get_curl_handle(), and new request slots clone it using curl_easy_duphandle(). However, the returned "clone" somehow forgets to set the "magic" number that says it is a GOOD_EASY_HANDLE(). This missing magic number is checked by cURL library in curl_multi_add_handle(), which we call from start_active_slot(). Hence the request fails.

Now, I do not know cURL, and cannot tell if it is just a bug in easy-duphandle of curl 7.16.0, or if we are not supposed to be using the "easy" interface when dealing with multi fetch. In either case, the attached patch seems to fix it for me.

I am NOT CC'ing curl-library@cool.haxx.se mailing list since I do not want to subscribe only to be able to post, but some kind souls who are subscribers could forward the issue to them to determine if we need to fix our code (and if so how), or if we need to wait for them to fix curl_easy_duphandle().

-- >8 --
diff --git a/http.h b/http.h
index 6e12e41..70b18dd 100644
--- a/http.h
+++ b/http.h
@@ -18,7 +18,7 @@
 #define curl_global_init(a) do { /* nothing */ } while(0)
 #endif
 
-#if LIBCURL_VERSION_NUM < 0x070c04
+#if 1 || (LIBCURL_VERSION_NUM < 0x070c04)
 #define NO_CURL_EASY_DUPHANDLE
 #endif
 
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 5 in “Re: http git and curl 7.16.0”
  1. Horst H. von BrandDec 27, 2006
  2. Junio C HamanoDec 27, 2006
  3. Junio C HamanoDec 27, 2006
  4. Work around http-fetch built with cURL 7.16.0Junio C Hamano, Dec 29, 2006
  5. Junio C HamanoJan 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.