Commit Graph

2864 Commits

Author SHA1 Message Date
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
Victor Fonseca
235287810e coverity/74362: Initialized Array using ARRAY_DICT_INIT 2014-11-01 18:47:09 -02: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
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
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
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
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
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
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
c95bc3349b input: Fix conversion error in convert_input()
The `rbuffer_consumed` was being passed a consumed count from another buffer,
causing integer overflow in `rbuffer_relocate`.

Fixes #1343
2014-10-28 10:21:05 -03:00
Thiago de Arruda
4d70fe89bf msgpack-rpc: Terminate server->client calls when the channel closes 2014-10-28 08:54:44 -03:00
Thiago de Arruda
3cacdae044 channel: fix REQ definition for msgpack-rpc logging 2014-10-28 08:54:24 -03:00
Scott Prager
ba527b6f34 version: Mark patch 430 NA.
Not relevant because we always compile with +conceal.
2014-10-25 14:53:32 -04:00
Scott Prager
d14c124847 vim-patch:7.4.433
Problem:    Test 75 fails on MS-Windows.
Solution:   Use ":normal" instead of feedkeys(). (Michael Soyka)

https://code.google.com/p/vim/source/detail?r=v7-4-433
2014-10-25 14:52:29 -04:00
Thiago de Arruda
64844b7312 msgpack-rpc: Improve logging of msgpack-rpc messages
- Expose more logging control from the log.c module(get log stream and omit
  newlines)
- Remove logging from the generated functions in msgpack-gen.lua
- Refactor channel.c/helpers.c to log every msgpack-rpc payload using
  msgpack_object_print(a helper function from msgpack.h)
- Remove the api_stringify function, it was only useful for logging msgpack-rpc
  which is now handled by msgpack_object_print.
2014-10-23 21:46:03 -03:00
Thiago de Arruda
f05fead12e job: Only decrease refcount after settmode in job_wait
This is required to prevent the scenario explained by @akkartik in #1324
2014-10-23 21:19:08 -03:00
Thiago de Arruda
d561ba223d job: Refactor to ensure that all callbacks will be invoked
It's possible that a child process won't close it's standard streams, even after
it exits. This can be evidenced with the "xclip" program:

    :call system('xclip -i -selection clipboard', 'DATA')

Before this commit, the above command wouldn't return, even though the xclip
program had exited. That is because `xclip` wasn't closing it's stdout/stderr
streams, which would block pending_refs from ever reaching 0.

Now the job.c module was refactored to ensure all streams are closed when the
uv_process_t handle is closed.
2014-10-23 21:19:08 -03:00
Thiago de Arruda
9abcd9a4a0 msgpack-rpc: Fix error handling and leak in call_request_handler
Free the arguments array after sending the response and also avoid
double-sending responses in cases of errors.
2014-10-23 21:19:08 -03:00
Thiago de Arruda
d4f78127fb msgpack-rpc: Ensure stdio channels are properly closed
When stdio was closed, parse_msgpack was called with eof == true, with caused a
free_channel call. To ensure the correct behavior for all types of channels, the
close_channel must be called before free_channel.
2014-10-23 21:19:08 -03:00
Justin M. Keyes
d1e063a8af Merge pull request #1332 from splinterofchaos/listbr
vim-patch:7.4.422
2014-10-23 15:20:01 -04:00
Scott Prager
87cf661af6 vim-patch:7.4.422
Problem:    When using conceal with linebreak some text is not displayed
            correctly. (Grüner Gimpel)
Solution:   Check for conceal mode when using linebreak. (Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=v7-4-422
2014-10-23 14:37:55 -04:00
Scott Prager
089f977d18 version: update patches to 488 2014-10-23 13:18:02 -04:00
Scott Prager
95cdf32f24 version: More NA patches. 2014-10-23 13:18:02 -04:00
Scott Prager
46c610c9fe vim-patch:7.4.406
Problem:    Test 72 and 100 fail on MS-Windows.
Solution:   Set fileformat to unix in the tests. (Taro Muraoka)

https://code.google.com/p/vim/source/detail?r=v7-4-406
2014-10-23 13:18:02 -04:00
Nate Sullivan
d11fd1950f legacy tests: migrate test35. #1318
Migrate vim's integration test 35 (increment/decrement commands) to
lua/busted.
2014-10-22 15:28:26 -04:00
Thiago de Arruda
b31a74ad11 debug: Improve debugging of msgpack-rpc requests
- Add the api_stringify function to display API objects
- Use api_stringify to display request arguments and return values in DLOG
  statements.
2014-10-22 11:26:43 -03:00
Thiago de Arruda
4233446344 debug: Fix broken DLOG macro calls 2014-10-22 11:26:43 -03:00
Thiago de Arruda
cdfdfae322 input: Fix ctrl+c handling in convert_input 2014-10-22 09:58:17 -03:00
Thiago de Arruda
b49460f930 input: Don't remove Ctrl+C from the input_buffer 2014-10-21 21:20:31 -03:00
Thiago de Arruda
b6c9883169 event: Remove direct calls to uv_run from job.c/shell.c 2014-10-21 12:27:25 -03:00
Thiago de Arruda
79b7263f79 compilation: Add -Wconversion to more files and validate CONV_SOURCES
All files under the os, api and msgpack_rpc directories have -Wconversion
automatically applied. CONV_SOURCES is also checked for missing files(when
renaming, for example)
2014-10-21 11:05:49 -03:00
Thiago de Arruda
cf9571b7b1 api: Add FUNC_ATTR_DEFERRED attribute to a number of functions
Any function that can directly mutate the screen or execute vimscript had the
attribute applied.
2014-10-21 11:05:49 -03:00
Thiago de Arruda
72e3e57bf1 msgpack-rpc: Allow selective deferral API calls
Since all API functions now run immediately after a msgpack-rpc request is
parsed by libuv callbacks, a mechanism was added to override this behavior and
allow certain functions to run in Nvim main loop.

The mechanism is simple: Any API function tagged with the FUNC_ATTR_DEFERRED (a
"dummy" attribute only used by msgpack-gen.lua) will be called when Nvim main
loop receives a K_EVENT key.

To implement this mechanism it was necessary some restructuration on the
msgpack-rpc modules, especially in the msgpack-gen.lua script.
2014-10-21 11:05:49 -03:00