[Libguestfs] [PATCH nbdkit] Add Tcl plugin, for writing plugins in Tcl.

Eric Blake eblake at redhat.com
Fri Jul 6 13:41:29 UTC 2018


On 07/01/2018 09:59 AM, Richard W.M. Jones wrote:
> This lets you write simple plugins in Tcl.  All the basic features of
> nbdkit are supported, but serious Tcl users will probably want to
> enhance the plugin further.
> 
> Unfortunately Tcl as a language is not very well suited to handling
> binary data.  It prefers to store binary data in UCS-2 strings,
> meaning that every second byte is wasted.  Also there appears to be no
> way to replace part of such a string/array in-place.
> 
> Strictly speaking Tcl requires that:
> 
>     "only the thread that created a Tcl interpreter can use that
>     interpreter. In other words, multiple threads can not access the
>     same Tcl interpreter."
> 
> Apparently this applies even if nbdkit uses mutexes to ensure that
> multiple threads are not calling into the interpreter at the same
> time.  We do not have such a threading model in nbdkit (see also VDDK)
> but at the same time I was not able to get Tcl to crash.
> 
> The Tcl interpreter leaks quite a lot of memory from the tcl_load and
> tcl_open calls.  This may be connected with the previous point.  It
> makes valgrind fairly useless so it is disabled for Tcl.
> ---


> +=item C<is_rotational>
> +
> +(Optional)
> +
> + proc is_rotational {h} {
> +     return $bool
> + }
> +
> +Return a boolean indicating whether the disk is rotational.
> +
> +=item C<can_trim>
> +
> +(Optional)
> +
> + proc can_trim {h} {
> +     return $bool
> + }
> +
> +Return a boolean indicating whether trim/discard can be performed.
> +

Should we also expose can_fua, can_zero?

> +=head2 MISSING CALLBACKS
> +
> +=over 4
> +
> +=item Missing: C<load>, C<unload>, C<name>, C<version>, C<longname>, C<description>, C<config_help>
> +
> +These are not yet supported.

If you don't want to support can_zero/can_fua yet, should you document 
them here?

> +++ b/plugins/tcl/tcl.c

> +static Tcl_Interp *interp;
> +static const char *script;
> +
> +static void
> +tcl_load (void)
> +{
> +  //Tcl_FindExecutable ("nbdkit");

Is this comment intentional?

Otherwise LGTM

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list