Age | Commit message (Collapse) | Author |
|
Banging data to a local port was always synchronous prior to
Erlang/OTP R16, and these modules relied on that behavior to report
that data had successfully been enqueued on the stdout port. This
would cause data to be silently dropped if the command didn't run
synchronously and the emulator halted before the port received the
data.
This was fairly rare in practice, but could be seen from time to
time on Windows with escripts that ended with a call to
io:format/2, such as the one used by the
escript_SUITE:create_and_extract test.
This is a minimal band-aid to make things reliable again. A more
complete fix would add explicit synchronization with the port.
|
|
The -name option already computes a default
hostname if none is given. This PR adds the
same behaviour to -remsh. Now we can run:
erl -name foo -remsh bar
erl -sname foo -remsh bar
This simplifies deployment scripts as otherwise
they have to compute the hostname by hand or
start an Erlang VM instance only to do so.
|
|
to increase the probablity of a nice badarg
from erlang:port_control.
|
|
|
|
Otherwise processes doing io could get stuck.
See ERL-472.
|
|
|
|
|
|
|
|
Also make it possible to copy text buffer from current group
process to the JCL mode
|
|
The user_drv process can crash if ctrl-y is pressed when in switch command mode (ctrl-g).
This is due to switch mode using edlin to parse the input.
And edlin uses the process dictionary to store the kill_buffer.
However the kill_buffer is undefined if not initialized by edlin:init/0
which makes the user_drv process crash since edlin is calling list:reverse/2 with undefined.
Fix calles edlin:init/0 once before server_loop is entered.
|
|
This patch fixes an issue where io:columns/0 times out when invoked from
any application callback (or any supervisor/supervised module since the
group leader is inherited).
To reproduce the issue, one must simply call io:columns() from any
application callback. You will notice the process will block for 2 seconds
which then times out and returns {:error, :enotsup}.
Note this bug only happens inside the erlang shell (using -noshell or
escripts do not trigger the bug).
To fix the bug, it is important to understand how io requests flow from
application callback processes. Here are the steps followed:
1. Since io:columns/1 is timing out, the first step is to find out who is the
group leader for the application callback process. Using process_info/1, we
can see the parent process is the application_master and handles
io_requests by delegating them to the group_leader.
2. By inspecting the application_master process, we can find the group_leader
the message is sent is the registered process named user. The process is
running the group module which does handle io:columns/1 requests delegating
them to user_drv process.
3. The user_drv process does handle tty_geometry requests, except that a
clause above ends up short-circuiting all tty_geometry requests from the
user process.
This patch moves the user clause below the specific driver messages.
OTP-12241
|
|
Added a put_chars_sync to the protocol that can be used to
talk to user_drv and made group use it. This is needed in order
to guarantee that bytes has been pushed to the tty port when
doing something like this:
io:format("halting\n"),erlang:halt(0).
Before this change the halting message could be lost in the message
queue of the user_drv process, this is no longer possible.
This commit also fixes ssh_cli as that plugs itself in as a user_drv
process.
OTP-12240
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|