From: Linus Torvalds <torvalds@osdl.org>
To: Lars Hjemli <hjemli@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [ANNOUNCE] CGit v0.1-pre
Date: Sun, 10 Dec 2006 17:04:15 -0800 (PST) [thread overview]
Message-ID: <Pine.LNX.4.64.0612101653420.12500@woody.osdl.org> (raw)
In-Reply-To: <8c5c35580612101542n72d300c7o106e53e219670510@mail.gmail.com>
On Mon, 11 Dec 2006, Lars Hjemli wrote:
>
> For a quick summary of the cache algorithm, the project README is here:
>
> http://hjemli.net/git/cgit/view/?id=5917c37ce30b3f0a374c9fa376955f51f1d7bfbf
Your pseudo-algorithm is dubious:
name = generate_cache_name(request);
top:
if (!exists(name)) {
if (lock_cache(name)) {
generate_cache(request, name);
unlock_cache(name);
} else {
sched_yield();
goto top;
}
} else if (expired(name)) {
if (lock_cache(name)) {
generate_cache(request, name);
unlock_cache(name);
}
}
print_file(name);
You really should have:
if (!exists) {
if (!lock)
delay-and-repeat;
/* RETEST exists _after_ getting the lock */
if (!exists) {
generate into lock-file
mv lockfile exists;
} else {
rm lockfile
}
}
because you really want to re-check the existence after you got the lock,
otherwise you would race with somebody else that got the lock, generated
the data, and then unlocked (and you got the lock _after_ the data was
generated, so now you generate it unnecessarily).
As a side note: how do you release your caches?
next prev parent reply other threads:[~2006-12-11 1:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-10 23:42 [ANNOUNCE] CGit v0.1-pre Lars Hjemli
2006-12-11 0:08 ` Jakub Narebski
[not found] ` <8c5c35580612101616g179715ecyd02fcbb023246ecc@mail.gmail.com>
2006-12-11 0:29 ` Jakub Narebski
2006-12-11 13:37 ` Michael
2006-12-11 1:04 ` Linus Torvalds [this message]
2006-12-11 8:33 ` Lars Hjemli
2006-12-11 11:59 ` Lars Hjemli
2006-12-11 17:01 ` Linus Torvalds
2006-12-11 17:33 ` Linus Torvalds
2006-12-11 17:40 ` Lars Hjemli
2006-12-11 18:18 ` Linus Torvalds
2006-12-11 18:38 ` Lars Hjemli
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=Pine.LNX.4.64.0612101653420.12500@woody.osdl.org \
--to=torvalds@osdl.org \
--cc=git@vger.kernel.org \
--cc=hjemli@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).