
On Tue, Mar 27, 2007 at 12:58:08PM +0100, Richard W.M. Jones wrote:
virDomainGetUUIDString, virDomainPinVcpu, virNetworkGetUUIDString:
These functions don't seem to check whether the parameters are correct. For example, virDomainGetUUIDString doesn't check if the buffer parameter passed from Python is large enough to take the UUID string.
virDomainPinVcpu is just plain strange (but I guess that strangeness eminates from the Xen implementation), but it seems possible for the Python code to be wrong about the length of the Vcpu map (string). Shouldn't the length be taken from the string itself?
I'm pretty sure all 3 of those methods will need to be hand-written rather than letting the generator do its thing. For the GetUUIDString() functions the C prototype has the caller pass in a pre-allocate char * - which is getting translated in Python as the caller passing in a string object. This is dumb from the python POV where we have garbage collection. The Python wrapper code should allocate the correct sized char * when calling the GetUUIDString methods & then return a python string object. For the PingVCPU method things are more complicated - in C its a large bit field, although it is represented as a char *. In python I think we need to represent it as a list of VCPU numbers.
virDomainUndefine, virNetworkUndefine:
It's unclear from the libvirt documentation, but it sounds as if these functions invalidate (free) the virDomainPtr / virNetworkPtr object passed to them. (In fact, the Xen implementation of virDomainPtr at least _doesn't_ free it - is that a bug?) If this is the case, then the Python bindings ought to set self._o = None.
Yes, the virDomainPtr objects ought to be free'd by these two functions, so the python should clear the _o member after the calls complete. It should also clear it after virDomainDestroy if it doesn't already. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|