aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel
AgeCommit message (Collapse)Author
2011-12-07Merge branch 'sverk/packet_size-http/OTP-9389'Sverker Eriksson
* sverk/packet_size-http/OTP-9389: erts: Remove truncation of http packet parsing and return error instead honor packet_size for http packet parsing to fix OTP-9389
2011-12-07Remove debug printoutHans Bolinder
2011-12-06Merge branch 'ta/docs'Henrik Nord
* ta/docs: Fix misspelling of chosen Fix typos in erl(1) Fix misspelling of 'turn off' Fix typo in reltool(3) Fix typo in gen_sctp(3) Fix typo in mod_responsecontrol.erl Fix typo in erts_alloc(3) Fix typos in ssl_cipher.erl Fix typos in expressions.xml file: correct make_link/2 and make_symlink/2 docs Fix typo in test_server(3) Fix typos in io_protocol.xml Fix typo in erlang(3) Fix typos in tar_SUITE Fix typos in erts/preloaded/src OTP-9787
2011-12-06Merge branch 'ao/fix-change-time-inval-dates'Henrik Nord
* ao/fix-change-time-inval-dates: Fix a crash when file:change_time/2,3 are called with invalid dates OTP-9785
2011-12-06erts: Remove truncation of http packet parsing and return error insteadSverker Eriksson
This is a slight modification of previous commit by Steve Vinoski For backward compatibility of old users of decode_packet, I think it's enough to return error instead of keeping the old line truncation behaviour.
2011-12-05Fix misspelling of chosenTuncer Ayaz
2011-12-05honor packet_size for http packet parsing to fix OTP-9389Steve Vinoski
Allow applications to use a packet_size setting on a socket to control acceptable HTTP header line length. This gives them the ability to accept HTTP headers larger than the default settings allow, but also lets them avoid DOS attacks by accepting header lines only up to whatever length they wish to allow. Without this change, if an HTTP request/response line or header arrives on a socket in http, http_bin, httph, or httph_bin parsing mode, and the request/response line or header is too long to fit into a default inet_drv buffer of 1460 bytes, an unexpected error occurs. These problems were described and discussed on erlang-questions in June 2011 in this thread: http://erlang.org/pipermail/erlang-questions/2011-June/059563.html In the original code, no buffer reallocation occurs to enlarge the buffer, even if packet_size or line_length are set in a way that should allow the HTTP data to be parsed properly. The only available workaround was to collect headers and parse them using erlang:decode_packet, but that approach has drawbacks such as having to collect all HTTP header data before it can be handed to decode_packet for correct parsing, and also requiring each and every Erlang web server developer/maintainer to add the workaround to his or her web server. Change the packet parser to honor the packet_size setting for HTTP parsing. If packet_size is set, and an HTTP request/response or header line exceeds the default 1460 byte TCP buffer limit, return an indication to tcp_remain that it should realloc the buffer to enlarge it to packet_size. Also fix the HTTP parsing code to properly honor line_length by truncating any HTTP request/response or header lines that exceed that setting. For backward compatibility, default behavior is unchanged; if an application wants to be able to accept long HTTP header lines, it must set packet_size to an appropriate value. Buffer reallocation occurs only when needed, so the original default buffer size in the code is still the default. Make the line mode parsing honor packet_size as well, for consistency. Add new regression tests to the emulator decode_packet suite and also to the kernel gen_tcp_misc suite. The documentation for packet_size in inet:setopts/2 is already sufficient. Many thanks to Sverker Eriksson for his guidance on how to best fix this bug and also for reviewing a number of patch attempts prior to this one.
2011-12-05Fix typo in gen_sctp(3)Tuncer Ayaz
2011-12-05file: correct make_link/2 and make_symlink/2 docsTuncer Ayaz
2011-12-05Merge branch 'sa/dialyzer-fixes'Henrik Nord
* sa/dialyzer-fixes: Correct callback spec in application module Refine warning about callback specs with extra ranges Cleanup autoimport compiler directives Fix Dialyzer's warnings in typer Fix Dialyzer's warning for its own code Fix bug in Dialyzer's behaviours analysis Fix crash in Dialyzer OTP-9776
2011-12-05Merge branch 'hb/kernel/too_greedy_disk_log/OTP-9764'Hans Bolinder
* hb/kernel/too_greedy_disk_log/OTP-9764: Make sure disk_log does not write too much data
2011-12-04Make sure disk_log does not write too much dataHans Bolinder
While disk_log eagerly collects logged data for better performance, collecting too much data may choke the system and cause huge binaries to be written. (Reported by Klarna.) (Logging data faster than the speed disk_log can write to disk can still cause problems.)
2011-12-02Merge branch 'ta/sendfile/OTP-9240'Lukas Larsson
* ta/sendfile/OTP-9240: (31 commits) Add sendfile server printouts Skip recv/send during tests for fallback platforms Remove header/trailer support Remove windows implementation Expand sendfile documentation Only allow tcp sockets as target for sendfile Move sendfile api to file module Preliminary work on header/trailer Use free_sendfile explicitly for non-async Remove debug printouts Add tests for send/recv/sendfile interactions Remove tests for file_server sendfile sendfile caller now has to be the controlling_process Remove support for file_server, sendfile has to be raw Set chunk size to 3 GB Change type of fd to be ErlDrvEvent Add ifdef's for HAVE_SENDFILE Fix freebsd support for sendfile Change nbytes to 64 bit Implement ignorefd for TCP ...
2011-12-02Add sendfile server printoutsLukas Larsson
2011-12-02Skip recv/send during tests for fallback platformsLukas Larsson
2011-12-02Remove header/trailer supportLukas Larsson
Since the API for headers/trailers seem to be very awkward to work with when using non-blocking io the feature is dropped for now. See unix_efile.c for more details.
2011-12-02Expand sendfile documentationLukas Larsson
2011-12-02Move sendfile api to file moduleLukas Larsson
Since sendfile could in theory be used to send to any type of file descriptor in *nix, it is a better fit to have it in file.
2011-12-01Preliminary work on header/trailerLukas Larsson
Have to figure out how to represent progress in header writing when using non-blocking, not sure how to do this.
2011-12-01Add tests for send/recv/sendfile interactionsLukas Larsson
Tests for when a gen_tcp:send/recv is ordered while a sendfile is in progress.
2011-12-01Remove tests for file_server sendfileLukas Larsson
2011-12-01sendfile caller now has to be the controlling_processLukas Larsson
This is needed because otherwise there could be scenarios when the efile driver blocks a fd and then crashes without the inet driver ever finding out. Now when the process crashes the port will close and we can cleanup in the inet driver.
2011-12-01Remove support for file_server, sendfile has to be rawLukas Larsson
Because the sending process has to be the controlling process of the tcp socket used to send data it is not possible to use the file_server
2011-12-01Implement ignorefd for TCPLukas Larsson
Ignore fd is a feature used by sendfile to temporarily remove all driver_select calls on that fd so that another driver can select on it. It also delays all actions which sends or receives data in that fd until in the fd is no longer ignored. Only the controlling_process should use the feature as it is otherwise possible that the ignore will never be cleaned up and hence create a memory leak in the driver. An ignored driver will not detect that an fd has been closed until it is unignored.
2011-12-01Implement sendfile when there are no async threadsLukas Larsson
When there are no async threads sendfile will use the ready_output select on the socket fd to know when to send data. The file_desc will also be put in the sending sendfile_state which buffers all other commands to that file until the sendfile is done.
2011-12-01Implement blocking calls for sendfileLukas Larsson
Move sendfile data to invoke data instead of file_descr. Remove usage of ready_output when doing a send. If told to send 0 bytes, file_sendfile now sends the entire file for linux.
2011-12-01Implement sendfile using blocking io in asynch threadsLukas Larsson
Move the command handling to outputv in preparation for header and trailer inclusion in the sendfile api. Use the standard efile communication functions for sendfile.
2011-12-01Create erlang fallback for sendfileLukas Larsson
Created erlang fallback for sendfile in gen_tcp and moved sendfile from file to gen_tcp. Also created testcases for testing all different options to sendfile. For info about how sendfile should work see the BSD man pages as they contain a more complete API than other *nixes.
2011-12-01Move sendfile tests to gen_tcp_api_SUITELukas Larsson
2011-12-01Correct callback spec in application moduleStavros Aronis
2011-11-29Implement file:sendfileTuncer Ayaz
Allow Erlang code to use sendfile() where available by wrapping it as file:sendfile/4 and file:sendfile/2. sendfile(2) - Linux man page: "sendfile() copies data between one file descriptor and another. Because this copying is done within the kernel, sendfile() is more efficient than the combination of read(2) and write(2), which would require transferring data to and from user space."
2011-11-29wrap_log_reader_SUITE: Eliminate use of tuple funBjörn Gustavsson
2011-11-29file_SUITE: Eliminate use of tuple funBjörn Gustavsson
2011-11-29user_sup: Eliminate use of tuple funBjörn Gustavsson
2011-11-28Merge branch 'bjorn/code-loading'Björn Gustavsson
* bjorn/code-loading: code: Clean up loading of code_server prerequisites beam_load.c: Add init_iff_file() for verifying the IFF header beam_code.c: Don't reinvent state initialization and deallocation beam_load.c: Optimize code:get_chunk/2 beam_load.c: Eliminate memory leak in code:make_stub_module/3
2011-11-28kernel: Adjust sctp test skip for interesting error value from MontavistaRaimo Niskanen
2011-11-28kernel: Adjust test to allow for creative auto alias on MacOS XRaimo Niskanen
2011-11-26code: Clean up loading of code_server prerequisitesBjörn Gustavsson
Reorganize in a systematic way the code that loads the modules needed by the code_server process. While at it, remove the useless hipe_unified_loader:load_hipe_modules/0 function.
2011-11-23Avoid slow code loading of BEAM code in a hipe-enabled emulatorBjörn Gustavsson
On my Linux computer, building the entire Erlang/OTP system with hipe disabled took about 8 minutes. With hipe enabled, but without any native code, the build took about 23 minutes, i.e. more than 3 times slower. (The computer has 4 cores, and I used 'make -j6'.) On my eight-core Mac (running 'make -j10') there was only a slight slowdown when hipe was enabled. The culprit is hipe_unified_loader:post_beam_load/1, which will be called every time a module is loaded (even if the module contains no native code). If post_beam_load/1 is called in a hipe-enabled emulator, it will block multi-scheduling, even if no work needs to be done. Apparently the cost for blocking multi-scheduling can vary greatly, depending on the operating system and system load. As a quick and conservative fix, don't call post_beam_load/1 unless some native code has been previously loaded.
2011-11-22Revert "Update version numbers for pre-release of R15"Björn-Egil Dahlberg
This reverts commit e21ff9b0b69219ab3853be7e80813156113152b7.
2011-11-22Update version numbers for pre-release of R15OTP_R15ABjörn Gustavsson
2011-11-18Merge branch 'siri/sasl/upgrade-erts/OTP-9438'Siri Hansen
* siri/sasl/upgrade-erts/OTP-9438: Fix bug in erts upgrade on windows Add release vsn info to erts_vsn_changed warning Check for sasl application in systools:make_script and make_relup Add syntax check of relup to check_install_release and install_release Add documentation for upgrade from pre R15 to post R15 sasl Handle upgrade from pre R15 to post R15 sasl Step version of sasl to 2.2 for R15 Document upgrade instructions restart_new_emulator and restart_emulator Wait for two restarts in upgrade_restart test Add restart_new_emulator instruction to kernel, stdlib and sasl appups Distinguish restart_new_emulator from restart_emulator in upgrade instructions Upgrade erts: merge sys.config for tmp release instead of using old Allow regexp for version in .appup Restart emulator before running upgrade script when erts is upgraded Conflicts: lib/sasl/src/release_handler.erl lib/sasl/test/release_handler_SUITE.erl
2011-11-18gen_udp_SUITE:buffer_size test case fixRaimo Niskanen
2011-11-17Add restart_new_emulator instruction to kernel, stdlib and sasl appupsSiri Hansen
The appup files for kernel, stdlib and sasl did not contain any UpFromVsn and DownToVsn. This means that it was not possible to create a relup file with systool:make_relup if any of these applications had changed. This commit adds entries in the appup files for a maximum of two major releases back - all with only one upgrade instruction: restart_new_emulator. The point is to allow relups to be generated, but ensure that no soft upgrade is done for these three applications - i.e. they will always cause a restart of the emulator prior to all other upgrade instructions from other applications. Test cases (appup_test) are added to kernel_SUITE, stdlib_SUITE and sasl_SUITE. These all check that expected versions are matched in the appups, and illegal versions (older than two major releases, or in any other way illegal) do not match. The test is written in a general way where it is assumed that the version of these applications are stepped according the the rule that major releases step the second number, maintenance releases step the third number and patches step the fourth number.
2011-11-17Merge branch 'siri/kernel/application-shutdown-timeout/OTP-9540'Siri Hansen
* siri/kernel/application-shutdown-timeout/OTP-9540: Add documentation and test for kernel env var shutdown_timeout Add env var shutdown_timeout to kernel to avoid deadlock on node shutdown
2011-11-17Merge branch 'raimo/sctp-dev/OTP-9239'Raimo Niskanen
* raimo/sctp-dev/OTP-9239: (21 commits) erts: Possible bugfix for error chunk on old Solaris 10 kernel: Documented gen_sctp:peeloff/2 kernel: Adjust SCTP test to SuSE quirk erts: Fixes for SCTP on old Solaris 10 Update preloaded files erts,kernel: Return eprotonosupport when SCTP is not supported kernel: Adjust SCTP tests to Solaris quirks erts: Fix SCTP decoding byteorder bug for adaptation_ind kernel: Rewrite SCTP test socket handler kernel: Fix SCTP tests for the FreeBSD protocol stack kernel: Bugfix - SCTP connect with sndrcvinfo in assoc_change event erts: Default enable SCTP in configure Update primary bootstrap and preloaded files erts: Use SCTP functions in default libs erts: Improve SCTP message defragmenting erts,kernel: Bugfix - collect fragmented SCTP messages on recv kernel: Add tests for gen_sctp:peeloff/2 erts,kernel: Implement gen_sctp:peeloff/2 kernel: Add tests for SCTP stream sockets erts,kernel: Add type stream sockets to SCTP ...
2011-11-17kernel: Documented gen_sctp:peeloff/2Raimo Niskanen
2011-11-17kernel: Adjust SCTP test to SuSE quirkRaimo Niskanen
inet:port/1 on peeled off socket returns 0. Bug? Who's?
2011-11-17erts,kernel: Return eprotonosupport when SCTP is not supportedRaimo Niskanen
It is better that gen_sctp:open/0-2 returns the informative Posix return code {error,eprotonosupport} than previously {error,badarg} when SCTP is not supported since it is so platform dependent.
2011-11-17kernel: Adjust SCTP tests to Solaris quirksRaimo Niskanen