aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2011-09-16 14:41:28 +0200
committerBjörn-Egil Dahlberg <[email protected]>2011-09-16 14:41:28 +0200
commita6b27d639e5c7c85e765331cfe7befbe23c4954b (patch)
tree745d5193470835be21d79eff015ca9f06194ce97 /erts/emulator
parent0c41940bef1d80b6b335cb0a77d5608d9bbe27fd (diff)
parent604967b4c184249d8604f327bb4e683e2c453de8 (diff)
downloadotp-a6b27d639e5c7c85e765331cfe7befbe23c4954b.tar.gz
otp-a6b27d639e5c7c85e765331cfe7befbe23c4954b.tar.bz2
otp-a6b27d639e5c7c85e765331cfe7befbe23c4954b.zip
Merge branch 'pan/win_erlsrv_stop/OTP-9344' into dev
* pan/win_erlsrv_stop/OTP-9344: Move init of smp rw mutex from init to sys_args to make sure that it is initialized before the first erts_sys_getenv call Move erts_sys_env_init() to erts_sys_pre_init() Remove _DEBUG from start_erl.c Spelling correction in erlsrv doc Convert windows start_erl to take rootdir on command line Add command start_disabled to erlsrv Add global lock for erlsrv to avoid races Change start order so that service_event gets initialized before it's used
Diffstat (limited to 'erts/emulator')
-rw-r--r--erts/emulator/beam/erl_init.c4
-rw-r--r--erts/emulator/sys/unix/sys.c4
-rw-r--r--erts/emulator/sys/win32/sys.c3
3 files changed, 7 insertions, 4 deletions
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 0a57eb6d88..0173fd40f6 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.c
@@ -803,10 +803,12 @@ early_init(int *argc, char **argv) /*
#if defined(HIPE)
hipe_signal_init(); /* must be done very early */
#endif
- erl_sys_init();
erl_sys_args(argc, argv);
+ /* Creates threads on Windows that depend on the arguments, so has to be after erl_sys_args */
+ erl_sys_init();
+
erts_ets_realloc_always_moves = 0;
erts_ets_always_compress = 0;
erts_dist_buf_busy_limit = ERTS_DE_BUSY_LIMIT;
diff --git a/erts/emulator/sys/unix/sys.c b/erts/emulator/sys/unix/sys.c
index bafbbb0f6c..cc08c1d20a 100644
--- a/erts/emulator/sys/unix/sys.c
+++ b/erts/emulator/sys/unix/sys.c
@@ -527,7 +527,6 @@ erts_sys_pre_init(void)
void
erl_sys_init(void)
{
- erts_smp_rwmtx_init(&environ_rwmtx, "environ");
#if !DISABLE_VFORK
{
int res;
@@ -3088,6 +3087,8 @@ get_value(char* rest, char** argv, int* ip)
void
erl_sys_args(int* argc, char** argv)
{
+ erts_smp_rwmtx_init(&environ_rwmtx, "environ");
+
int i, j;
i = 1;
@@ -3151,4 +3152,5 @@ erl_sys_args(int* argc, char** argv)
argv[j++] = argv[i];
}
*argc = j;
+
}
diff --git a/erts/emulator/sys/win32/sys.c b/erts/emulator/sys/win32/sys.c
index a2159d063c..76db355a9c 100644
--- a/erts/emulator/sys/win32/sys.c
+++ b/erts/emulator/sys/win32/sys.c
@@ -3282,6 +3282,7 @@ erts_sys_pre_init(void)
}
#endif
erts_smp_atomic_init(&sys_misc_mem_sz, 0);
+ erts_sys_env_init();
}
void noinherit_std_handle(DWORD type)
@@ -3297,8 +3298,6 @@ void erl_sys_init(void)
{
HANDLE handle;
- erts_sys_env_init();
-
noinherit_std_handle(STD_OUTPUT_HANDLE);
noinherit_std_handle(STD_INPUT_HANDLE);
noinherit_std_handle(STD_ERROR_HANDLE);