http-push: remove remote locks on exit signals

If locks are not cleaned up the repository is inaccessible for 10 minutes.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Clemens Buchacher 2008-05-25 20:27:44 +02:00 коммит произвёл Junio C Hamano
Родитель a129293938
Коммит 6a491a1765
1 изменённых файлов: 22 добавлений и 0 удалений

Просмотреть файл

@ -1349,6 +1349,24 @@ static int unlock_remote(struct remote_lock *lock)
return rc;
}
static void remove_locks(void)
{
struct remote_lock *lock = remote->locks;
fprintf(stderr, "Removing remote locks...\n");
while (lock) {
unlock_remote(lock);
lock = lock->next;
}
}
static void remove_locks_on_signal(int signo)
{
remove_locks();
signal(signo, SIG_DFL);
raise(signo);
}
static void remote_ls(const char *path, int flags,
void (*userFunc)(struct remote_ls_ctx *ls),
void *userData);
@ -2256,6 +2274,10 @@ 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);
/* Check whether the remote has server info files */
remote->can_update_info_refs = 0;
remote->has_info_refs = remote_exists("info/refs");