All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Wong <e@80x24.org>
To: Jeff King <peff@peff.net>
Cc: "Junio C Hamano" <gitster@pobox.com>,
	git@vger.kernel.org, "Nicolas Pitre" <nico@fluxnic.net>,
	"Lukas Sandström" <luksan@gmail.com>
Subject: Re: What's cooking in git.git (Aug 2016, #02; Thu, 4)
Date: Fri, 5 Aug 2016 08:26:30 +0000	[thread overview]
Message-ID: <20160805082630.GA29383@starla> (raw)
In-Reply-To: <20160805081103.t5f4bapmia6vircg@sigill.intra.peff.net>

Jeff King <peff@peff.net> wrote:
> On Fri, Aug 05, 2016 at 08:02:31AM +0000, Eric Wong wrote:
> 
> > > I just introduced another doubly-linked list in [1]. It adds some MRU
> > > features on top of the list, but it could in theory be built on top of a
> > > generic doubly-linked list.
> > 
> > Yes, and you'd be avoiding the extra mallocs and be able to use
> > list_entry (aka `container_of`) so it could be faster, too.
> 
> I'm not sure which mallocs you mean. I allocate one struct per node,
> which seems like a requirement for a linked list. If you mean holding an
> extra list struct around an existing pointer (rather than shoving the
> prev/next pointers into the pointed-to- item), then yes, we could do
> that. But it feels like a bit dirty, since the point of the list is
> explicitly to provide an alternate ordering over an existing set of
> items.

This pattern to avoid that one malloc-per-node using list_entry
(container_of) is actually a common idiom in the Linux kernel
and Userspace RCU (URCU).  Fwiw, I find it less error-prone and
easier-to-follow than the "void *"-first-element thing we do
with hashmap.

> It also doesn't make a big difference for my use case. All I really care
> about is the speed of delete-from-middle-and-insert-at-front, which is
> trivially O(1) and involves no mallocs.
> 
> > I was thinking packed_git could also be a doubly-linked list
> > anyways since it would allow easier removal of unlinked pack
> > entries.  My use case would be long-running "cat-file --batch"
> > processes being able to detect unlinked packs after someone
> > else runs GC.
> 
> We never remove packed_git structs, but it is not because of the list
> data structure. We may be holding open mmaps to packs that are deleted
> and continue using them. And in some cases other code may even hold
> pointers to our packed_git structs. So you'd have to figure out some
> memory ownership questions first.

Yes, it's easier to replace a running process once in a while :)

  reply	other threads:[~2016-08-05  8:26 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-04 22:28 What's cooking in git.git (Aug 2016, #02; Thu, 4) Junio C Hamano
2016-08-04 22:56 ` Mike Hommey
2016-08-04 23:32   ` Junio C Hamano
2016-08-04 23:39     ` Mike Hommey
2016-08-08  6:48     ` Torsten Bögershausen
2016-08-08  6:50       ` Mike Hommey
2016-08-04 23:10 ` Philip Oakley
2016-08-04 23:32   ` Junio C Hamano
2016-08-04 23:34 ` Eric Wong
2016-08-05  6:25   ` Junio C Hamano
2016-08-05  7:45   ` Jeff King
2016-08-05  8:02     ` Eric Wong
2016-08-05  8:11       ` Jeff King
2016-08-05  8:26         ` Eric Wong [this message]
2016-08-05  8:34           ` Jeff King
2016-08-05  9:14             ` Eric Wong
2016-08-07  9:06 ` Johannes Schindelin

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=20160805082630.GA29383@starla \
    --to=e@80x24.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=luksan@gmail.com \
    --cc=nico@fluxnic.net \
    --cc=peff@peff.net \
    /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.