diff options
Diffstat (limited to 'erts/emulator/beam/io.c')
-rw-r--r-- | erts/emulator/beam/io.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index 61985271e6..ad0b909b2a 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 1996-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -31,6 +31,7 @@ /* must be included BEFORE global.h (since it includes erl_driver.h) */ #include "erl_sys_driver.h" +#include "erl_nif.h" #include "erl_vm.h" #include "global.h" @@ -1078,7 +1079,7 @@ int erts_write_to_port(Eterm caller_id, Port *p, Eterm list) } cbin = driver_alloc_binary(csize); if (!cbin) - erts_alloc_enomem(ERTS_ALC_T_DRV_BINARY, sizeof(Binary) + csize); + erts_alloc_enomem(ERTS_ALC_T_DRV_BINARY, ERTS_SIZEOF_Binary(csize)); /* Element 0 is for driver usage to add header block */ ivp[0].iov_base = NULL; @@ -1227,7 +1228,7 @@ void init_io(void) erts_smp_atomic_init(&erts_port[i].refc, 0); erts_port[i].lock = NULL; erts_port[i].xports = NULL; - erts_smp_spinlock_init(&erts_port[i].state_lck, "port_state"); + erts_smp_spinlock_init_x(&erts_port[i].state_lck, "port_state", make_small(i)); #endif erts_port[i].tracer_proc = NIL; erts_port[i].trace_flags = 0; @@ -4473,7 +4474,14 @@ driver_system_info(ErlDrvSysInfo *sip, size_t si_size) sip->async_threads = erts_async_max_threads; sip->scheduler_threads = erts_no_schedulers; } - + /* + * 'nif_minor_version' is the last field in the third version + * (driver version 1.5, NIF version 1.0) + */ + if (si_size >= ERL_DRV_SYS_INFO_SIZE(nif_minor_version)) { + sip->nif_major_version = ERL_NIF_MAJOR_VERSION; + sip->nif_minor_version = ERL_NIF_MINOR_VERSION; + } } |