From: Duy Nguyen <pclouds@gmail.com>
To: Stefan Beller <stefanbeller@gmail.com>
Cc: GIT Mailing-list <git@vger.kernel.org>
Subject: Re: Auto Packing message twice?
Date: Sun, 31 Aug 2014 11:26:15 +0700 [thread overview]
Message-ID: <20140831042615.GA7862@lanh> (raw)
In-Reply-To: <CACsJy8Ch5WW2rF4vGrM2xyFqn2-1FgPw-kO_wLtBY8-+WqM-1g@mail.gmail.com>
On Sat, Aug 30, 2014 at 09:12:57PM +0700, Duy Nguyen wrote:
> On Sat, Aug 30, 2014 at 6:28 PM, Stefan Beller <stefanbeller@gmail.com> wrote:
> > Auto packing the repository in background for optimum performance.
> > See "git help gc" for manual housekeeping.
> > Auto packing the repository in background for optimum performance.
> > See "git help gc" for manual housekeeping.
> >
> > Obviously it should only report once?
> > The reporting is done from within function cmd_gc(...),
> > which makes me wonder, if it also packs twice?
>
> The problem is we print this message before checking if gc is running
> in background. Problem is we keep the lockafter forking/detaching
> because locking before forking means two processes holding the lock
> and I don't think there's a way to say "release the lock in parent
> process".
I'm wrong. It's more about the gc.pid update code, which should record
the running pid (i.e. after fork), so I can't really move
lock_repo_for_gc() code to the parent process. If we just peek ahead
in gc.pid to see if any gc is already running, there's a chance that a
new gc will start after the check, and before we update gc.pid. So
still false messages.
> And we can't print this message after detaching either
> because stdout is already closed then. But this definitely needs some
> improvement to avoid confusion.
If we do not use daemonized() then it's possible. Though
NO_POSIX_GOODIES is now sprinkled in more places.
-- 8< --
diff --git a/builtin/gc.c b/builtin/gc.c
index 8d219d8..f04b5dc 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -280,6 +280,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
int force = 0;
const char *name;
pid_t pid;
+ int forked = 0;
struct option builtin_gc_options[] = {
OPT__QUIET(&quiet, N_("suppress progress reporting")),
@@ -327,21 +328,30 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
*/
if (!need_to_gc())
return 0;
- if (!quiet) {
- if (detach_auto)
- fprintf(stderr, _("Auto packing the repository in background for optimum performance.\n"));
- else
- fprintf(stderr, _("Auto packing the repository for optimum performance.\n"));
+ if (!quiet && !detach_auto) {
+ fprintf(stderr, _("Auto packing the repository for optimum performance.\n"));
fprintf(stderr, _("See \"git help gc\" for manual housekeeping.\n"));
}
if (detach_auto) {
if (gc_before_repack())
return -1;
- /*
- * failure to daemonize is ok, we'll continue
- * in foreground
- */
- daemonize();
+#ifndef NO_POSIX_GOODIES
+ switch (fork()) {
+ case 0:
+ forked = 1;
+ break;
+
+ case -1:
+ /*
+ * failure to daemonize is ok, we'll continue
+ * in foreground
+ */
+ break;
+
+ default:
+ exit(0);
+ }
+#endif
}
} else
add_repack_all_option();
@@ -354,6 +364,23 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
name, (uintmax_t)pid);
}
+ if (auto_gc && !quiet && detach_auto) {
+ if (forked)
+ fprintf(stderr, _("Auto packing the repository in background for optimum performance.\n"));
+ else
+ fprintf(stderr, _("Auto packing the repository for optimum performance.\n"));
+ fprintf(stderr, _("See \"git help gc\" for manual housekeeping.\n"));
+ }
+#ifndef NO_POSIX_GOODIES
+ if (forked) {
+ if (setsid() == -1)
+ die_errno("setsid failed");
+ close(0);
+ close(1);
+ close(2);
+ sanitize_stdfds();
+ }
+#endif
if (gc_before_repack())
return -1;
-- 8< --
prev parent reply other threads:[~2014-08-31 4:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-30 11:28 Auto Packing message twice? Stefan Beller
2014-08-30 14:12 ` Duy Nguyen
2014-08-31 4:26 ` Duy Nguyen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140831042615.GA7862@lanh \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=stefanbeller@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.