diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 216a0a70f5dc2f9ea1a343855d971d8b22b17454..b874dc57819e08e865531745d1f35ca752c73881 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 8eb96e3b98d8c0bd8b74d7d67670d3231a8096fa..5c87ae6c3c11e0db40309b331a8385690bb12851 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 16cf275c4dc616513b2bc39bf304b029493bda36..311f070cd16037b8c0fcd7f8f71b97d3877f3316 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 63c2a5e6d76d0a772dfdbb067554668d1f8a2298..93416f9983c2a9a49aec55e6cd0f28f892297420 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;