From 6ce3d791dfcba469e709935aba5743640f7d4959 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 28 May 2020 21:53:17 +0200 Subject: [PATCH] PR fortran/95104 - Segfault on a legal WAIT statement The initial commit for this PR uncovered a latent issue with unit locking in the Fortran run-time library. Add check for valid unit. 2020-05-28 Harald Anlauf libgfortran/ PR libfortran/95104 * io/unit.c (unlock_unit): Guard by check for NULL pointer. --- libgfortran/io/unit.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c index 0030d7e8701..a3b0656cb90 100644 --- a/libgfortran/io/unit.c +++ b/libgfortran/io/unit.c @@ -767,9 +767,12 @@ close_unit_1 (gfc_unit *u, int locked) void unlock_unit (gfc_unit *u) { - NOTE ("unlock_unit = %d", u->unit_number); - UNLOCK (&u->lock); - NOTE ("unlock_unit done"); + if (u) + { + NOTE ("unlock_unit = %d", u->unit_number); + UNLOCK (&u->lock); + NOTE ("unlock_unit done"); + } } /* close_unit()-- Close a unit. The stream is closed, and any memory -- 2.30.2