cvs commit: src/sys/kern kern_proc.c

Pawel Jakub Dawidek pjd at FreeBSD.org
Wed Jun 9 18:37:19 GMT 2004


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

-- 
Pawel Jakub Dawidek                       http://www.FreeBSD.org
pjd at FreeBSD.org                           http://garage.freebsd.pl
FreeBSD committer                         Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20040609/34948f11/attachment.bin


More information about the freebsd-arch mailing list