aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-09-02 18:31:54 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-09-02 18:31:54 +0000
commit8d3339526af25cd65f0d99ba6d2a05b37b61e1d0 (patch)
treef83b4a65457644b7311edb4fb4fcb5747f19189b
parent72a7867c5cb436a3996d577ff5f90a82b13ccb35 (diff)
downloadgcc-8d3339526af25cd65f0d99ba6d2a05b37b61e1d0.zip
gcc-8d3339526af25cd65f0d99ba6d2a05b37b61e1d0.tar.gz
gcc-8d3339526af25cd65f0d99ba6d2a05b37b61e1d0.tar.bz2
multi.c (_gfortran_caf_register): New function.
2018-09-02 Thomas Koenig <tkoenig@gcc.gnu.org> * caf/multi.c (_gfortran_caf_register): New function. (_gfortran_caf_lock): New function. (_gfortran_caf_unlock): New function. From-SVN: r264044
-rw-r--r--libgfortran/ChangeLog.dev6
-rw-r--r--libgfortran/caf/multi.c42
2 files changed, 48 insertions, 0 deletions
diff --git a/libgfortran/ChangeLog.dev b/libgfortran/ChangeLog.dev
index d466bec..b051202 100644
--- a/libgfortran/ChangeLog.dev
+++ b/libgfortran/ChangeLog.dev
@@ -1,5 +1,11 @@
2018-09-02 Thomas Koenig <tkoenig@gcc.gnu.org>
+ * caf/multi.c (_gfortran_caf_register): New function.
+ (_gfortran_caf_lock): New function.
+ (_gfortran_caf_unlock): New function.
+
+2018-09-02 Thomas Koenig <tkoenig@gcc.gnu.org>
+
* caf/multi.c (_gfortran_caf_sync_images): Handle
SYNC IMAGGES (*) correctly.
diff --git a/libgfortran/caf/multi.c b/libgfortran/caf/multi.c
index d02e49d..f4a700c 100644
--- a/libgfortran/caf/multi.c
+++ b/libgfortran/caf/multi.c
@@ -123,6 +123,48 @@ _gfortran_caf_init (int *argcptr, char ***argvptr)
pthread_barrier_wait (&sync_all_barrier);
}
+/* Implementation of caf_register - so far only good enough to allow for
+ CRITICAL / END CRITICAL. */
+
+void
+_gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token,
+ gfc_descriptor_t *data, int *stat, char *errmsg,
+ size_t errmsg_len)
+{
+ if (type == CAF_REGTYPE_CRITICAL)
+ {
+ pthread_mutex_t *mutex, **mp;
+ mutex = malloc (sizeof *mutex);
+ pthread_mutex_init (mutex, NULL);
+ mp = token;
+ *mp = mutex;
+ }
+}
+
+/* Implement a lock. */
+
+void
+_gfortran_caf_lock (caf_token_t token, size_t index,
+ int image_index __attribute__ ((unused)),
+ int *aquired_lock, int *stat, char *errmsg, size_t errmsg_len)
+{
+ pthread_mutex_t *mutex;
+ mutex = token;
+ pthread_mutex_lock (mutex);
+}
+
+/* Implement an unlock. */
+
+void
+_gfortran_caf_unlock (caf_token_t token, size_t index,
+ int image_index __attribute__ ((unused)),
+ int *stat, char *errmsg, size_t errmsg_len)
+{
+ pthread_mutex_t *mutex;
+ mutex = token;
+ pthread_mutex_unlock (mutex);
+}
+
/*
Doesn't work
void