
On Mon, Mar 21, 2011 at 04:03:23PM +0800, Hu Tao wrote:
On Fri, Mar 18, 2011 at 11:02:25AM +0000, Daniel P. Berrange wrote:
On Wed, Mar 16, 2011 at 06:29:52PM +0800, Hu Tao wrote:
virObject is the base struct that manages reference-counting for all structs that need the ability of reference-counting. --- src/Makefile.am | 1 + src/libvirt_private.syms | 5 ++++ src/util/object.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++ src/util/object.h | 39 ++++++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 0 deletions(-) create mode 100644 src/util/object.c create mode 100644 src/util/object.h
diff --git a/src/Makefile.am b/src/Makefile.am index 645119e..3ebabe9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -81,6 +81,7 @@ UTIL_SOURCES = \ util/util.c util/util.h \ util/xml.c util/xml.h \ util/virtaudit.c util/virtaudit.h \ + util/object.c util/object.h \
Can you rename this to virobject.c / virobject.h. NB without
OK.
the 't'. I want rename the virtaudit/virterror stuff later. Ideally all new files in util/ should have a 'vir' prefix, since our current names are so short & generic they can easily clash and / or cause confusion. eg, the name of the file should match the name of the APIs inside, so virObjectPtr -> virobject.h
diff --git a/src/util/object.c b/src/util/object.c new file mode 100644 index 0000000..31ea27b --- /dev/null +++ b/src/util/object.c +#include <assert.h>
NB, our coding guidelines don't allow use of assert().
You can use sa_assert() which is a no-op just designed to be detectable by static analysis tools.
OK.
+#include "object.h" + +int virObjectInit(virObjectPtr obj, void (*free)(virObjectPtr obj)) +{ + if (!free) + return -1;
We should raise an error here
OK.
+ + obj->ref = 1; + obj->free = free; + + return 0; +} + +#define virAtomicInc(value) \ + __sync_add_and_fetch(&value, 1) +#define virAtomicDec(value) \ + __sync_sub_and_fetch(&value, 1)
I reckon it would be a good idea to put these into a separate file 'src/util/virtatomic.{h,c}'.
Agree. Will do it. Is the `virt' prefix a typo? Since you've suggested `vir' prefix for files in util/.
Yes, I mean viratomic.h
Also, I think we need to make this more portable, since at least on Windows, I don't think we want to assume use of GCC. I think we should at the very least have an impl for GCC builtins, and an impl for Win32 to start with. If someone wants to do further impls later they can... If you look at glib's gatomic.c you'll see example code for Win32 atomic ops which is LGPLv2+ licensed
Yes, atomic ops should be portable, not limited just on gcc. Can we borrow glib's win32 atomic ops? Will it cause any license conflict? Anyway I will have a look at glib's win32 atomic implementation. Thanks for the information.
Glib's atomic ops code is LGPLv2+ licensed, so we will be fine borrowing the relevant bits of it. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|