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

Re: error: git-remote-https died of signal 13

From
Jeff King <peff@peff.net>
Date
Apr 24, 2014, 04:15 UTC
Message-ID
<20140424041504.GA17398@sigill.intra.peff.net>
In-Reply-To
<CAEHyFQLPYh2b5CsmadazDJG3paHL7JDY4JhT=xf=wHXhLd=EkQ@mail.gmail.com>
On Wed, Apr 23, 2014 at 07:49:09AM -0400, Greg M wrote:
Show 24 quoted lines
> > The easiest way to find it is probably to attach a debugger to the
> > running git-remote-https, and get a backtrace when it dies from SIGPIPE.
> > You'll probably want to install your system's debug packages for curl,
> > too.
> >
> 
> The backtrace:
> 
> Program received signal SIGPIPE, Broken pipe.
> 0x00007fdcfd511a2d in write () from /usr/lib/libpthread.so.0
> (gdb) bt
> #0  0x00007fdcfd511a2d in write () from /usr/lib/libpthread.so.0
> #1  0x00007fdcfd81a0f6 in sock_write () from /usr/lib/libcrypto.so.1.0.0
> #2  0x00007fdcfd817edb in BIO_write () from /usr/lib/libcrypto.so.1.0.0
> #3  0x00007fdcfc662902 in ssl3_write_pending () from /usr/lib/libssl.so.1.0.0
> #4  0x00007fdcfc664b77 in ssl3_dispatch_alert () from /usr/lib/libssl.so.1.0.0
> #5  0x00007fdcfc660822 in ssl3_shutdown () from /usr/lib/libssl.so.1.0.0
> #6  0x00007fdcfd2e944e in Curl_ossl_close () from /usr/lib/libcurl.so.4
> #7  0x00007fdcfd2b6459 in Curl_disconnect () from /usr/lib/libcurl.so.4
> #8  0x00007fdcfd2c8131 in curl_multi_cleanup () from /usr/lib/libcurl.so.4
> #9  0x000000000040764b in ?? ()
> #10 0x0000000000404e4d in ?? ()
> #11 0x00007fdcfcf0fb05 in __libc_start_main () from /usr/lib/libc.so.6
> #12 0x000000000040552e in ?? ()

Thanks, that's very helpful. I wasn't able to reproduce your problem locally, but I suspect the curl patch below may fix it:

diff --git a/lib/multi.c b/lib/multi.c
index bc93264..72e4825 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1804,10 +1804,13 @@ static void close_all_connections(struct Curl_multi *multi)
 
   conn = Curl_conncache_find_first_connection(multi->conn_cache);
   while(conn) {
+    SIGPIPE_VARIABLE(pipe_st);
     conn->data = multi->closure_handle;
 
+    sigpipe_ignore(conn->data, &pipe_st);
     /* This will remove the connection from the cache */
     (void)Curl_disconnect(conn, FALSE);
+    sigpipe_restore(&pipe_st);
 
     conn = Curl_conncache_find_first_connection(multi->conn_cache);
   }

Let me know if you need any pointers on getting curl built or tested
with git.

Daniel, I think the similar fix to curl_multi_cleanup in commit a900d45
missed this code path, and we need something like the above patch. I
know you were trying to keep the SIGPIPE mess at the entrance-points to
the library, and this works against that. But we need a SessionHandle to
pass to sigpipe_ignore to look at its "no_signal" flag, and of course in
the case of multi we may have several such handles. If there's a similar
flag we can check on the multi handle, we could just cover all of
curl_multi_cleanup with a single ignore/reset pair.

-Peff
Previous: Greg MNext: Greg M
Message 4 of 6 in “error: git-remote-https died of signal 13”
  1. Greg MApr 21, 2014
  2. Jeff KingApr 23, 2014
  3. Greg MApr 23, 2014
  4. Jeff KingApr 24, 2014
  5. Greg MApr 24, 2014
  6. Daniel StenbergApr 24, 2014

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.