src: replace QUEUE_SPLIT with QUEUE_MOVE
All uses of QUEUE_SPLIT in libuv split the list at the head so introduce a QUEUE_MOVE macro that automates that. PR-URL: https://github.com/libuv/libuv/pull/565 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
This commit is contained in:
parent
26917ddf7a
commit
1867a6c1ce
11
src/queue.h
11
src/queue.h
@ -66,6 +66,17 @@ typedef void *QUEUE[2];
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define QUEUE_MOVE(h, n) \
|
||||
do { \
|
||||
if (QUEUE_EMPTY(h)) \
|
||||
QUEUE_INIT(n); \
|
||||
else { \
|
||||
QUEUE* q = QUEUE_HEAD(h); \
|
||||
QUEUE_SPLIT(h, q, n); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define QUEUE_INSERT_HEAD(h, q) \
|
||||
do { \
|
||||
QUEUE_NEXT(q) = QUEUE_NEXT(h); \
|
||||
|
||||
@ -223,13 +223,8 @@ void uv__work_done(uv_async_t* handle) {
|
||||
int err;
|
||||
|
||||
loop = container_of(handle, uv_loop_t, wq_async);
|
||||
QUEUE_INIT(&wq);
|
||||
|
||||
uv_mutex_lock(&loop->wq_mutex);
|
||||
if (!QUEUE_EMPTY(&loop->wq)) {
|
||||
q = QUEUE_HEAD(&loop->wq);
|
||||
QUEUE_SPLIT(&loop->wq, q, &wq);
|
||||
}
|
||||
QUEUE_MOVE(&loop->wq, &wq);
|
||||
uv_mutex_unlock(&loop->wq_mutex);
|
||||
|
||||
while (!QUEUE_EMPTY(&wq)) {
|
||||
|
||||
@ -721,9 +721,7 @@ static int uv__run_pending(uv_loop_t* loop) {
|
||||
if (QUEUE_EMPTY(&loop->pending_queue))
|
||||
return 0;
|
||||
|
||||
QUEUE_INIT(&pq);
|
||||
q = QUEUE_HEAD(&loop->pending_queue);
|
||||
QUEUE_SPLIT(&loop->pending_queue, q, &pq);
|
||||
QUEUE_MOVE(&loop->pending_queue, &pq);
|
||||
|
||||
while (!QUEUE_EMPTY(&pq)) {
|
||||
q = QUEUE_HEAD(&pq);
|
||||
|
||||
@ -149,11 +149,7 @@ static void (*pFSEventStreamStop)(FSEventStreamRef);
|
||||
int err; \
|
||||
uv_mutex_lock(&(handle)->cf_mutex); \
|
||||
/* Split-off all events and empty original queue */ \
|
||||
QUEUE_INIT(&events); \
|
||||
if (!QUEUE_EMPTY(&(handle)->cf_events)) { \
|
||||
q = QUEUE_HEAD(&(handle)->cf_events); \
|
||||
QUEUE_SPLIT(&(handle)->cf_events, q, &events); \
|
||||
} \
|
||||
QUEUE_MOVE(&(handle)->cf_events, &events); \
|
||||
/* Get error (if any) and zero original one */ \
|
||||
err = (handle)->cf_error; \
|
||||
(handle)->cf_error = 0; \
|
||||
@ -735,17 +731,14 @@ static void uv__cf_loop_cb(void* arg) {
|
||||
|
||||
loop = arg;
|
||||
state = loop->cf_state;
|
||||
QUEUE_INIT(&split_head);
|
||||
|
||||
uv_mutex_lock(&loop->cf_mutex);
|
||||
if (!QUEUE_EMPTY(&loop->cf_signals)) {
|
||||
QUEUE* split_pos = QUEUE_HEAD(&loop->cf_signals);
|
||||
QUEUE_SPLIT(&loop->cf_signals, split_pos, &split_head);
|
||||
}
|
||||
QUEUE_MOVE(&loop->cf_signals, &split_head);
|
||||
uv_mutex_unlock(&loop->cf_mutex);
|
||||
|
||||
while (!QUEUE_EMPTY(&split_head)) {
|
||||
item = QUEUE_HEAD(&split_head);
|
||||
QUEUE_REMOVE(item);
|
||||
|
||||
s = QUEUE_DATA(item, uv__cf_loop_signal_t, member);
|
||||
|
||||
@ -755,7 +748,6 @@ static void uv__cf_loop_cb(void* arg) {
|
||||
else
|
||||
uv__fsevents_reschedule(s->handle);
|
||||
|
||||
QUEUE_REMOVE(item);
|
||||
uv__free(s);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user