[pve-devel] [PATCH common v2] run_fork_with_timeout: allow returning undef

Dietmar Maurer dietmar at proxmox.com
Tue Sep 12 11:35:05 CEST 2017


would it be more generic to decode/encode the data as JSON?

print encode_json({ res => $res });
...

That way we can also return complex data structures, for example
exceptions.


	eval {
	    $res = $sub->();
	    print {$pipe_out} encode_json({ data => $res });
        }
        if (my $err = $@) {
	    print {$pipe_out} encode_json({ error => "$err" });
        }

We can completely avoid the additional $pipe_err that way.

> On September 12, 2017 at 10:28 AM Thomas Lamprecht <t.lamprecht at proxmox.com>
> wrote:
> 
> 
> allow also to return undef without any warnings to our caller.
> This avoids a "use of unitialised variable ..." warning
> 
> Add a single char at the start which allows us to differ between
> returning undef and returning all other values.
> 
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
> ---
> 
> changes v1 -> v2:
>  * methods should be allowed to return undef when run with
>    run_fork_with_timeout so fix the problem at the source
> 
>  src/PVE/Tools.pm | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
> index 81662b1..3c73782 100644
> --- a/src/PVE/Tools.pm
> +++ b/src/PVE/Tools.pm
> @@ -926,7 +926,8 @@ sub run_fork_with_timeout {
>  
>  	eval {
>  	    $res = $sub->();
> -	    print {$pipe_out} "$res";
> +	    # allows to pass undef to parent
> +	    print {$pipe_out} defined($res) ? "1$res" : "0";
>  	    $pipe_out->flush();
>  	};
>  	if (my $err = $@) {
> @@ -943,6 +944,7 @@ sub run_fork_with_timeout {
>      my $readvalues = sub {
>  	local $/ = undef;
>  	$res = <$pipe_out>;
> +	$res = undef if !substr ($res, 0, 1, '');
>  	$error = <$pipe_err>;
>      };
>      eval {
> -- 
> 2.11.0
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel




More information about the pve-devel mailing list