Re: cvs commit: src/sys/kern kern_proc.c
From: Julian Elischer (julian_at_elischer.org)
Date: 06/09/04
- Previous message: Poul-Henning Kamp: "Re: reference counting.. continued.."
- In reply to: Pawel Jakub Dawidek: "Re: cvs commit: src/sys/kern kern_proc.c"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Wed, 9 Jun 2004 12:00:30 -0700 (PDT) To: Pawel Jakub Dawidek <pjd@FreeBSD.org>
On Wed, 9 Jun 2004, Pawel Jakub Dawidek wrote:
> On Wed, Jun 09, 2004 at 11:23:48AM -0700, Julian Elischer wrote:
> +> I do actually agree that a general purpose reference counting
> +> API is very difficult to use in every situation and that there
> +> are situations where you just HAVE to roll your own..
>
> Maybe we can use macros to do this, something like:
>
> #define REFCNT_MTX(foo, prefix, type, mtx_field, refcnt_field, destroy_func) \
> foo void \
> prefix ## _hold(type *obj) \
> { \
> \
> mtx_lock(&obj->mtx_field); \
> obj->refcnt_field++; \
> mtx_unlock(&obj->mtx_field); \
> } \
> \
> foo void \
> prefix ## _free(type *obj) \
> { \
> int refcnt; \
> \
> mtx_lock(&obj->mtx_field); \
> refcnt = --obj->refcnt_field; \
> mtx_unlock(&obj->mtx_field); \
> if (refcnt == 0) \
> destroy_func(obj); \
> }
>
> And the same for REFCNT_ATOMIC() and REFCNT_SPIN()?
> 'foo' could be for example 'static' or 'static __inline'.
I certainly agree that there is the possibility that there may need to
be several kinds of refcounts..
there are also examples where several operations need to be done
"atomically" but only one of those operations is the reference count.
Such cases need a lock to be held anyhow. (or a critical section or
something)
For these sorts of things plain increments and decrements would
suffice.
As I mentionned before, it is also tricky how one handles
the freeing of a reference to an object
when you are in some spinlock'd region or an interrupt handler..
These various cases may require reference counts of different types.
_______________________________________________
freebsd-arch@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
- Previous message: Poul-Henning Kamp: "Re: reference counting.. continued.."
- In reply to: Pawel Jakub Dawidek: "Re: cvs commit: src/sys/kern kern_proc.c"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|