diff options
Diffstat (limited to 'libgfortran/io/transfer.c')
-rw-r--r-- | libgfortran/io/transfer.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 7bbee2131d..746bb6dcc6 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -3711,9 +3711,15 @@ void st_read_done (st_parameter_dt *dtp) { finalize_transfer (dtp); + if (is_internal_unit (dtp) || dtp->u.p.format_not_saved) - free_format_data (dtp->u.p.fmt); + { + free_format_data (dtp->u.p.fmt); + free_format (dtp); + } + free_ionml (dtp); + if (dtp->u.p.current_unit != NULL) unlock_unit (dtp->u.p.current_unit); @@ -3764,8 +3770,13 @@ st_write_done (st_parameter_dt *dtp) } if (is_internal_unit (dtp) || dtp->u.p.format_not_saved) - free_format_data (dtp->u.p.fmt); + { + free_format_data (dtp->u.p.fmt); + free_format (dtp); + } + free_ionml (dtp); + if (dtp->u.p.current_unit != NULL) unlock_unit (dtp->u.p.current_unit); |