aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
AgeCommit message (Collapse)Author
2014-09-22Merge remote-tracking branch 'upstream/maint'Ingela Anderton Andin
2014-09-22Merge branch 'nox/fix-debug-hipe-lock-checking/OTP-12188' into maintMarcus Arendt
* nox/fix-debug-hipe-lock-checking/OTP-12188: Fix HiPE debug lock checking on OS X 64bit
2014-09-17Merge branch 'sverk/bin-alloc-refactor'Sverker Eriksson
* sverk/bin-alloc-refactor: erts: Fix gdb command etp-carrier-blocks for 32-bit erts: Refactor binary allocation interface to also initialize Binary
2014-09-17Merge branch 'sverk/valgrind-RC4-suppression'Sverker Eriksson
* sverk/valgrind-RC4-suppression: crypto: Add valgrind suppression for RC4
2014-09-12Merge branch 'maint'Sverker Eriksson
2014-09-12erts: Remove enif_have_dirty_schedulers()Sverker Eriksson
and add 'dirty_scheduler_support' to ErlNifSysInfo
2014-09-10erts: Correct dirty scheduler NIF API for WindowsSverker Eriksson
enif_schedule_nif() put LAST of the unconditional functions to keep the order which is vital for ABI compatibility on Windows. The conditional dirty scheduler stuff moved down at the end of the list to keep them out of the way. We don't want them mess things up then they become unconditional some day.
2014-09-09Merge branch 'egil/erlang-get_keys/OTP-12151'Björn-Egil Dahlberg
* egil/erlang-get_keys/OTP-12151: Update preloaded erlang.beam erts: Document erlang:get_keys/0 stdlib: Auto-import erlang:get_keys/0 erts: Add spec for erlang:get_keys/0 kernel: Test BIF erlang:get_keys/0 erts: Add BIF erlang:get_keys/0
2014-09-05Merge branch 'maint'Rickard Green
* maint: Only run upper boundry tuple test with lots of memory
2014-09-05Merge branch 'rickard/memory_consuming_tuple_tests' into maintRickard Green
* rickard/memory_consuming_tuple_tests: Only run upper boundry tuple test with lots of memory
2014-09-05Only run upper boundry tuple test with lots of memoryRickard Green
2014-09-05Merge branch 'maint'Rickard Green
* maint: Fix leak of NIF exports Use separate allocation type for NIF export
2014-09-05Merge branch 'vinoski/enif-schedule-nif' into maintRickard Green
OTP-12128 * vinoski/enif-schedule-nif: Fix leak of NIF exports Use separate allocation type for NIF export
2014-09-05Fix leak of NIF exportsRickard Green
2014-09-05Use separate allocation type for NIF exportRickard Green
2014-09-04erts: Refactor binary allocation interface to also initialize BinarySverker Eriksson
except the reference counter 'refc', as different callers have different strategies regarding the lifetime of the binary.
2014-09-04Merge branch 'maint'Sverker Eriksson
2014-09-04Merge branch 'sverk/term_to_binary-realloc-size/OTP-12141' into maintSverker Eriksson
* sverk/term_to_binary-realloc-size/OTP-12141: erts: Fix bug in term_to_binary that reallocates binary with wrong size
2014-09-04Merge branch 'maint'Sverker Eriksson
2014-09-04Merge branch 'sverk/MIN_SMALL-to-integer' into maintSverker Eriksson
* sverk/MIN_SMALL-to-integer: erts: Correct conversion of MIN_SMALL numeral to fixnum OTP-12140
2014-09-04erts: Correct conversion of MIN_SMALL numeral to fixnumSverker Eriksson
list_to_integer and binary_to_integer returned un-normalized bignum for -134217728 on 32-bit and -576460752303423488 on 64-bit. Thanks to Jesper Louis Andersen, Mikael Pettersson and Anthony Ramine for report, initial patch and optimization suggestion.
2014-09-04Merge branch 'maint'Sverker Eriksson
2014-09-04Merge branch 'sverk/nif-inspect-copy-bug/OTP-9828' into maintSverker Eriksson
* sverk/nif-inspect-copy-bug/OTP-9828: erts: Fix bug with enif_make_copy reallocating writable binary Conflicts: erts/emulator/test/nif_SUITE.erl
2014-09-03erts: Fix bug with enif_make_copy reallocating writable binarySverker Eriksson
that could invalidate a pointer received from an earlier call to enif_inspect_binary. Solution: Emasculate writable binary at enif_inspect_binary. There are room for optimizations here as we now do an unconditional emasculation even though enif_make_copy is not called later in the NIF.
2014-09-03erts: Fix bug in term_to_binary that reallocates binary with wrong sizeSverker Eriksson
2014-08-29Merge branch 'maint'Rickard Green
* maint: Fix busy_port_SUITE:io_to_busy test-case Ensure "runnable port" trace messages are not sent out of order Ensure "runnable proc" trace messages are not sent out of order
2014-08-29Merge branch 'rickard/runnable-trace-ooo-bug/OTP-12105' into maintRickard Green
* rickard/runnable-trace-ooo-bug/OTP-12105: Fix busy_port_SUITE:io_to_busy test-case Ensure "runnable port" trace messages are not sent out of order Ensure "runnable proc" trace messages are not sent out of order
2014-08-29Merge branch 'maint'Rickard Green
* maint: Verify run-queue asserts Fix emigrate bug in erts_port_task_schedule()
2014-08-29Merge branch 'rickard/port-emigrate-bug/maint/OTP-12084' into maintRickard Green
* rickard/port-emigrate-bug/maint/OTP-12084: Verify run-queue asserts Fix emigrate bug in erts_port_task_schedule()
2014-08-28Merge branch 'maint'Rickard Green
* maint: add enif_schedule_nif() to NIF API
2014-08-28Merge branch 'vinoski/enif-schedule-nif' into maintRickard Green
* vinoski/enif-schedule-nif: add enif_schedule_nif() to NIF API
2014-08-28add enif_schedule_nif() to NIF APISteve Vinoski
In the #erlang IRC channel Anthony Ramine once mentioned the idea of allowing a NIF to use an emulator trap, similar to a BIF trap, to schedule another NIF for execution. This is exactly how dirty NIFs were implemented for Erlang/OTP 17.0, so this commit refactors and generalizes that dirty NIF code to support a new enif_schedule_nif() API function. The enif_schedule_nif() function allows a long-running NIF to be broken into separate NIF invocations. The NIF first executes part of the long-running task, then calls enif_schedule_nif() to schedule a NIF for later execution to continue the task. Any number of NIFs can be scheduled in this manner, one after another. Since the emulator regains control between invocations, this helps avoid problems caused by native code tying up scheduler threads for too long. The enif_schedule_nif() function also replaces the original experimental dirty NIF API. The function takes a flags parameter that a caller can use to indicate the NIF should be scheduled onto either a dirty CPU scheduler thread, a dirty I/O scheduler thread, or scheduled as a regular NIF on a regular scheduler thread. With this change, the original experimental enif_schedule_dirty_nif(), enif_schedule_dirty_nif_finalizer() and enif_dirty_nif_finalizer() API functions are no longer needed and have been removed. Explicit scheduling of a dirty NIF finalization function is no longer necessary; if an application wants similar functionality, it can have a dirty NIF just invoke enif_schedule_nif() to schedule a non-dirty NIF to complete its task. Lift the restriction that dirty NIFs can't call enif_make_badarg() to raise an exception. This was a problem with the original dirty NIF API because it forced developers to get and check all incoming arguments in a regular NIF, and then schedule the dirty NIF which then had to get all the arguments again. Now, the argument checking can be done in the dirty NIF and it can call enif_make_badarg() itself to flag incorrect arguments. Extend the ErlNifFunc struct with a new flags field that allows NIFs to be declared as dirty. The default value for this field is 0, indicating a regular NIF, so it's backwards compatible with all existing statically initialized ErlNifFunc struct instances, and so such instances require no code changes. Defining the flags field with a value of ERL_NIF_DIRTY_JOB_CPU_BOUND indicates that the NIF should execute on a dirty CPU scheduler thread, or defining it with a value of ERL_NIF_DIRTY_JOB_IO_BOUND indicates that the NIF should execute on a dirty I/O scheduler thread. Any other flags field value causes a NIF library loading error. Extend the ErlNifEntry struct with a new options field that indicates whether a NIF library was built with support for optional features such as dirty NIFs. When a NIF library is loaded, the runtime checks the options field to ensure compatibility. If a NIF library built with dirty NIF support is loaded into a runtime that does not support dirty NIFs, and the library defines one or more ErlNifFunc entries with non-zero flags fields indicating dirty NIFs, a NIF library loading error results. There is no error if a NIF library built with dirty NIF support is loaded into a runtime that does not support dirty NIFs but the library does not have any dirty NIFs. It is also not an error if a library without dirty NIF support is loaded into a runtime built with dirty NIF support. Add documentation and tests for enif_schedule_nif().
2014-08-28Merge branch 'maint'Marcus Arendt
2014-08-28Merge branch 'tuncer/misspelled-another' into maintMarcus Arendt
* tuncer/misspelled-another: Fix misspellings of 'another'
2014-08-25Fix misspellings of 'another'Tuncer Ayaz
2014-08-22Fix ERTS_POLL_DEBUG_PRINT usageMichael Truog
2014-08-22erts: Add BIF erlang:get_keys/0Björn-Egil Dahlberg
Returns a list of all keys in the process dictionary.
2014-08-22Fix busy_port_SUITE:io_to_busy test-caseRickard Green
2014-08-22Ensure "runnable port" trace messages are not sent out of orderRickard Green
2014-08-22Ensure "runnable proc" trace messages are not sent out of orderRickard Green
2014-08-21Merge branch 'maint'Björn-Egil Dahlberg
2014-08-21Merge branch 'egil/proc_lib-optimizations/OTP-12060' into maintBjörn-Egil Dahlberg
* egil/proc_lib-optimizations/OTP-12060: stdlib: Update dependencies to erts-6.2 erts: Update preloaded erlang.beam stdlib: Use erlang:fun_info_mfa/1 in proc_lib:init_p/3 erts: Test erlang:fun_info_mfa/1 erts: Introduce erlang:fun_info_mfa/1
2014-08-21Merge branch 'maint'Lukas Larsson
* maint: Add number of entries to mnesia copy debug message Add thread index to allocator enomem dump slogan Add run queue index to process dump info Add missing error string to syslog logging in epmd Demote rare debug slogan of message discarding to debug build
2014-08-21Merge branch 'nox/reedr-logging/OTP-12115' into maintLukas Larsson
* nox/reedr-logging/OTP-12115: Add number of entries to mnesia copy debug message Add thread index to allocator enomem dump slogan Add run queue index to process dump info Add missing error string to syslog logging in epmd Demote rare debug slogan of message discarding to debug build
2014-08-18Merge branch 'rickard/port-emigrate-bug/OTP-12084' into ↵Rickard Green
rickard/port-emigrate-bug/maint/OTP-12084 * rickard/port-emigrate-bug/OTP-12084: Verify run-queue asserts Fix emigrate bug in erts_port_task_schedule() Conflicts: erts/emulator/beam/erl_port_task.c
2014-08-16Fix HiPE debug lock checking on OS X 64bitAnthony Ramine
Position-independent code is mandatory on OS X. We use r11 as an intermediate register to fill BIF_P->hipe.bif_callee. This fixes the following error when doing `make debug FLAVOR=smp`: clang -cc1as: fatal error: error in backend: 32-bit absolute addressing is not supported in 64-bit mode
2014-08-14Verify run-queue assertsRickard Green
2014-08-14Merge branch 'bjorn/erts/export-bifs/OTP-12099'Björn Gustavsson
* bjorn/erts/export-bifs/OTP-12099: BIFs should be considered exported
2014-08-14Merge branch 'maint'Lukas Larsson
* maint: erts: Fix neg int overflow when sint is min size
2014-08-14Merge branch 'lukas/erts/fix_neg_of_int64_min/OTP-12097' into maintLukas Larsson
* lukas/erts/fix_neg_of_int64_min/OTP-12097: erts: Fix neg int overflow when sint is min size