Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Jun 2004 15:33:56 -0400 (EDT)
From:      Robert Watson <rwatson@freebsd.org>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        Julian Elischer <julian@elischer.org>
Subject:   Re: reference counting.. continued.. 
Message-ID:  <Pine.NEB.3.96L.1040612153110.90086I-100000@fledge.watson.org>
In-Reply-To: <57800.1086807537@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help


On Wed, 9 Jun 2004, Poul-Henning Kamp wrote:

> I am not in favour of a dedicated API for refcounts. 
> 
> A dedicated API works if the refcount is a detached property of the
> object, and that is not normally the case outside OO+GC implementations. 
> 
> Our reference counts will almost invariably be integral properties of
> our objects and therefore has to interact with the remaining object
> locking. 

I don't have a strong feeling about the general need for a refcount API,
but I can confirm that many of the interesting objects in the kernel
wouldn't lend themselves to such an API.  There are many cases where we'll
want to protect the reference count using an existing lock, in which case
locking built into the reference count API becomes a liability.  Socket
reference counting is one example of this: in some ways, it's a general
purpose reference count, but the GC behavior is specific to sockets and
depends on additional uncounted references from file descriptors and the
prototocol layer.

That said, I think making sure people get reference counts right is
important: at the very least, I think it would be useful to have a
refcount(9) man page with a well thought out example of a simple reference
count implementation, or a pointer at such an implementation (ucred isn't
bad). 

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert@fledge.watson.org      Senior Research Scientist, McAfee Research




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1040612153110.90086I-100000>