perl: Add explicit close() method (RHBZ#602592).
authorRichard Jones <rjones@redhat.com>
Thu, 10 Jun 2010 14:25:43 +0000 (15:25 +0100)
committerRichard Jones <rjones@redhat.com>
Thu, 10 Jun 2010 16:52:54 +0000 (17:52 +0100)
commiteb566f7dc7974b42ac65729a2e5e5bcee329a0a9
treed28e272f278a6f3cc0e652ed09a88f2b84566a8d
parentdbfd93b72f99ebdded394541a48177c415db8cbf
perl: Add explicit close() method (RHBZ#602592).

This add an optional explicit $g->close method which may be
used to force the handle to be closed immediately.  Note the
provisos about this method in the manual page entry.  Callers
should *not* normally use this method.

The implementation of the handle also changes.  Before, the
handle was a blessed reference to an integer (the integer
being the pointer to the C guestfs_h handle).  Now we change
this to a hashref containing currently the following field:

  _g => pointer to C guestfs_h handle (as an integer)

If this field is not present, it means that the handle has been
explicitly closed.  This avoids double-freeing the handle.

The user may add their own fields to this hash in order to store
per-handle data.  However any fields whose names begin with
an underscore are reserved for use by the Perl bindings.

This commit also adds a regression test.

This commit also changes the existing warning when you call
a method without a Sys::Guestfs handle as the first parameter,
into an error.  This is because such cases are always errors.
perl/t/800-explicit-close.t [new file with mode: 0644]
perl/typemap
src/generator.ml