aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/sys/common
AgeCommit message (Collapse)Author
2010-06-01OTP-8658 Add missing memory barriers in erts_poll()Rickard Green
Missing memory barriers in erts_poll() could cause the runtime system to hang indefinitely.
2010-05-15fix livelock in erts_poll_info_kp()Mikael Pettersson
erts_poll_info_kp() [defined in erts/emulator/sys/common/erl_poll.c via some name-mangling trickery] contains a code path that can end up in an infinite loop, causing a livelock. There is a block of code inside #if ERTS_POLL_USE_UPDATE_REQUESTS_QUEUE that is supposed to iterate over a linked list of ErtsPollSetUpdateRequestsBlocks and update two variables based on the sizes of these blocks. The bug is that the loop forgets to advance the list pointer to the next element, so if the loop is entered at all (the initial list pointer is non-NULL), the thread falls into an infinite loop. This patch, against R13B03 but applies fine to today's git, fixes the bug by adding a statement to advance the list pointer in the loop. All other loops over this list appear to be correct. Thanks to Chetan Ahuja for the original report of a livelock problem in erts_poll_info_kp().
2010-04-28OTP-8591 Race in mseg cashe on non-SMP with async threadsSverker Eriksson
Fix memory management bug causing crash of non-SMP emulator with async threads enabled. The bug did first appear in R13B03.
2010-03-22Merge branch 'pan/otp_8332_halfword' into devErlang/OTP
* pan/otp_8332_halfword: Teach testcase in driver_suite the new prototype for driver_async wx: Correct usage of driver callbacks from wx thread Adopt the new (R13B04) Nif functionality to the halfword codebase Support monitoring and demonitoring from driver threads Fix further test-suite problems Correct the VM to work for more test suites Teach {wordsize,internal|external} to system_info/1 Make tracing and distribution work Turn on instruction packing in the loader and virtual machine Add the BeamInstr data type for loaded BEAM code Fix the BEAM dissambler for the half-word emulator Store pointers to heap data in 32-bit words Add a custom mmap wrapper to force heaps into the lower address range Fit all heap data into the 32-bit address range
2010-03-10Fix further test-suite problemsPatrik Nyblom
Fix safe_mul in the loader, which caused failures in the bit syntax test cases. Fix yet another Uint in erl_alloc.h (ERTS_CACHE_LINE_SIZE) causing segmentation fault when we have many schedulers (why only in that situation?). Clean up erl_mseg (remove old code for the Linux 32-bit mmap flag). While at it, also remove compilation warnings.
2010-03-10Store pointers to heap data in 32-bit wordsPatrik Nyblom
Store Erlang terms in 32-bit entities on the heap, expanding the pointers to 64-bit when needed. This works because all terms are stored on addresses in the 32-bit address range (the 32 most significant bits of pointers to term data are always 0). Introduce a new datatype called UWord (along with its companion SWord), which is an integer having the exact same size as the machine word (a void *), but might be larger than Eterm/Uint. Store code as machine words, as the instructions are pointers to executable code which might reside outside the 32-bit address range. Continuation pointers are stored on the 32-bit stack and hence must point to addresses in the low range, which means that loaded beam code much be placed in the low 32-bit address range (but, as said earlier, the instructions themselves are full words). No Erlang term data can be stored on C stacks (enforced by an earlier commit). This version gives a prompt, but test cases still fail (and dump core). The loader (and emulator loop) has instruction packing disabled. The main issues has been in rewriting loader and actual virtual machine. Subsystems (like distribution) does not work yet.
2010-03-10Add a custom mmap wrapper to force heaps into the lower address rangePatrik Nyblom
The free list is still rudimentary for the mmap wrapper and a better implementation will be needed for production quality.
2010-03-10Fit all heap data into the 32-bit address rangePatrik Nyblom
This is the first step in the implementation of the half-word emulator, a 64-bit emulator where all pointers to heap data will be stored in 32-bit words. Code specific for this emulator variant is conditionally compiled when the HALFWORD_HEAP define has a non-zero value. First force all pointers to heap data to fall into a single 32-bit range, but still store them in 64-bit words. Temporary term data stored on C stack is moved into scheduler specific storage (allocated as heaps) and macros are added to make this happen only in emulators where this is needed. For a vanilla VM the temporary terms are still stored on the C stack.
2010-02-08OTP-8412 Fixed numerous compiler warnings generated by gcc 4.4.1 andRickard Green
tile-cc 2.0.1.78377 when compiling the runtime system.
2009-11-20The R13B03 release.OTP_R13B03Erlang/OTP