[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