| Commit message (Collapse) | Author | Age |
| | |
|
| |\ |
|
| | |
| |
| |
| |
| |
| | |
Compiling with macro -DEXITFREE opens a code path on which the event
loop is used after it was teared down, because not all close events
were processed yet.
|
| | |
| |
| |
| |
| |
| |
| | |
nvim blocking can be tested with "nvim +te +'!xclip' +qa"
By closing all handles for a pty process, we unblock the event loop if
the process has not terminated yet.
|
| |\ \
| | |
| | | |
Fix for missing output (#4569, ...)
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The only data loss should be, if a process forked a child that keeps
sending data after the parent terminated.
While not in teardown mode we could keep reading child data, but then
`:!cmd` would block after `cmd` exited. In teardown mode we want to exit
nvim so we cannot keep reading child data.
|
| | | |
| | |
| | |
| | |
| | |
| | | |
* Get system buffer size for upper data limit. Otherwise data loss
if this buffer is too big.
* Test whether teardown needs special handling.
|
| | |/
| |
| |
| |
| | |
For a terminating process, it's output streams could be closed,
before all data is read.
|
| | | |
|
| |/ |
|
| |
|
|
| |
Originally there were 128 new errors, so I thought this is a good idea to fix
all of them. Of course, this commit also fixes many suppressed errors.
|
| |
|
|
| |
These will automatically recieve SIGHUP on closing PTY master.
|
| | |
|
| | |
|
| |
|
|
| |
ref: #3188
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The new event processing architecture changed `jobwait()` semantics: Only one
job is processed at time since process_wait only focuses on one queue.
This fixes the problem with a few changes:
- Allow the event queue polled by `process_wait` to be overriden by a new
argument.
- Allow the parent queue to be overriden with `queue_replace_parent`
- Create a temporary queue that serves as the parent for all jobs passed to
`jobwait()`
|
| |
|
|
|
|
|
|
|
|
| |
- Improve the implementation of deferred/immediate events.
- Use the new queue module to change how/when events are queued/processed by
giving a private queue to each emitter.
- Immediate events(which only exist to break uv_run recursion) are now
represented in the `loop->fast_events` queue.
- Events pushed to child queues are propagated to the event loop main queue and
processed as K_EVENT keys.
|
| |
|
|
|
| |
Change the API so that it is passed to {uv,pty}_process_init instead of
`process_spawn`.
|
|
|
- New libuv/pty process abstraction with simplified API and no globals.
- Remove nvim/os/job*. Jobs are now a concept that apply only to programs
spawned by vimscript job* functions.
- Refactor shell.c/channel.c to use the new module, which brings a number of
advantages:
- Simplified API, less code
- No slots in the user job table are used
- Not possible to acidentally receive data from vimscript
- Implement job table in eval.c, which is now a hash table with unilimited job
slots and unique job ids.
|