aboutsummaryrefslogtreecommitdiff
path: root/src/nvim
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-09-28 20:59:06 +0200
committerGitHub <noreply@github.com>2024-09-28 20:59:06 +0200
commit69553f7bf55c060733553d96a068c1104c885bce (patch)
treeb28b26aacb9a71348ba60ba375d246d869ca09bb /src/nvim
parentd5f6f61879bac3ac90512efe05d68e3500125a08 (diff)
parent76163590f0b1a39e281446b6b6b17d00b0dcae15 (diff)
downloadrneovim-69553f7bf55c060733553d96a068c1104c885bce.tar.gz
rneovim-69553f7bf55c060733553d96a068c1104c885bce.tar.bz2
rneovim-69553f7bf55c060733553d96a068c1104c885bce.zip
Merge pull request #30558 from bfredl/noklist
refactor(event): change last use of klist to kvec
Diffstat (limited to 'src/nvim')
-rw-r--r--src/nvim/event/loop.c4
-rw-r--r--src/nvim/event/loop.h9
-rw-r--r--src/nvim/event/proc.c29
-rw-r--r--src/nvim/os/pty_proc_unix.c5
4 files changed, 22 insertions, 25 deletions
diff --git a/src/nvim/event/loop.c b/src/nvim/event/loop.c
index e1ebcecbd6..15d993cc62 100644
--- a/src/nvim/event/loop.c
+++ b/src/nvim/event/loop.c
@@ -20,7 +20,7 @@ void loop_init(Loop *loop, void *data)
loop->recursive = 0;
loop->closing = false;
loop->uv.data = loop;
- loop->children = kl_init(WatcherPtr);
+ kv_init(loop->children);
loop->events = multiqueue_new_parent(loop_on_put, loop);
loop->fast_events = multiqueue_new_child(loop->events);
loop->thread_events = multiqueue_new_parent(NULL, NULL);
@@ -187,7 +187,7 @@ bool loop_close(Loop *loop, bool wait)
multiqueue_free(loop->fast_events);
multiqueue_free(loop->thread_events);
multiqueue_free(loop->events);
- kl_destroy(WatcherPtr, loop->children);
+ kv_destroy(loop->children);
return rv;
}
diff --git a/src/nvim/event/loop.h b/src/nvim/event/loop.h
index b86e83de3c..563b254a0b 100644
--- a/src/nvim/event/loop.h
+++ b/src/nvim/event/loop.h
@@ -3,15 +3,10 @@
#include <stdbool.h>
#include <uv.h>
-#include "klib/klist.h"
+#include "klib/kvec.h"
#include "nvim/event/defs.h" // IWYU pragma: keep
#include "nvim/types_defs.h" // IWYU pragma: keep
-typedef void *WatcherPtr;
-
-#define NOOP(x)
-KLIST_INIT(WatcherPtr, WatcherPtr, NOOP)
-
struct loop {
uv_loop_t uv;
MultiQueue *events;
@@ -27,7 +22,7 @@ struct loop {
MultiQueue *fast_events;
// used by process/job-control subsystem
- klist_t(WatcherPtr) *children;
+ kvec_t(Proc *) children;
uv_signal_t children_watcher;
uv_timer_t children_kill_timer;
diff --git a/src/nvim/event/proc.c b/src/nvim/event/proc.c
index 808bf794f0..5ae3bd8c2d 100644
--- a/src/nvim/event/proc.c
+++ b/src/nvim/event/proc.c
@@ -3,7 +3,6 @@
#include <signal.h>
#include <uv.h>
-#include "klib/klist.h"
#include "nvim/event/libuv_proc.h"
#include "nvim/event/loop.h"
#include "nvim/event/multiqueue.h"
@@ -123,7 +122,7 @@ int proc_spawn(Proc *proc, bool in, bool out, bool err)
proc->internal_exit_cb = on_proc_exit;
proc->internal_close_cb = decref;
proc->refcount++;
- kl_push(WatcherPtr, proc->loop->children, proc);
+ kv_push(proc->loop->children, proc);
DLOG("new: pid=%d exepath=[%s]", proc->pid, proc_get_exepath(proc));
return 0;
}
@@ -131,8 +130,8 @@ int proc_spawn(Proc *proc, bool in, bool out, bool err)
void proc_teardown(Loop *loop) FUNC_ATTR_NONNULL_ALL
{
proc_is_tearing_down = true;
- kl_iter(WatcherPtr, loop->children, current) {
- Proc *proc = (*current)->data;
+ for (size_t i = 0; i < kv_size(loop->children); i++) {
+ Proc *proc = kv_A(loop->children, i);
if (proc->detach || proc->type == kProcTypePty) {
// Close handles to process without killing it.
CREATE_EVENT(loop->events, proc_close_handles, proc);
@@ -143,7 +142,7 @@ void proc_teardown(Loop *loop) FUNC_ATTR_NONNULL_ALL
// Wait until all children exit and all close events are processed.
LOOP_PROCESS_EVENTS_UNTIL(loop, loop->events, -1,
- kl_empty(loop->children) && multiqueue_empty(loop->events));
+ kv_size(loop->children) == 0 && multiqueue_empty(loop->events));
pty_proc_teardown(loop);
}
@@ -254,8 +253,8 @@ static void children_kill_cb(uv_timer_t *handle)
{
Loop *loop = handle->loop->data;
- kl_iter(WatcherPtr, loop->children, current) {
- Proc *proc = (*current)->data;
+ for (size_t i = 0; i < kv_size(loop->children); i++) {
+ Proc *proc = kv_A(loop->children, i);
bool exited = (proc->status >= 0);
if (exited || !proc->stopped_time) {
continue;
@@ -294,15 +293,19 @@ static void decref(Proc *proc)
}
Loop *loop = proc->loop;
- kliter_t(WatcherPtr) **node = NULL;
- kl_iter(WatcherPtr, loop->children, current) {
- if ((*current)->data == proc) {
- node = current;
+ size_t i;
+ for (i = 0; i < kv_size(loop->children); i++) {
+ Proc *current = kv_A(loop->children, i);
+ if (current == proc) {
break;
}
}
- assert(node);
- kl_shift_at(WatcherPtr, loop->children, node);
+ assert(i < kv_size(loop->children)); // element found
+ if (i < kv_size(loop->children) - 1) {
+ memmove(&kv_A(loop->children, i), &kv_A(loop->children, i + 1),
+ sizeof(&kv_A(loop->children, i)) * (kv_size(loop->children) - (i + 1)));
+ }
+ kv_size(loop->children)--;
CREATE_EVENT(proc->events, proc_close_event, proc);
}
diff --git a/src/nvim/os/pty_proc_unix.c b/src/nvim/os/pty_proc_unix.c
index e629b328fd..3bca065d2d 100644
--- a/src/nvim/os/pty_proc_unix.c
+++ b/src/nvim/os/pty_proc_unix.c
@@ -30,7 +30,6 @@
#endif
#include "auto/config.h"
-#include "klib/klist.h"
#include "nvim/eval/typval.h"
#include "nvim/event/defs.h"
#include "nvim/event/loop.h"
@@ -387,8 +386,8 @@ static void chld_handler(uv_signal_t *handle, int signum)
Loop *loop = handle->loop->data;
- kl_iter(WatcherPtr, loop->children, current) {
- Proc *proc = (*current)->data;
+ for (size_t i = 0; i < kv_size(loop->children); i++) {
+ Proc *proc = kv_A(loop->children, i);
do {
pid = waitpid(proc->pid, &stat, WNOHANG);
} while (pid < 0 && errno == EINTR);