Code

Avoid segfault with 'git branch' when the HEAD is detached
[git.git] / http-push.c
index 4b941f4d3e37e191688de64a99809909cbbed8ef..a8ae545dfb952b9108ef679a176d57eb2216d622 100644 (file)
@@ -10,6 +10,7 @@
 #include "exec_cmd.h"
 #include "remote.h"
 #include "list-objects.h"
+#include "sigchain.h"
 
 #include <expat.h>
 
@@ -231,7 +232,8 @@ static void process_response(void *callback_data)
 
 #ifdef USE_CURL_MULTI
 
-static char *get_remote_object_url(const char *url, const char *hex, int only_two_digit_prefix)
+static char *get_remote_object_url(const char *url, const char *hex,
+                                  int only_two_digit_prefix)
 {
        struct strbuf buf = STRBUF_INIT;
        append_remote_object_url(&buf, url, hex, only_two_digit_prefix);
@@ -1376,7 +1378,7 @@ static void remove_locks(void)
 static void remove_locks_on_signal(int signo)
 {
        remove_locks();
-       signal(signo, SIG_DFL);
+       sigchain_pop(signo);
        raise(signo);
 }
 
@@ -2187,6 +2189,8 @@ int main(int argc, char **argv)
        struct ref *ref;
        char *rewritten_url = NULL;
 
+       git_extract_argv0_path(argv[0]);
+
        setup_git_directory();
 
        remote = xcalloc(sizeof(*remote), 1);
@@ -2269,10 +2273,7 @@ int main(int argc, char **argv)
                goto cleanup;
        }
 
-       signal(SIGINT, remove_locks_on_signal);
-       signal(SIGHUP, remove_locks_on_signal);
-       signal(SIGQUIT, remove_locks_on_signal);
-       signal(SIGTERM, remove_locks_on_signal);
+       sigchain_push_common(remove_locks_on_signal);
 
        /* Check whether the remote has server info files */
        remote->can_update_info_refs = 0;