Re: [ANNOUNCE] CGit v0.1-pre
On 12/11/06, Linus Torvalds <torvalds@osdl.org> wrote:
Show 30 quoted lines
>
>
> On Mon, 11 Dec 2006, Lars Hjemli wrote:
> >
> > Ok. Code speeks louder than words, so I'll blatantly paste the key functions:
>
> Yeah, they're still buggy:
>
> > int cache_unlock(struct cacheitem *item)
> > {
> > close(item->fd);
> > return (rename(fmt("%s.lock", item->name), item->name) == 0);
> > }
> ...
> > if (!cache_exist(item)) {
> > if (!cache_lock(item)) {
> > sleep(1);
> > goto top;
> > }
> > if (!cache_exist(item))
> > cgit_fill_cache(item);
> > cache_unlock(item);
>
> What do you think happens if that last "cache_exist()" returned true?
>
> That's right: the "cache_unlock()" will now OVERWRITE the valid cache with
> the (empty) lock-file that you didn't fill in.
>
> Oops.
>Wow, that's embarrassing.
Thanks for the debugging, I'll try to actually fix it this time :-)