From 7b70a6986c1342a79954771e1fc38bdce6c6c7ef Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 28 Nov 2005 07:16:33 +0000
Subject: [PATCH] 	* intrinsics/ftell.c (ftell, FTELL_SUB): Add
 unlock_unit call. 	* intrinsics/fget.c (fgetc, fputs): Likewise. 	*
 intrinsics/tty.c (ttynam): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107595 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libgfortran/ChangeLog          |  6 ++++++
 libgfortran/intrinsics/fget.c  |  6 +++++-
 libgfortran/intrinsics/ftell.c | 11 ++++++++---
 libgfortran/intrinsics/tty.c   |  2 ++
 4 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 216a0a70f5dc..b874dc57819e 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+	* intrinsics/ftell.c (ftell, FTELL_SUB): Add unlock_unit call.
+	* intrinsics/fget.c (fgetc, fputs): Likewise.
+	* intrinsics/tty.c (ttynam): Likewise.
+
 2005-11-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
 	PR libgfortran/25109
diff --git a/libgfortran/intrinsics/fget.c b/libgfortran/intrinsics/fget.c
index 8eb96e3b98d8..5c87ae6c3c11 100644
--- a/libgfortran/intrinsics/fget.c
+++ b/libgfortran/intrinsics/fget.c
@@ -54,6 +54,7 @@ PREFIX(fgetc) (const int * unit, char * c, gfc_charlen_type c_len)
   s = 1;
   memset (c, ' ', c_len);
   ret = sread (u->s, c, &s);
+  unlock_unit (u);
 
   if (ret != 0)
     return ret;
@@ -118,13 +119,16 @@ PREFIX(fputc) (const int * unit, char * c,
 	       gfc_charlen_type c_len __attribute__((unused)))
 {
   size_t s;
+  int ret;
   gfc_unit * u = find_unit (*unit);
 
   if (u == NULL)
     return -1;
 
   s = 1;
-  return swrite (u->s, c, &s);
+  ret = swrite (u->s, c, &s);
+  unlock_unit (u);
+  return ret;
 }
 
 
diff --git a/libgfortran/intrinsics/ftell.c b/libgfortran/intrinsics/ftell.c
index 16cf275c4dc6..311f070cd160 100644
--- a/libgfortran/intrinsics/ftell.c
+++ b/libgfortran/intrinsics/ftell.c
@@ -42,10 +42,12 @@ size_t
 PREFIX(ftell) (int * unit)
 {
   gfc_unit * u = find_unit (*unit);
+  size_t ret;
   if (u == NULL)
     return ((size_t) -1);
-  else
-    return ((size_t) stream_offset (u->s));
+  ret = (size_t) stream_offset (u->s);
+  unlock_unit (u);
+  return ret;
 }
 
 #define FTELL_SUB(kind) \
@@ -58,7 +60,10 @@ PREFIX(ftell) (int * unit)
     if (u == NULL) \
       *offset = -1; \
     else \
-      *offset = stream_offset (u->s); \
+      { \
+	*offset = stream_offset (u->s); \
+	unlock_unit (u); \
+      } \
   }
 
 FTELL_SUB(1)
diff --git a/libgfortran/intrinsics/tty.c b/libgfortran/intrinsics/tty.c
index 63c2a5e6d76d..93416f9983c2 100644
--- a/libgfortran/intrinsics/tty.c
+++ b/libgfortran/intrinsics/tty.c
@@ -121,8 +121,10 @@ ttynam (char ** name, gfc_charlen_type * name_len, int unit)
 	{
 	  *name_len = strlen (*name);
 	  *name = strdup (*name);
+	  unlock_unit (u);
 	  return;
 	}
+      unlock_unit (u);
     }
 
   *name_len = 0;
-- 
GitLab