From: Thomas Koenig Date: Sun, 2 Sep 2018 18:31:54 +0000 (+0000) Subject: multi.c (_gfortran_caf_register): New function. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d3339526af25cd65f0d99ba6d2a05b37b61e1d0;p=thirdparty%2Fgcc.git multi.c (_gfortran_caf_register): New function. 2018-09-02 Thomas Koenig * caf/multi.c (_gfortran_caf_register): New function. (_gfortran_caf_lock): New function. (_gfortran_caf_unlock): New function. From-SVN: r264044 --- diff --git a/libgfortran/ChangeLog.dev b/libgfortran/ChangeLog.dev index d466bec4ccbd..b051202f12f1 100644 --- a/libgfortran/ChangeLog.dev +++ b/libgfortran/ChangeLog.dev @@ -1,3 +1,9 @@ +2018-09-02 Thomas Koenig + + * caf/multi.c (_gfortran_caf_register): New function. + (_gfortran_caf_lock): New function. + (_gfortran_caf_unlock): New function. + 2018-09-02 Thomas Koenig * caf/multi.c (_gfortran_caf_sync_images): Handle diff --git a/libgfortran/caf/multi.c b/libgfortran/caf/multi.c index d02e49db4d18..f4a700ce88f1 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