diff options
author | Lukas Larsson <[email protected]> | 2013-11-28 14:53:23 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2013-11-28 14:53:23 +0100 |
commit | 172ac461d7055b655a9b5c22c1d95a140624945f (patch) | |
tree | 362337ac628865f805d8b27ae7e32b54692ae260 /erts/emulator | |
parent | 0ce1af08e397ff1af25f6d3359ad5032f67bf7a8 (diff) | |
parent | e9c04e92199deb274e1bb74e4caecd296443ca5f (diff) | |
download | otp-172ac461d7055b655a9b5c22c1d95a140624945f.tar.gz otp-172ac461d7055b655a9b5c22c1d95a140624945f.tar.bz2 otp-172ac461d7055b655a9b5c22c1d95a140624945f.zip |
Merge branch 'lukas/erts/supercarrier_fix/OTP-11149' into maint
* lukas/erts/supercarrier_fix/OTP-11149:
Improve error info when main carrier creation fails
Conflicts:
erts/emulator/test/alloc_SUITE.erl
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/erl_alloc_util.c | 11 | ||||
-rw-r--r-- | erts/emulator/test/alloc_SUITE.erl | 7 |
2 files changed, 15 insertions, 3 deletions
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c index 441133a464..3914537d0d 100644 --- a/erts/emulator/beam/erl_alloc_util.c +++ b/erts/emulator/beam/erl_alloc_util.c @@ -5610,8 +5610,15 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init) | CFLG_FORCE_SYS_ALLOC #endif | CFLG_MAIN_CARRIER); - if (!blk) - goto error; + if (!blk) { +#ifdef USE_THREADS + if (allctr->thread_safe) + erts_mtx_destroy(&allctr->mutex); +#endif + erl_exit(ERTS_ABORT_EXIT, + "Failed to create main carrier for %salloc\n", + init->name_prefix); + } (*allctr->link_free_block)(allctr, blk); diff --git a/erts/emulator/test/alloc_SUITE.erl b/erts/emulator/test/alloc_SUITE.erl index cd2d043f7e..35c44c229a 100644 --- a/erts/emulator/test/alloc_SUITE.erl +++ b/erts/emulator/test/alloc_SUITE.erl @@ -127,7 +127,12 @@ erts_mmap(Config) when is_list(Config) -> erts_mmap_do(Config, SCO, SCRPM, SCRFSD) -> - SCS = 100, % Mb + %% We use the number of schedulers + 1 * approx main carriers size + %% to calculate how large the super carrier has to be + %% and then use a minimum of 100 for systems with a low amount of + %% schedulers + Schldr = erlang:system_info(schedulers_online)+1, + SCS = max(round((262144 * 6 + 3 * 1048576) * Schldr / 1024 / 1024),100), O1 = "+MMscs" ++ integer_to_list(SCS) ++ " +MMsco" ++ atom_to_list(SCO) ++ " +MMscrpm" ++ atom_to_list(SCRPM), |