git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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? 


  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).