Commit Graph

1918 Commits

Author SHA1 Message Date
Thiago de Arruda
75a5674cd2 event: Ensure the event loop has been cleaned up in event_teardown
- Add input_teardown/signal_teardown to take care of closing signal/stdin
  handles.
- Call those functions in event_teardown, and ensure there are no active handles
  by entering an infinite loop when there are unclosed handles(think of this as
  an assertion that can't go unoticed on travis).
- Move event_teardown call to the end of mch_exit. That is required because
  event_poll may still be called in that function.
2014-11-02 16:47:50 -03:00
Thiago de Arruda
a1dd70b1d0 event: Reintroduce the immediate event queue
Commit @264e0d872c("Remove automatic event deferral") removed the immediate
event queue because event deferral now had to be explicit. The problem is that
while some events don't need to be deferred, they still can result in recursive
`event_poll` calls, and recursion is not supported by libuv. Examples of those
are msgpack-rpc requests while a server->client request is pending, or signals
which can call `mch_exit`(and that will result in `uv_run` calls).

To fix the problem, this reintroduces the immediate event queue for events that
can potentially result in event loop recursion. The non-deferred events are
still processed in `event_poll`, but only after `uv_run` returns.
2014-11-02 16:47:50 -03:00
Thiago de Arruda
e378965a44 event: Rename pending_events to deferred_events 2014-11-02 16:47:50 -03:00
Thiago de Arruda
5322333b47 server: Refactor to ensure server handles are always properly closed
If the server fails to start(due to used address for example), the
`server_start` function was freeing the handle memory before it was properly
removed from libuv event loop queue. Fix that by replacing the `free(server)`
call by `uv_close` call, which will take care of freeing the server on the next
event loop iteration.  Also replace `EMSG` calls by `ELOG`/`WLOG`.
2014-11-02 16:47:50 -03:00
Thiago de Arruda
d4f032a133 wstream: Memory allocation improvements
- Rename WriteData to WRequest
- Inline uv_write_t into WRequest, avoiding an extra allocation
- Manage WBuffer/WRequest instances using klib memory pools
2014-11-02 16:47:50 -03:00
Thiago de Arruda
0ffeb140a4 job: Simplify job_teardown function
Remove the current teardown logic and reuse the job top timers with
event_poll_until all jobs exit or are killed.
2014-11-02 16:47:50 -03:00
Justin M. Keyes
48847fbafc Merge pull request #951 from bfredl/curfix
api: window_set_cursor doesn't always update position.
2014-11-01 21:24:58 -04:00
Justin M. Keyes
92173edbc0 Merge pull request #1371 from GokuITA/coverity74362
coverity/74362: Initialized Array using ARRAY_DICT_INIT
2014-11-01 18:15:23 -04:00
Victor Fonseca
235287810e coverity/74362: Initialized Array using ARRAY_DICT_INIT 2014-11-01 18:47:09 -02:00
Björn Linse
d6da424758 test/api: add test for set_cursor always updating the screen 2014-11-01 12:05:36 +01:00
Björn Linse
b34705bf5f api/window_set_cursor: make sure cursor line is visible.
Previously, the cursor could be left outside the visible range if window
is not the current window
2014-11-01 12:04:47 +01:00
Thiago de Arruda
591391b9bc Merge PR #1365 'Refactor os_call_shell to use os_system' 2014-10-31 22:56:53 -03:00
Thiago de Arruda
d878569dc7 job: Fix job_wait to properly cleanup the job when it exits. 2014-10-31 22:52:10 -03:00
Thiago de Arruda
d5d98f14b6 job: Refactor how job kill timeouts are handled
Use a timer to periodically compare the current HR time against the HR time of
when `job_stop` was called. After 1 second, send SIGTERM, after 2 seconds, send
SIGKILL. The timer is only active when there's at least one `job_stop` call
pending.
2014-10-31 22:52:10 -03:00
Thiago de Arruda
01761cdd32 job/shell: Refactor os_call_shell/os_system to share code 2014-10-31 22:52:10 -03:00
Thiago de Arruda
88c4747556 rstream: Add rstream_buffer method to get a reference to RBuffer 2014-10-31 22:52:10 -03:00
Thiago de Arruda
68015367a0 shell: Rename dyn_buffer_t to DynamicBuffer
To follow our coding conventions
2014-10-31 22:52:10 -03:00
Thiago de Arruda
c92d17b4aa job: Let job_start callers to selectively ignore stdio
Passing NULL as the callback for stdout/stderr will result in job_start ignoring
stdout/stderr, respectively. A 'writable' boolean argument was also added, and
when false `job_start` will ignore stdin.

Also, refactor os_system to allow passing NULL as the `output` argument.
2014-10-31 22:52:10 -03:00
Thiago de Arruda
25e26e0056 job: Close libuv handles when uv_spawn fails
Commit @709685b4612f4 removed the close_job_* calls when uv_spawn fails because
of memory errors when trying to cleanup unitialized {R,W}Stream instances, but
the uv_pipe_t instances must be closed because they are added to the event loop
queue by previous `uv_pipe_init()` calls
2014-10-31 22:52:10 -03:00
Justin M. Keyes
a8656ed50a Merge pull request #1367 from elmart/python-setup-fix
Fix python setup: Fix issue for users not using python.
2014-10-31 15:43:42 -04:00
Eliseo Martínez
cdaa417e8c Fix python setup: Fix issue for users not using python. 2014-10-31 20:31:37 +01:00
Justin M. Keyes
1b9e4d7731 Merge pull request #1364 from fwalch/cla
CONTRIBUTING.md: Add link to CLA.
2014-10-31 11:30:39 -04:00
Thiago de Arruda
822d813575 Merge PR #1358 'Fix python setup' 2014-10-31 07:45:18 -03:00
Eliseo Martínez
f10779fb7a Fix python setup: Make sure python version on user's path is picked.
Problem:  executable() was detecting python on user's path, but
          system() was executing system-level python.

Solution: Make sure python version on user's path is executed.
          Use exepath() to force system() to do so.
2014-10-31 07:44:10 -03:00
Eliseo Martínez
3fb5cdcb3f Fix python setup: Report errors.
No error indication was being given if something went wrong while
setting up python.
2014-10-31 07:44:10 -03:00
Florian Walch
89cccf2826 CONTRIBUTING.md: Add link to CLA. 2014-10-31 10:52:57 +01:00
Justin M. Keyes
4b0f8f2a4d Merge pull request #1349 from stefan991/fix-cimport-pragma-pack
Fix handling of `#pragma pack` in `cimport` lua helper
2014-10-30 14:32:03 -04:00
Stefan Hoffmann
972fc30599 unittest: increase number of retries in cimport 2014-10-30 19:05:39 +01:00
Stefan Hoffmann
741cb5be08 unittest: fix handling of pragma pack in cimport 2014-10-30 19:05:39 +01:00
Justin M. Keyes
34ec5a9f81 Merge pull request #1361 from splinterofchaos/silent-system
Mark patch 427 as included.
2014-10-30 11:06:28 -04:00
Scott Prager
e94c9db43d Mark patch 427 as included. (#1357) 2014-10-30 09:57:04 -04:00
Justin M. Keyes
181e652ee1 Merge pull request #1312 from GokuITA/coverity1289
coverity/71507: Unchecked return value (CHECKED_RETURN)
2014-10-30 02:12:28 -04:00
Kartik Agaram
a62998ea08 CONTRIBUTING.md: more guidance on cosmetic changes #1346 2014-10-30 05:58:40 +00:00
Justin M. Keyes
6b47e13ee0 fs.c: add FUNC_ATTR_NONNULL_ALL to all functions 2014-10-30 05:17:12 +00:00
Thiago de Arruda
713c3ae5ae Merge PR #1357 'Fixes to input/job modules' 2014-10-29 23:43:35 -03:00
Thiago de Arruda
9e41dd07e4 travis: Make sure valgrind report is shown on test failures 2014-10-29 23:33:10 -03:00
Thiago de Arruda
3800b24c5a api: Add vim_input function and mark vim_feedkeys as deferred
The `vim_feedkeys` must be deferred because it can potentially free the buffer
passed to `os_inchar`(which in turns calls `vim_feedkeys` indirectly).

The new `vim_input` function can be used to emulate user input(Since it does not
mess with the typeahead, it is safe to execute without deferring).
2014-10-29 23:33:10 -03:00
Thiago de Arruda
94527245a5 input: Fix sizes of input/read buffers
Input buffer must be bigger than read buffer to ensure it always has space for
converted data.
2014-10-29 23:32:55 -03:00
Thiago de Arruda
4fd9ee4a6b input/job: process ctrl+c and do conversion in the read callback
- Extract `process_interrupts` out of `convert_input`
- Instead of waiting for os_breakcheck/os_inchar calls, call `convert_input`
  and `process_interrupts` directly from the read callback in input.c.
- Remove the `settmode` calls from `job_wait`. Now that interrupts are
  processed in the event loop, there's no need to set the terminal to cooked
  which introduces other problems(ref 7.4.427)
2014-10-29 23:08:43 -03:00
Justin M. Keyes
49d5ed5591 fix #1027: :wundo segfault in new, non-empty buffer 2014-10-26 20:03:02 +00:00
Justin M. Keyes
3fc542b45b Merge pull request #1347 from splinterofchaos/433
vim-patch:7.4.433
2014-10-29 12:09:02 -04:00
Justin M. Keyes
72c54db443 Merge #1342 "signs bugfix" 2014-10-28 23:14:15 -04:00
Kartik K. Agaram
250298884b fix 'sign unplace id'
Since the introduction of the FOR_ALL_BUFFERS macro, 'sign unplace id'
without a buffer was only removing the sign from the first buffer rather
than all buffers, as described in the documentation.

  :help sign-unplace

--

modeline discussion: https://github.com/akkartik/neovim/commit/7863c247db#commitcomment-8342590
2014-10-28 23:12:41 -04:00
Thiago de Arruda
94f59fc9be api: Implement vim_command_output function
This function can be used by API clients to execute a command and capture the
output.
2014-10-28 23:12:41 -04:00
Thiago de Arruda
c28adf15e6 Merge PR #1350 'valgrind/jobs: Fix invalid reads.' 2014-10-28 14:11:32 -03:00
Scott Prager
7203796c54 test/job: Implement some basic jobs tests. 2014-10-28 14:09:28 -03:00
Scott Prager
860b6f6f05 test/shell: Add failure tests for system(). 2014-10-28 14:09:28 -03:00
Scott Prager
dd4263a0c8 job_start: Do not close in/out/err on error.
The streams job_close_*() reference have not been initialized by the
time we call uv_spawn() and libuv closes these pipes for us when spawn()
fails.
2014-10-28 14:09:28 -03:00
Scott Prager
d10e83fec2 job/valgrind: Fix invalid reads/missing free.
The JobEvent structure may refer to a job after it has been freed. Apply
@tarruda's patch to extract the job data before pushing the event.

Also, fix the type, "data" -> "job", in on_job_exit() and free the job
name in the last job event.
2014-10-28 14:09:28 -03:00
Thiago de Arruda
7797991ba5 Merge PR #1354 'Fixes to channel.c, input.c and helpers.lua' 2014-10-28 11:04:55 -03:00