Hi!

"Andy Wingo" <wi...@pobox.com> writes:

>     fix a couple leaks in ports.c.  thanks valgrind!
>     
>     * libguile/ports.c (scm_i_remove_port): Fix a case in which ports
>       explictly closed via close-port would leak their iconv_t data.
>       (scm_set_port_encoding_x): scm_i_set_port_encoding_x strdups its
>       argument, so we need to free the locale encoding of the incoming str.

Good catch!

> --- a/libguile/ports.c
> +++ b/libguile/ports.c
> @@ -661,6 +661,19 @@ scm_i_remove_port (SCM port)
>    scm_port_non_buffer (p);
>    p->putback_buf = NULL;
>    p->putback_buf_size = 0;
> +
> +  if (p->input_cd != (iconv_t) -1)
> +    {
> +      iconv_close (p->input_cd);
> +      p->input_cd = (iconv_t) -1;
> +    }
> +  
> +  if (p->output_cd != (iconv_t) -1)
> +    {
> +      iconv_close (p->output_cd);
> +      p->output_cd = (iconv_t) -1;
> +    }
> +

I don’t think this is needed: each port has a finalizer,
‘finalize_port’, which normally takes care of this, eventually.

Thanks,
Ludo’.

Reply via email to