[gcc r14-7246] libgfortran: Bugfix if not define HAVE_ATOMIC_FETCH_ADD

H.J. Lu hjl@gcc.gnu.org
Mon Jan 15 13:22:19 GMT 2024


https://gcc.gnu.org/g:8414f10ad5bad6d522b72f9ae35e0bb86bb290ea

commit r14-7246-g8414f10ad5bad6d522b72f9ae35e0bb86bb290ea
Author: Lipeng Zhu <lipeng.zhu@intel.com>
Date:   Thu Jan 4 20:43:26 2024 -0500

    libgfortran: Bugfix if not define HAVE_ATOMIC_FETCH_ADD
    
    This patch try to fix the bug when HAVE_ATOMIC_FETCH_ADD is
    not defined in dec_waiting_unlocked function. As io.h does
    not include async.h, the WRLOCK and RWUNLOCK macros are
    undefined.
    
    libgfortran/ChangeLog:
    
            * io/io.h (dec_waiting_unlocked): Use
            __gthread_rwlock_wrlock/__gthread_rwlock_unlock or
            __gthread_mutex_lock/__gthread_mutex_unlock functions
            to replace WRLOCK and RWUNLOCK macros.
    
    Signed-off-by: Lipeng Zhu <lipeng.zhu@intel.com>

Diff:
---
 libgfortran/io/io.h | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
index 862daca1f22..59bc19ee815 100644
--- a/libgfortran/io/io.h
+++ b/libgfortran/io/io.h
@@ -1020,9 +1020,15 @@ dec_waiting_unlocked (gfc_unit *u)
 #ifdef HAVE_ATOMIC_FETCH_ADD
   (void) __atomic_fetch_add (&u->waiting, -1, __ATOMIC_RELAXED);
 #else
-  WRLOCK (&unit_rwlock);
+#ifdef __GTHREAD_RWLOCK_INIT
+  __gthread_rwlock_wrlock (&unit_rwlock);
+  u->waiting--;
+  __gthread_rwlock_unlock (&unit_rwlock);
+#else
+  __gthread_mutex_lock (&unit_rwlock);
   u->waiting--;
-  RWUNLOCK (&unit_rwlock);
+  __gthread_mutex_unlock (&unit_rwlock);
+#endif
 #endif
 }


More information about the Gcc-cvs mailing list