diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2021-01-17 19:13:20 +0100 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2021-01-17 19:13:20 +0100 |
commit | e76a53644c9d70e998c0d050e9a456af388c6b61 (patch) | |
tree | da5c8cf63eb5895830f5f779653ac1f472696903 | |
parent | a3f20923e1d7410b6166ffd0fca36f3bd2032ab6 (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.c | 9 |
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 (); |