[patch, libgfortran] Memory issues related to PR78549

Jerry DeLisle jvdelisle@charter.net
Wed Dec 13 03:18:00 GMT 2017


Ping: If no objection, I will commit to trunk on Wednesday evening.

On 12/10/2017 07:55 PM, Jerry DeLisle wrote:
> Hi all,
> 
> While doing addition testing for the subject mentioned PR I discovered numerous
> un-freed memory allocations. I reported the problem in comment 30 of the PR.
> 
> The attached patch cleans this up by opening the internal unit structures during
> program initialization and allowing the automatic closure similar to
> pre-connected units. The internal stream structures are created and freed at the
> beginning and end of each I/O operation.  I fix a few loose ends.
> 
> Regression tested on x86_64.
> 
> OK for trunk?  Also needed for same issue in 7.
> 
> Regards,
> 
> Jerry
> 
> 2017-12-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
> 
> 	PR libgfortran/78549
> 	* io/inquire.c (inquire_via_unit): Adjust test for existence for
> 	pre-connected internal units.
> 	* io/transfer.c (finalize_transfer): When done with a transfer
> 	to internal units, free the format buffer and close the stream.
> 	(st_read_done): Delete freeing the stream, now handled using
> 	sclose in finalize_transfer. (st_write_done): Likewise.
> 	* io/unit.c (get_unit): Return NULL for special reserved unit
> 	numbers, signifying not accessible to the user.
> 	(init_units): Insert the two special internal units into the
> 	unit treap. This makes these unit structures available without
> 	further allocations for later use by internal unit I/O. These
> 	units are automatically deleted by normal program termination.
> 	* unix.c (mem_close): Add a guard check to protect from double free.
> 



More information about the Fortran mailing list