aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2021-01-17 19:13:20 +0100
committerThomas Koenig <tkoenig@gcc.gnu.org>2021-01-17 19:13:20 +0100
commite76a53644c9d70e998c0d050e9a456af388c6b61 (patch)
treeda5c8cf63eb5895830f5f779653ac1f472696903
parenta3f20923e1d7410b6166ffd0fca36f3bd2032ab6 (diff)
Use an initial shared memory size of 256 GB on Apple.
This implements an idea that Nicolas had to overcome the Darwin problem that it is not possible to extend a shared memory segment on that system. The remedy is simple: Use a memory segment that is larger than what can reasonably be used. This should only waste a few page table entries, while providing the functionality, at least for further testing. libgfortran/ChangeLog: * caf_shared/shared_memory.c (shared_memory_init): On Apple, use an initial size of 256 GB.
-rw-r--r--libgfortran/caf_shared/shared_memory.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libgfortran/caf_shared/shared_memory.c b/libgfortran/caf_shared/shared_memory.c
index b64e40a3ded..0c0b36c663d 100644
--- a/libgfortran/caf_shared/shared_memory.c
+++ b/libgfortran/caf_shared/shared_memory.c
@@ -190,7 +190,16 @@ shared_memory_init (shared_memory_act **pmem)
{
shared_memory_act *mem;
int fd;
+
+ /* Darwin does not appear to be able to grow shared memory segments. Choose
+ 256 GB; that will likely be enough. If not, the ftruncate will fail
+ noisily. */
+
+#ifdef __APPLE__
+ size_t initial_size = ((size_t) 1) << 38;
+#else
size_t initial_size = round_to_pagesize (sizeof (global_shared_memory_meta));
+#endif
mem = malloc (get_shared_memory_act_size (1));
fd = get_shmem_fd ();