CLEANUP: lists/tree-wide: rename some list operations to avoid some confusion

The current "ADD" vs "ADDQ" is confusing because when thinking in terms
of appending at the end of a list, "ADD" naturally comes to mind, but
here it does the opposite, it inserts. Several times already it's been
incorrectly used where ADDQ was expected, the latest of which was a
fortunate accident explained in 6fa922562 ("CLEANUP: stream: explain
why we queue the stream at the head of the server list").

Let's use more explicit (but slightly longer) names now:

   LIST_ADD        ->       LIST_INSERT
   LIST_ADDQ       ->       LIST_APPEND
   LIST_ADDED      ->       LIST_INLIST
   LIST_DEL        ->       LIST_DELETE

The same is true for MT_LISTs, including their "TRY" variant.
LIST_DEL_INIT keeps its short name to encourage to use it instead of the
lazier LIST_DELETE which is often less safe.

The change is large (~674 non-comment entries) but is mechanical enough
to remain safe. No permutation was performed, so any out-of-tree code
can easily map older names to new ones.

The list doc was updated.
This commit is contained in:
Willy Tarreau 2021-04-21 07:32:39 +02:00
parent 3b9cdf1cb7
commit 2b71810cb3
83 changed files with 830 additions and 929 deletions

View File

@ -91,7 +91,7 @@ static int _51d_property_name_list(char **args, int section_type, struct proxy *
while (*(args[cur_arg])) { while (*(args[cur_arg])) {
name = calloc(1, sizeof(*name)); name = calloc(1, sizeof(*name));
name->name = strdup(args[cur_arg]); name->name = strdup(args[cur_arg]);
LIST_ADDQ(&global_51degrees.property_names, &name->list); LIST_APPEND(&global_51degrees.property_names, &name->list);
++cur_arg; ++cur_arg;
} }
@ -730,7 +730,7 @@ static void deinit_51degrees(void)
ha_free(&global_51degrees.data_file_path); ha_free(&global_51degrees.data_file_path);
list_for_each_entry_safe(_51d_prop_name, _51d_prop_nameb, &global_51degrees.property_names, list) { list_for_each_entry_safe(_51d_prop_name, _51d_prop_nameb, &global_51degrees.property_names, list) {
LIST_DEL(&_51d_prop_name->list); LIST_DELETE(&_51d_prop_name->list);
free(_51d_prop_name); free(_51d_prop_name);
} }

View File

@ -53,7 +53,7 @@
#define FLT_OT_RUN_ONCE(f) do { static bool __f = 1; if (__f) { __f = 0; f; } } while (0) #define FLT_OT_RUN_ONCE(f) do { static bool __f = 1; if (__f) { __f = 0; f; } } while (0)
#define FLT_OT_LIST_ISVALID(a) (((a) != NULL) && ((a)->n != NULL) && ((a)->p != NULL)) #define FLT_OT_LIST_ISVALID(a) (((a) != NULL) && ((a)->n != NULL) && ((a)->p != NULL))
#define FLT_OT_LIST_DEL(a) do { if (FLT_OT_LIST_ISVALID(a)) LIST_DEL(a); } while (0) #define FLT_OT_LIST_DEL(a) do { if (FLT_OT_LIST_ISVALID(a)) LIST_DELETE(a); } while (0)
#define FLT_OT_LIST_DESTROY(t,h) \ #define FLT_OT_LIST_DESTROY(t,h) \
do { \ do { \
struct flt_ot_conf_##t *_ptr, *_back; \ struct flt_ot_conf_##t *_ptr, *_back; \

View File

@ -67,7 +67,7 @@ static void *flt_ot_conf_hdr_init(size_t size, const char *id, int linenum, stru
retptr->cfg_line = linenum; retptr->cfg_line = linenum;
if (head != NULL) if (head != NULL)
LIST_ADDQ(head, &(retptr->list)); LIST_APPEND(head, &(retptr->list));
} else { } else {
FLT_OT_ERR("out of memory"); FLT_OT_ERR("out of memory");
} }
@ -680,7 +680,7 @@ void flt_ot_conf_tracer_free(struct flt_ot_conf_tracer **ptr)
} }
FLT_OT_DBG(2, "- deleting proxy_log.logsrvs list %s", flt_ot_list_debug(&((*ptr)->proxy_log.logsrvs))); FLT_OT_DBG(2, "- deleting proxy_log.logsrvs list %s", flt_ot_list_debug(&((*ptr)->proxy_log.logsrvs)));
list_for_each_entry_safe(logsrv, logsrvback, &((*ptr)->proxy_log.logsrvs), list) { list_for_each_entry_safe(logsrv, logsrvback, &((*ptr)->proxy_log.logsrvs), list) {
LIST_DEL(&(logsrv->list)); LIST_DELETE(&(logsrv->list));
FLT_OT_FREE(logsrv); FLT_OT_FREE(logsrv);
} }
FLT_OT_LIST_DESTROY(ph_group, &((*ptr)->ph_groups)); FLT_OT_LIST_DESTROY(ph_group, &((*ptr)->ph_groups));

View File

@ -256,7 +256,7 @@ struct flt_ot_scope_span *flt_ot_scope_span_init(struct flt_ot_runtime_context *
retptr->ref_type = ref_type; retptr->ref_type = ref_type;
retptr->ref_span = ref_span; retptr->ref_span = ref_span;
retptr->ref_ctx = ref_ctx; retptr->ref_ctx = ref_ctx;
LIST_ADD(&(rt_ctx->spans), &(retptr->list)); LIST_INSERT(&(rt_ctx->spans), &(retptr->list));
FLT_OT_DBG_SCOPE_SPAN("new span ", retptr); FLT_OT_DBG_SCOPE_SPAN("new span ", retptr);
@ -352,7 +352,7 @@ struct flt_ot_scope_context *flt_ot_scope_context_init(struct flt_ot_runtime_con
retptr->id_len = id_len; retptr->id_len = id_len;
retptr->smp_opt_dir = dir; retptr->smp_opt_dir = dir;
retptr->context = span_ctx; retptr->context = span_ctx;
LIST_ADD(&(rt_ctx->contexts), &(retptr->list)); LIST_INSERT(&(rt_ctx->contexts), &(retptr->list));
FLT_OT_DBG_SCOPE_CONTEXT("new context ", retptr); FLT_OT_DBG_SCOPE_CONTEXT("new context ", retptr);

View File

@ -204,7 +204,7 @@ static int ha_wurfl_cfg_information_list(char **args, int section_type, struct p
wi->data.name = strdup(args[argIdx]); wi->data.name = strdup(args[argIdx]);
wi->data.type = HA_WURFL_DATA_TYPE_UNKNOWN; wi->data.type = HA_WURFL_DATA_TYPE_UNKNOWN;
wi->data.func_callback = NULL; wi->data.func_callback = NULL;
LIST_ADDQ(&global_wurfl.information_list, &wi->list); LIST_APPEND(&global_wurfl.information_list, &wi->list);
++argIdx; ++argIdx;
} }
@ -232,7 +232,7 @@ static int ha_wurfl_cfg_patch_file_list(char **args, int section_type, struct pr
} }
wp->patch_file_path = strdup(args[argIdx]); wp->patch_file_path = strdup(args[argIdx]);
LIST_ADDQ(&global_wurfl.patch_file_list, &wp->list); LIST_APPEND(&global_wurfl.patch_file_list, &wp->list);
++argIdx; ++argIdx;
} }
@ -410,12 +410,12 @@ static void ha_wurfl_deinit(void)
ha_free(&global_wurfl.cache_size); ha_free(&global_wurfl.cache_size);
list_for_each_entry_safe(wi, wi2, &global_wurfl.information_list, list) { list_for_each_entry_safe(wi, wi2, &global_wurfl.information_list, list) {
LIST_DEL(&wi->list); LIST_DELETE(&wi->list);
free(wi); free(wi);
} }
list_for_each_entry_safe(wp, wp2, &global_wurfl.patch_file_list, list) { list_for_each_entry_safe(wp, wp2, &global_wurfl.patch_file_list, list) {
LIST_DEL(&wp->list); LIST_DELETE(&wp->list);
free(wp); free(wp);
} }

View File

@ -44,10 +44,10 @@
#define LIST_HEAD_INIT(l) { &l, &l } #define LIST_HEAD_INIT(l) { &l, &l }
/* adds an element at the beginning of a list ; returns the element */ /* adds an element at the beginning of a list ; returns the element */
#define LIST_ADD(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); }) #define LIST_INSERT(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); })
/* adds an element at the end of a list ; returns the element */ /* adds an element at the end of a list ; returns the element */
#define LIST_ADDQ(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); }) #define LIST_APPEND(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); })
/* adds the contents of a list <old> at the beginning of another list <new>. The old list head remains untouched. */ /* adds the contents of a list <old> at the beginning of another list <new>. The old list head remains untouched. */
#define LIST_SPLICE(new, old) do { \ #define LIST_SPLICE(new, old) do { \
@ -71,10 +71,10 @@
} while (0) } while (0)
/* removes an element from a list and returns it */ /* removes an element from a list and returns it */
#define LIST_DEL(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); }) #define LIST_DELETE(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); })
/* removes an element from a list, initializes it and returns it. /* removes an element from a list, initializes it and returns it.
* This is faster than LIST_DEL+LIST_INIT as we avoid reloading the pointers. * This is faster than LIST_DELETE+LIST_INIT as we avoid reloading the pointers.
*/ */
#define LIST_DEL_INIT(el) ({ \ #define LIST_DEL_INIT(el) ({ \
typeof(el) __ret = (el); \ typeof(el) __ret = (el); \
@ -98,7 +98,7 @@
/* checks if the list element <el> was added to a list or not. This only /* checks if the list element <el> was added to a list or not. This only
* works when detached elements are reinitialized (using LIST_DEL_INIT) * works when detached elements are reinitialized (using LIST_DEL_INIT)
*/ */
#define LIST_ADDED(el) ((el)->n != (el)) #define LIST_INLIST(el) ((el)->n != (el))
/* returns a pointer of type <pt> to a structure following the element /* returns a pointer of type <pt> to a structure following the element
* which contains list head <lh>, which is known as element <el> in * which contains list head <lh>, which is known as element <el> in
@ -224,7 +224,7 @@
* Returns 1 if we added the item, 0 otherwise (because it was already in a * Returns 1 if we added the item, 0 otherwise (because it was already in a
* list). * list).
*/ */
#define MT_LIST_TRY_ADD(_lh, _el) \ #define MT_LIST_TRY_INSERT(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -283,7 +283,7 @@
* Returns 1 if we added the item, 0 otherwise (because it was already in a * Returns 1 if we added the item, 0 otherwise (because it was already in a
* list). * list).
*/ */
#define MT_LIST_TRY_ADDQ(_lh, _el) \ #define MT_LIST_TRY_APPEND(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -341,7 +341,7 @@
* Add an item at the beginning of a list. * Add an item at the beginning of a list.
* It is assumed the element can't already be in a list, so it isn't checked. * It is assumed the element can't already be in a list, so it isn't checked.
*/ */
#define MT_LIST_ADD(_lh, _el) \ #define MT_LIST_INSERT(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -374,7 +374,7 @@
* Add an item at the end of a list. * Add an item at the end of a list.
* It is assumed the element can't already be in a list, so it isn't checked * It is assumed the element can't already be in a list, so it isn't checked
*/ */
#define MT_LIST_ADDQ(_lh, _el) \ #define MT_LIST_APPEND(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -406,8 +406,8 @@
/* /*
* Detach a list from its head. A pointer to the first element is returned * Detach a list from its head. A pointer to the first element is returned
* and the list is closed. If the list was empty, NULL is returned. This may * and the list is closed. If the list was empty, NULL is returned. This may
* exclusively be used with lists modified by MT_LIST_TRY_ADD/MT_LIST_TRY_ADDQ. This * exclusively be used with lists modified by MT_LIST_TRY_INSERT/MT_LIST_TRY_APPEND. This
* is incompatible with MT_LIST_DEL run concurrently. * is incompatible with MT_LIST_DELETE run concurrently.
* If there's at least one element, the next of the last element will always * If there's at least one element, the next of the last element will always
* be NULL. * be NULL.
*/ */
@ -454,7 +454,7 @@
/* Remove an item from a list. /* Remove an item from a list.
* Returns 1 if we removed the item, 0 otherwise (because it was in no list). * Returns 1 if we removed the item, 0 otherwise (because it was in no list).
*/ */
#define MT_LIST_DEL(_el) \ #define MT_LIST_DELETE(_el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *el = (_el); \ struct mt_list *el = (_el); \
@ -589,7 +589,7 @@
/* checks if the list element <el> was added to a list or not. This only /* checks if the list element <el> was added to a list or not. This only
* works when detached elements are reinitialized (using LIST_DEL_INIT) * works when detached elements are reinitialized (using LIST_DEL_INIT)
*/ */
#define MT_LIST_ADDED(el) ((el)->next != (el)) #define MT_LIST_INLIST(el) ((el)->next != (el))
/* Lock an element in the list, to be sure it won't be removed. /* Lock an element in the list, to be sure it won't be removed.
* It needs to be synchronized somehow to be sure it's not removed * It needs to be synchronized somehow to be sure it's not removed
@ -722,10 +722,10 @@
p->next = n; \ p->next = n; \
} while (0); } while (0);
/* Equivalent of MT_LIST_DEL(), to be used when parsing the list with mt_list_entry_for_each_safe(). /* Equivalent of MT_LIST_DELETE(), to be used when parsing the list with mt_list_entry_for_each_safe().
* It should be the element currently parsed (tmpelt1) * It should be the element currently parsed (tmpelt1)
*/ */
#define MT_LIST_DEL_SAFE(_el) \ #define MT_LIST_DELETE_SAFE(_el) \
do { \ do { \
struct mt_list *el = (_el); \ struct mt_list *el = (_el); \
(el)->prev = (el); \ (el)->prev = (el); \
@ -733,8 +733,8 @@
(_el) = NULL; \ (_el) = NULL; \
} while (0) } while (0)
/* Safe as MT_LIST_DEL_SAFE, but it won't reinit the element */ /* Safe as MT_LIST_DELETE_SAFE, but it won't reinit the element */
#define MT_LIST_DEL_SAFE_NOINIT(_el) \ #define MT_LIST_DELETE_SAFE_NOINIT(_el) \
do { \ do { \
(_el) = NULL; \ (_el) = NULL; \
} while (0) } while (0)
@ -745,10 +745,10 @@
* the list is passed in <list_head>. A temporary variable <back> of same type * the list is passed in <list_head>. A temporary variable <back> of same type
* as <item> is needed so that <item> may safely be deleted if needed. * as <item> is needed so that <item> may safely be deleted if needed.
* tmpelt1 is a temporary struct mt_list *, and tmpelt2 is a temporary * tmpelt1 is a temporary struct mt_list *, and tmpelt2 is a temporary
* struct mt_list, used internally, both are needed for MT_LIST_DEL_SAFE. * struct mt_list, used internally, both are needed for MT_LIST_DELETE_SAFE.
* Example: list_for_each_entry_safe(cur_acl, tmp, known_acl, list, elt1, elt2) * Example: list_for_each_entry_safe(cur_acl, tmp, known_acl, list, elt1, elt2)
* { ... }; * { ... };
* If you want to remove the current element, please use MT_LIST_DEL_SAFE. * If you want to remove the current element, please use MT_LIST_DELETE_SAFE.
*/ */
#define mt_list_for_each_entry_safe(item, list_head, member, tmpelt, tmpelt2) \ #define mt_list_for_each_entry_safe(item, list_head, member, tmpelt, tmpelt2) \
for ((tmpelt) = NULL; (tmpelt) != MT_LIST_BUSY; ({ \ for ((tmpelt) = NULL; (tmpelt) != MT_LIST_BUSY; ({ \

View File

@ -967,11 +967,11 @@ release_frame(struct spoe_frame *frame)
event_del(&frame->process_frame_event); event_del(&frame->process_frame_event);
worker = frame->worker; worker = frame->worker;
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
if (frame->frag_buf) if (frame->frag_buf)
free(frame->frag_buf); free(frame->frag_buf);
memset(frame, 0, sizeof(*frame)+max_frame_size+4); memset(frame, 0, sizeof(*frame)+max_frame_size+4);
LIST_ADDQ(&worker->frames, &frame->list); LIST_APPEND(&worker->frames, &frame->list);
} }
static void static void
@ -984,7 +984,7 @@ release_client(struct client *c)
DEBUG(c->worker, "<%lu> Release client", c->id); DEBUG(c->worker, "<%lu> Release client", c->id);
LIST_DEL(&c->by_worker); LIST_DELETE(&c->by_worker);
c->worker->nbclients--; c->worker->nbclients--;
unuse_spoe_engine(c); unuse_spoe_engine(c);
@ -1056,12 +1056,12 @@ use_spoe_engine(struct client *client)
LIST_INIT(&eng->clients); LIST_INIT(&eng->clients);
LIST_INIT(&eng->processing_frames); LIST_INIT(&eng->processing_frames);
LIST_INIT(&eng->outgoing_frames); LIST_INIT(&eng->outgoing_frames);
LIST_ADDQ(&client->worker->engines, &eng->list); LIST_APPEND(&client->worker->engines, &eng->list);
LOG(client->worker, "Add new SPOE engine '%s'", eng->id); LOG(client->worker, "Add new SPOE engine '%s'", eng->id);
end: end:
client->engine = eng; client->engine = eng;
LIST_ADDQ(&eng->clients, &client->by_engine); LIST_APPEND(&eng->clients, &client->by_engine);
} }
static void static void
@ -1075,12 +1075,12 @@ unuse_spoe_engine(struct client *client)
eng = client->engine; eng = client->engine;
client->engine = NULL; client->engine = NULL;
LIST_DEL(&client->by_engine); LIST_DELETE(&client->by_engine);
if (!LIST_ISEMPTY(&eng->clients)) if (!LIST_ISEMPTY(&eng->clients))
return; return;
LOG(client->worker, "Remove SPOE engine '%s'", eng->id); LOG(client->worker, "Remove SPOE engine '%s'", eng->id);
LIST_DEL(&eng->list); LIST_DELETE(&eng->list);
list_for_each_entry_safe(frame, back, &eng->processing_frames, list) { list_for_each_entry_safe(frame, back, &eng->processing_frames, list) {
release_frame(frame); release_frame(frame);
@ -1110,7 +1110,7 @@ acquire_incoming_frame(struct client *client)
} }
else { else {
frame = LIST_NEXT(&client->worker->frames, typeof(frame), list); frame = LIST_NEXT(&client->worker->frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
} }
reset_frame(frame); reset_frame(frame);
@ -1138,12 +1138,12 @@ acquire_outgoing_frame(struct client *client)
frame = client->outgoing_frame; frame = client->outgoing_frame;
else if (!LIST_ISEMPTY(&client->outgoing_frames)) { else if (!LIST_ISEMPTY(&client->outgoing_frames)) {
frame = LIST_NEXT(&client->outgoing_frames, typeof(frame), list); frame = LIST_NEXT(&client->outgoing_frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
client->outgoing_frame = frame; client->outgoing_frame = frame;
} }
else if (engine!= NULL && !LIST_ISEMPTY(&engine->outgoing_frames)) { else if (engine!= NULL && !LIST_ISEMPTY(&engine->outgoing_frames)) {
frame = LIST_NEXT(&engine->outgoing_frames, typeof(frame), list); frame = LIST_NEXT(&engine->outgoing_frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
client->outgoing_frame = frame; client->outgoing_frame = frame;
} }
return frame; return frame;
@ -1154,7 +1154,7 @@ write_frame(struct client *client, struct spoe_frame *frame)
{ {
uint32_t netint; uint32_t netint;
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
frame->buf = (char *)(frame->data); frame->buf = (char *)(frame->data);
frame->offset = 0; frame->offset = 0;
@ -1170,7 +1170,7 @@ write_frame(struct client *client, struct spoe_frame *frame)
if (client->outgoing_frame == NULL) if (client->outgoing_frame == NULL)
client->outgoing_frame = frame; client->outgoing_frame = frame;
else else
LIST_ADD(&client->outgoing_frames, &frame->list); LIST_INSERT(&client->outgoing_frames, &frame->list);
} }
else { else {
client->outgoing_frame = frame; client->outgoing_frame = frame;
@ -1179,12 +1179,12 @@ write_frame(struct client *client, struct spoe_frame *frame)
} }
else { /* for all other frames */ else { /* for all other frames */
if (frame->client == NULL) { /* async mode ! */ if (frame->client == NULL) { /* async mode ! */
LIST_ADDQ(&frame->engine->outgoing_frames, &frame->list); LIST_APPEND(&frame->engine->outgoing_frames, &frame->list);
list_for_each_entry(client, &frame->engine->clients, by_engine) list_for_each_entry(client, &frame->engine->clients, by_engine)
event_add(&client->write_frame_event, NULL); event_add(&client->write_frame_event, NULL);
} }
else if (frame->client->pipelining) { else if (frame->client->pipelining) {
LIST_ADDQ(&frame->client->outgoing_frames, &frame->list); LIST_APPEND(&frame->client->outgoing_frames, &frame->list);
event_add(&frame->client->write_frame_event, NULL); event_add(&frame->client->write_frame_event, NULL);
} }
else { else {
@ -1208,10 +1208,10 @@ process_incoming_frame(struct spoe_frame *frame)
if (client->async) { if (client->async) {
frame->client = NULL; frame->client = NULL;
LIST_ADDQ(&frame->engine->processing_frames, &frame->list); LIST_APPEND(&frame->engine->processing_frames, &frame->list);
} }
else if (client->pipelining) else if (client->pipelining)
LIST_ADDQ(&client->processing_frames, &frame->list); LIST_APPEND(&client->processing_frames, &frame->list);
else else
event_del(&client->read_frame_event); event_del(&client->read_frame_event);
} }
@ -1603,7 +1603,7 @@ accept_cb(int listener, short event, void *arg)
LIST_INIT(&client->processing_frames); LIST_INIT(&client->processing_frames);
LIST_INIT(&client->outgoing_frames); LIST_INIT(&client->outgoing_frames);
LIST_ADDQ(&worker->clients, &client->by_worker); LIST_APPEND(&worker->clients, &client->by_worker);
worker->nbclients++; worker->nbclients++;
@ -1633,7 +1633,7 @@ worker_function(void *data)
} }
list_for_each_entry_safe(frame, fback, &worker->frames, list) { list_for_each_entry_safe(frame, fback, &worker->frames, list) {
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
free(frame); free(frame);
} }

View File

@ -44,10 +44,10 @@
#define LIST_HEAD_INIT(l) { &l, &l } #define LIST_HEAD_INIT(l) { &l, &l }
/* adds an element at the beginning of a list ; returns the element */ /* adds an element at the beginning of a list ; returns the element */
#define LIST_ADD(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); }) #define LIST_INSERT(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); })
/* adds an element at the end of a list ; returns the element */ /* adds an element at the end of a list ; returns the element */
#define LIST_ADDQ(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); }) #define LIST_APPEND(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); })
/* adds the contents of a list <old> at the beginning of another list <new>. The old list head remains untouched. */ /* adds the contents of a list <old> at the beginning of another list <new>. The old list head remains untouched. */
#define LIST_SPLICE(new, old) do { \ #define LIST_SPLICE(new, old) do { \
@ -71,10 +71,10 @@
} while (0) } while (0)
/* removes an element from a list and returns it */ /* removes an element from a list and returns it */
#define LIST_DEL(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); }) #define LIST_DELETE(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); })
/* removes an element from a list, initializes it and returns it. /* removes an element from a list, initializes it and returns it.
* This is faster than LIST_DEL+LIST_INIT as we avoid reloading the pointers. * This is faster than LIST_DELETE+LIST_INIT as we avoid reloading the pointers.
*/ */
#define LIST_DEL_INIT(el) ({ \ #define LIST_DEL_INIT(el) ({ \
typeof(el) __ret = (el); \ typeof(el) __ret = (el); \
@ -98,7 +98,7 @@
/* checks if the list element <el> was added to a list or not. This only /* checks if the list element <el> was added to a list or not. This only
* works when detached elements are reinitialized (using LIST_DEL_INIT) * works when detached elements are reinitialized (using LIST_DEL_INIT)
*/ */
#define LIST_ADDED(el) ((el)->n != (el)) #define LIST_INLIST(el) ((el)->n != (el))
/* returns a pointer of type <pt> to a structure following the element /* returns a pointer of type <pt> to a structure following the element
* which contains list head <lh>, which is known as element <el> in * which contains list head <lh>, which is known as element <el> in
@ -224,7 +224,7 @@
* Returns 1 if we added the item, 0 otherwise (because it was already in a * Returns 1 if we added the item, 0 otherwise (because it was already in a
* list). * list).
*/ */
#define MT_LIST_TRY_ADD(_lh, _el) \ #define MT_LIST_TRY_INSERT(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -283,7 +283,7 @@
* Returns 1 if we added the item, 0 otherwise (because it was already in a * Returns 1 if we added the item, 0 otherwise (because it was already in a
* list). * list).
*/ */
#define MT_LIST_TRY_ADDQ(_lh, _el) \ #define MT_LIST_TRY_APPEND(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -341,7 +341,7 @@
* Add an item at the beginning of a list. * Add an item at the beginning of a list.
* It is assumed the element can't already be in a list, so it isn't checked. * It is assumed the element can't already be in a list, so it isn't checked.
*/ */
#define MT_LIST_ADD(_lh, _el) \ #define MT_LIST_INSERT(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -374,7 +374,7 @@
* Add an item at the end of a list. * Add an item at the end of a list.
* It is assumed the element can't already be in a list, so it isn't checked * It is assumed the element can't already be in a list, so it isn't checked
*/ */
#define MT_LIST_ADDQ(_lh, _el) \ #define MT_LIST_APPEND(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -406,8 +406,8 @@
/* /*
* Detach a list from its head. A pointer to the first element is returned * Detach a list from its head. A pointer to the first element is returned
* and the list is closed. If the list was empty, NULL is returned. This may * and the list is closed. If the list was empty, NULL is returned. This may
* exclusively be used with lists modified by MT_LIST_TRY_ADD/MT_LIST_TRY_ADDQ. This * exclusively be used with lists modified by MT_LIST_TRY_INSERT/MT_LIST_TRY_APPEND. This
* is incompatible with MT_LIST_DEL run concurrently. * is incompatible with MT_LIST_DELETE run concurrently.
* If there's at least one element, the next of the last element will always * If there's at least one element, the next of the last element will always
* be NULL. * be NULL.
*/ */
@ -454,7 +454,7 @@
/* Remove an item from a list. /* Remove an item from a list.
* Returns 1 if we removed the item, 0 otherwise (because it was in no list). * Returns 1 if we removed the item, 0 otherwise (because it was in no list).
*/ */
#define MT_LIST_DEL(_el) \ #define MT_LIST_DELETE(_el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *el = (_el); \ struct mt_list *el = (_el); \
@ -589,7 +589,7 @@
/* checks if the list element <el> was added to a list or not. This only /* checks if the list element <el> was added to a list or not. This only
* works when detached elements are reinitialized (using LIST_DEL_INIT) * works when detached elements are reinitialized (using LIST_DEL_INIT)
*/ */
#define MT_LIST_ADDED(el) ((el)->next != (el)) #define MT_LIST_INLIST(el) ((el)->next != (el))
/* Lock an element in the list, to be sure it won't be removed. /* Lock an element in the list, to be sure it won't be removed.
* It needs to be synchronized somehow to be sure it's not removed * It needs to be synchronized somehow to be sure it's not removed
@ -722,10 +722,10 @@
p->next = n; \ p->next = n; \
} while (0); } while (0);
/* Equivalent of MT_LIST_DEL(), to be used when parsing the list with mt_list_entry_for_each_safe(). /* Equivalent of MT_LIST_DELETE(), to be used when parsing the list with mt_list_entry_for_each_safe().
* It should be the element currently parsed (tmpelt1) * It should be the element currently parsed (tmpelt1)
*/ */
#define MT_LIST_DEL_SAFE(_el) \ #define MT_LIST_DELETE_SAFE(_el) \
do { \ do { \
struct mt_list *el = (_el); \ struct mt_list *el = (_el); \
(el)->prev = (el); \ (el)->prev = (el); \
@ -733,8 +733,8 @@
(_el) = NULL; \ (_el) = NULL; \
} while (0) } while (0)
/* Safe as MT_LIST_DEL_SAFE, but it won't reinit the element */ /* Safe as MT_LIST_DELETE_SAFE, but it won't reinit the element */
#define MT_LIST_DEL_SAFE_NOINIT(_el) \ #define MT_LIST_DELETE_SAFE_NOINIT(_el) \
do { \ do { \
(_el) = NULL; \ (_el) = NULL; \
} while (0) } while (0)
@ -745,10 +745,10 @@
* the list is passed in <list_head>. A temporary variable <back> of same type * the list is passed in <list_head>. A temporary variable <back> of same type
* as <item> is needed so that <item> may safely be deleted if needed. * as <item> is needed so that <item> may safely be deleted if needed.
* tmpelt1 is a temporary struct mt_list *, and tmpelt2 is a temporary * tmpelt1 is a temporary struct mt_list *, and tmpelt2 is a temporary
* struct mt_list, used internally, both are needed for MT_LIST_DEL_SAFE. * struct mt_list, used internally, both are needed for MT_LIST_DELETE_SAFE.
* Example: list_for_each_entry_safe(cur_acl, tmp, known_acl, list, elt1, elt2) * Example: list_for_each_entry_safe(cur_acl, tmp, known_acl, list, elt1, elt2)
* { ... }; * { ... };
* If you want to remove the current element, please use MT_LIST_DEL_SAFE. * If you want to remove the current element, please use MT_LIST_DELETE_SAFE.
*/ */
#define mt_list_for_each_entry_safe(item, list_head, member, tmpelt, tmpelt2) \ #define mt_list_for_each_entry_safe(item, list_head, member, tmpelt, tmpelt2) \
for ((tmpelt) = NULL; (tmpelt) != MT_LIST_BUSY; ({ \ for ((tmpelt) = NULL; (tmpelt) != MT_LIST_BUSY; ({ \

View File

@ -972,11 +972,11 @@ release_frame(struct spoe_frame *frame)
event_del(&frame->process_frame_event); event_del(&frame->process_frame_event);
worker = frame->worker; worker = frame->worker;
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
if (frame->frag_buf) if (frame->frag_buf)
free(frame->frag_buf); free(frame->frag_buf);
memset(frame, 0, sizeof(*frame)+max_frame_size+4); memset(frame, 0, sizeof(*frame)+max_frame_size+4);
LIST_ADDQ(&worker->frames, &frame->list); LIST_APPEND(&worker->frames, &frame->list);
} }
static void static void
@ -989,7 +989,7 @@ release_client(struct client *c)
DEBUG(c->worker, "<%lu> Release client", c->id); DEBUG(c->worker, "<%lu> Release client", c->id);
LIST_DEL(&c->by_worker); LIST_DELETE(&c->by_worker);
c->worker->nbclients--; c->worker->nbclients--;
unuse_spoe_engine(c); unuse_spoe_engine(c);
@ -1061,12 +1061,12 @@ use_spoe_engine(struct client *client)
LIST_INIT(&eng->clients); LIST_INIT(&eng->clients);
LIST_INIT(&eng->processing_frames); LIST_INIT(&eng->processing_frames);
LIST_INIT(&eng->outgoing_frames); LIST_INIT(&eng->outgoing_frames);
LIST_ADDQ(&client->worker->engines, &eng->list); LIST_APPEND(&client->worker->engines, &eng->list);
LOG(client->worker, "Add new SPOE engine '%s'", eng->id); LOG(client->worker, "Add new SPOE engine '%s'", eng->id);
end: end:
client->engine = eng; client->engine = eng;
LIST_ADDQ(&eng->clients, &client->by_engine); LIST_APPEND(&eng->clients, &client->by_engine);
} }
static void static void
@ -1080,12 +1080,12 @@ unuse_spoe_engine(struct client *client)
eng = client->engine; eng = client->engine;
client->engine = NULL; client->engine = NULL;
LIST_DEL(&client->by_engine); LIST_DELETE(&client->by_engine);
if (!LIST_ISEMPTY(&eng->clients)) if (!LIST_ISEMPTY(&eng->clients))
return; return;
LOG(client->worker, "Remove SPOE engine '%s'", eng->id); LOG(client->worker, "Remove SPOE engine '%s'", eng->id);
LIST_DEL(&eng->list); LIST_DELETE(&eng->list);
list_for_each_entry_safe(frame, back, &eng->processing_frames, list) { list_for_each_entry_safe(frame, back, &eng->processing_frames, list) {
release_frame(frame); release_frame(frame);
@ -1115,7 +1115,7 @@ acquire_incoming_frame(struct client *client)
} }
else { else {
frame = LIST_NEXT(&client->worker->frames, typeof(frame), list); frame = LIST_NEXT(&client->worker->frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
} }
reset_frame(frame); reset_frame(frame);
@ -1143,12 +1143,12 @@ acquire_outgoing_frame(struct client *client)
frame = client->outgoing_frame; frame = client->outgoing_frame;
else if (!LIST_ISEMPTY(&client->outgoing_frames)) { else if (!LIST_ISEMPTY(&client->outgoing_frames)) {
frame = LIST_NEXT(&client->outgoing_frames, typeof(frame), list); frame = LIST_NEXT(&client->outgoing_frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
client->outgoing_frame = frame; client->outgoing_frame = frame;
} }
else if (engine!= NULL && !LIST_ISEMPTY(&engine->outgoing_frames)) { else if (engine!= NULL && !LIST_ISEMPTY(&engine->outgoing_frames)) {
frame = LIST_NEXT(&engine->outgoing_frames, typeof(frame), list); frame = LIST_NEXT(&engine->outgoing_frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
client->outgoing_frame = frame; client->outgoing_frame = frame;
} }
return frame; return frame;
@ -1159,7 +1159,7 @@ write_frame(struct client *client, struct spoe_frame *frame)
{ {
uint32_t netint; uint32_t netint;
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
frame->buf = (char *)(frame->data); frame->buf = (char *)(frame->data);
frame->offset = 0; frame->offset = 0;
@ -1175,7 +1175,7 @@ write_frame(struct client *client, struct spoe_frame *frame)
if (client->outgoing_frame == NULL) if (client->outgoing_frame == NULL)
client->outgoing_frame = frame; client->outgoing_frame = frame;
else else
LIST_ADD(&client->outgoing_frames, &frame->list); LIST_INSERT(&client->outgoing_frames, &frame->list);
} }
else { else {
client->outgoing_frame = frame; client->outgoing_frame = frame;
@ -1184,12 +1184,12 @@ write_frame(struct client *client, struct spoe_frame *frame)
} }
else { /* for all other frames */ else { /* for all other frames */
if (frame->client == NULL) { /* async mode ! */ if (frame->client == NULL) { /* async mode ! */
LIST_ADDQ(&frame->engine->outgoing_frames, &frame->list); LIST_APPEND(&frame->engine->outgoing_frames, &frame->list);
list_for_each_entry(client, &frame->engine->clients, by_engine) list_for_each_entry(client, &frame->engine->clients, by_engine)
event_add(&client->write_frame_event, NULL); event_add(&client->write_frame_event, NULL);
} }
else if (frame->client->pipelining) { else if (frame->client->pipelining) {
LIST_ADDQ(&frame->client->outgoing_frames, &frame->list); LIST_APPEND(&frame->client->outgoing_frames, &frame->list);
event_add(&frame->client->write_frame_event, NULL); event_add(&frame->client->write_frame_event, NULL);
} }
else { else {
@ -1213,10 +1213,10 @@ process_incoming_frame(struct spoe_frame *frame)
if (client->async) { if (client->async) {
frame->client = NULL; frame->client = NULL;
LIST_ADDQ(&frame->engine->processing_frames, &frame->list); LIST_APPEND(&frame->engine->processing_frames, &frame->list);
} }
else if (client->pipelining) else if (client->pipelining)
LIST_ADDQ(&client->processing_frames, &frame->list); LIST_APPEND(&client->processing_frames, &frame->list);
else else
event_del(&client->read_frame_event); event_del(&client->read_frame_event);
} }
@ -1632,7 +1632,7 @@ accept_cb(int listener, short event, void *arg)
LIST_INIT(&client->processing_frames); LIST_INIT(&client->processing_frames);
LIST_INIT(&client->outgoing_frames); LIST_INIT(&client->outgoing_frames);
LIST_ADDQ(&worker->clients, &client->by_worker); LIST_APPEND(&worker->clients, &client->by_worker);
worker->nbclients++; worker->nbclients++;
@ -1662,7 +1662,7 @@ worker_function(void *data)
} }
list_for_each_entry_safe(frame, fback, &worker->frames, list) { list_for_each_entry_safe(frame, fback, &worker->frames, list) {
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
free(frame); free(frame);
} }

View File

@ -31,13 +31,13 @@ struct list {
#define LIST_HEAD_INIT(l) { &l, &l } #define LIST_HEAD_INIT(l) { &l, &l }
/* adds an element at the beginning of a list ; returns the element */ /* adds an element at the beginning of a list ; returns the element */
#define LIST_ADD(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); }) #define LIST_INSERT(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); })
/* adds an element at the end of a list ; returns the element */ /* adds an element at the end of a list ; returns the element */
#define LIST_ADDQ(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); }) #define LIST_APPEND(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); })
/* removes an element from a list and returns it */ /* removes an element from a list and returns it */
#define LIST_DEL(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); }) #define LIST_DELETE(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); })
/* returns a pointer of type <pt> to a structure containing a list head called /* returns a pointer of type <pt> to a structure containing a list head called
* <el> at address <lh>. Note that <lh> can be the result of a function or macro * <el> at address <lh>. Note that <lh> can be the result of a function or macro

View File

@ -1024,11 +1024,11 @@ release_frame(struct spoe_frame *frame)
event_del(&frame->process_frame_event); event_del(&frame->process_frame_event);
worker = frame->worker; worker = frame->worker;
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
if (frame->frag_buf) if (frame->frag_buf)
free(frame->frag_buf); free(frame->frag_buf);
memset(frame, 0, sizeof(*frame)+max_frame_size+4); memset(frame, 0, sizeof(*frame)+max_frame_size+4);
LIST_ADDQ(&worker->frames, &frame->list); LIST_APPEND(&worker->frames, &frame->list);
} }
static void static void
@ -1041,7 +1041,7 @@ release_client(struct client *c)
DEBUG(c->worker, "<%lu> Release client", c->id); DEBUG(c->worker, "<%lu> Release client", c->id);
LIST_DEL(&c->by_worker); LIST_DELETE(&c->by_worker);
c->worker->nbclients--; c->worker->nbclients--;
unuse_spoe_engine(c); unuse_spoe_engine(c);
@ -1113,12 +1113,12 @@ use_spoe_engine(struct client *client)
LIST_INIT(&eng->clients); LIST_INIT(&eng->clients);
LIST_INIT(&eng->processing_frames); LIST_INIT(&eng->processing_frames);
LIST_INIT(&eng->outgoing_frames); LIST_INIT(&eng->outgoing_frames);
LIST_ADDQ(&client->worker->engines, &eng->list); LIST_APPEND(&client->worker->engines, &eng->list);
LOG(client->worker, "Add new SPOE engine '%s'", eng->id); LOG(client->worker, "Add new SPOE engine '%s'", eng->id);
end: end:
client->engine = eng; client->engine = eng;
LIST_ADDQ(&eng->clients, &client->by_engine); LIST_APPEND(&eng->clients, &client->by_engine);
} }
static void static void
@ -1132,12 +1132,12 @@ unuse_spoe_engine(struct client *client)
eng = client->engine; eng = client->engine;
client->engine = NULL; client->engine = NULL;
LIST_DEL(&client->by_engine); LIST_DELETE(&client->by_engine);
if (!LIST_ISEMPTY(&eng->clients)) if (!LIST_ISEMPTY(&eng->clients))
return; return;
LOG(client->worker, "Remove SPOE engine '%s'", eng->id); LOG(client->worker, "Remove SPOE engine '%s'", eng->id);
LIST_DEL(&eng->list); LIST_DELETE(&eng->list);
list_for_each_entry_safe(frame, back, &eng->processing_frames, list) { list_for_each_entry_safe(frame, back, &eng->processing_frames, list) {
release_frame(frame); release_frame(frame);
@ -1167,7 +1167,7 @@ acquire_incoming_frame(struct client *client)
} }
else { else {
frame = LIST_NEXT(&client->worker->frames, typeof(frame), list); frame = LIST_NEXT(&client->worker->frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
} }
reset_frame(frame); reset_frame(frame);
@ -1195,12 +1195,12 @@ acquire_outgoing_frame(struct client *client)
frame = client->outgoing_frame; frame = client->outgoing_frame;
else if (!LIST_ISEMPTY(&client->outgoing_frames)) { else if (!LIST_ISEMPTY(&client->outgoing_frames)) {
frame = LIST_NEXT(&client->outgoing_frames, typeof(frame), list); frame = LIST_NEXT(&client->outgoing_frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
client->outgoing_frame = frame; client->outgoing_frame = frame;
} }
else if (engine!= NULL && !LIST_ISEMPTY(&engine->outgoing_frames)) { else if (engine!= NULL && !LIST_ISEMPTY(&engine->outgoing_frames)) {
frame = LIST_NEXT(&engine->outgoing_frames, typeof(frame), list); frame = LIST_NEXT(&engine->outgoing_frames, typeof(frame), list);
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
client->outgoing_frame = frame; client->outgoing_frame = frame;
} }
return frame; return frame;
@ -1211,7 +1211,7 @@ write_frame(struct client *client, struct spoe_frame *frame)
{ {
uint32_t netint; uint32_t netint;
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
frame->buf = (char *)(frame->data); frame->buf = (char *)(frame->data);
frame->offset = 0; frame->offset = 0;
@ -1227,7 +1227,7 @@ write_frame(struct client *client, struct spoe_frame *frame)
if (client->outgoing_frame == NULL) if (client->outgoing_frame == NULL)
client->outgoing_frame = frame; client->outgoing_frame = frame;
else else
LIST_ADD(&client->outgoing_frames, &frame->list); LIST_INSERT(&client->outgoing_frames, &frame->list);
} }
else { else {
client->outgoing_frame = frame; client->outgoing_frame = frame;
@ -1236,12 +1236,12 @@ write_frame(struct client *client, struct spoe_frame *frame)
} }
else { /* for all other frames */ else { /* for all other frames */
if (frame->client == NULL) { /* async mode ! */ if (frame->client == NULL) { /* async mode ! */
LIST_ADDQ(&frame->engine->outgoing_frames, &frame->list); LIST_APPEND(&frame->engine->outgoing_frames, &frame->list);
list_for_each_entry(client, &frame->engine->clients, by_engine) list_for_each_entry(client, &frame->engine->clients, by_engine)
event_add(&client->write_frame_event, NULL); event_add(&client->write_frame_event, NULL);
} }
else if (frame->client->pipelining) { else if (frame->client->pipelining) {
LIST_ADDQ(&frame->client->outgoing_frames, &frame->list); LIST_APPEND(&frame->client->outgoing_frames, &frame->list);
event_add(&frame->client->write_frame_event, NULL); event_add(&frame->client->write_frame_event, NULL);
} }
else { else {
@ -1265,10 +1265,10 @@ process_incoming_frame(struct spoe_frame *frame)
if (client->async) { if (client->async) {
frame->client = NULL; frame->client = NULL;
LIST_ADDQ(&frame->engine->processing_frames, &frame->list); LIST_APPEND(&frame->engine->processing_frames, &frame->list);
} }
else if (client->pipelining) else if (client->pipelining)
LIST_ADDQ(&client->processing_frames, &frame->list); LIST_APPEND(&client->processing_frames, &frame->list);
else else
event_del(&client->read_frame_event); event_del(&client->read_frame_event);
} }
@ -1627,7 +1627,7 @@ accept_cb(int listener, short event, void *arg)
LIST_INIT(&client->processing_frames); LIST_INIT(&client->processing_frames);
LIST_INIT(&client->outgoing_frames); LIST_INIT(&client->outgoing_frames);
LIST_ADDQ(&worker->clients, &client->by_worker); LIST_APPEND(&worker->clients, &client->by_worker);
worker->nbclients++; worker->nbclients++;
@ -1657,7 +1657,7 @@ worker_function(void *data)
} }
list_for_each_entry_safe(frame, fback, &worker->frames, list) { list_for_each_entry_safe(frame, fback, &worker->frames, list) {
LIST_DEL(&frame->list); LIST_DELETE(&frame->list);
free(frame); free(frame);
} }

View File

@ -1,150 +1,27 @@
#FIG 3.2 #FIG 3.2 Produced by xfig version 3.2.7b
Landscape Landscape
Center Center
Metric Metric
A4 A4
100.00 119.50
Single Single
-2 -2
1200 2 1200 2
6 720 8325 1080 9135
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
990 8765 765 8765
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
765 8415 990 8415 990 9090 765 9090 765 8415
4 1 0 50 0 14 10 0.0000 4 90 90 880 8967 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 878 8640 N\001
-6
6 1170 8325 1530 9135
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
1440 8765 1215 8765
2 2 0 2 0 7 53 0 20 0.000 0 0 -1 0 0 5
1215 8415 1440 8415 1440 9090 1215 9090 1215 8415
4 1 0 50 0 14 10 0.0000 4 90 90 1330 8967 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 1328 8640 N\001
-6
6 1620 8325 1980 9135
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
1890 8765 1665 8765
2 2 0 2 0 4 53 0 20 0.000 0 0 -1 0 0 5
1665 8415 1890 8415 1890 9090 1665 9090 1665 8415
4 1 0 50 0 14 10 0.0000 4 90 90 1780 8967 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 1778 8640 N\001
-6
6 2700 8055 3420 9225
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
3150 8675 2925 8675
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
2925 8325 3150 8325 3150 9000 2925 9000 2925 8325
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 6
1 1 1.00 60.00 120.00
3150 8505 3375 8505 3375 8100 2700 8100 2700 8505 2925 8505
0.000 1.000 1.000 1.000 1.000 0.000
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 6
1 1 1.00 60.00 120.00
3150 8820 3375 8820 3375 9225 2700 9225 2700 8820 2925 8820
0.000 1.000 1.000 1.000 1.000 0.000
4 1 0 50 0 14 10 0.0000 4 90 90 3040 8877 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 3038 8550 N\001
-6
6 2115 8100 2655 9180
6 2115 8100 2655 9180
6 2295 8235 2655 9045
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2565 8675 2340 8675
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
2340 8325 2565 8325 2565 9000 2340 9000 2340 8325
4 1 0 50 0 14 10 0.0000 4 90 90 2455 8877 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 2453 8550 N\001
-6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2565 8325 2115 8325
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2115 9000 2565 9000
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
2115 8100 2565 8100 2565 9180 2115 9180 2115 8100
4 1 0 50 0 14 12 0.0000 4 120 105 2250 8730 L\001
-6
-6
6 3420 8100 4095 9225
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
3870 8675 3645 8675
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
3645 8325 3870 8325 3870 9000 3645 9000 3645 8325
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 6
1 1 1.00 60.00 120.00
3870 8505 4095 8505 4095 8100 3420 8100 3420 8505 3645 8505
0.000 1.000 1.000 1.000 1.000 0.000
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 6
1 1 1.00 60.00 120.00
3870 8820 4095 8820 4095 9225 3420 9225 3420 8820 3645 8820
0.000 1.000 1.000 1.000 1.000 0.000
4 1 0 50 0 14 10 0.0000 4 90 90 3760 8877 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 3758 8550 N\001
-6
6 4275 8190 4725 9090
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
4275 8190 4725 8190 4725 9090 4275 9090 4275 8190
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
4275 8640 4725 8640
4 1 0 50 0 16 24 0.0000 4 285 270 4500 8550 N\001
4 1 0 50 0 16 24 0.0000 4 285 240 4500 9000 P\001
-6
6 5175 8115 5655 8595
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
5190 8130 5640 8130 5640 8580 5190 8580 5190 8130
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5640 8355 5190 8355
4 1 0 50 0 16 9 0.0000 4 90 90 5415 8490 P\001
4 1 0 50 0 16 9 0.0000 4 90 90 5415 8310 N\001
-6
6 4995 8655 5925 9135
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5010 8895 5910 8895
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
5010 8670 5910 8670 5910 9120 5010 9120 5010 8670
4 1 0 50 0 14 10 0.0000 4 105 630 5460 8850 list *N\001
4 1 0 50 0 14 10 0.0000 4 105 630 5460 9075 list *P\001
-6
6 270 8325 630 9135
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
540 8765 315 8765
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
315 8415 540 8415 540 9090 315 9090 315 8415
4 1 0 50 0 14 10 0.0000 4 90 90 430 8967 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 428 8640 N\001
-6
6 4860 3420 5220 4230
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5130 3860 4905 3860
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
4905 3510 5130 3510 5130 4185 4905 4185 4905 3510
4 1 0 50 0 14 10 0.0000 4 90 90 5020 4062 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 5018 3735 N\001
-6
6 5850 3420 6210 4230
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
6120 3860 5895 3860
2 2 0 2 0 7 53 0 20 0.000 0 0 -1 0 0 5
5895 3510 6120 3510 6120 4185 5895 4185 5895 3510
4 1 0 50 0 14 10 0.0000 4 90 90 6010 4062 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 6008 3735 N\001
-6
6 3960 3420 4320 4230 6 3960 3420 4320 4230
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
4230 3860 4005 3860 4230 3860 4005 3860
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
4005 3510 4230 3510 4230 4185 4005 4185 4005 3510 4005 3510 4230 3510 4230 4185 4005 4185 4005 3510
4 1 0 50 0 14 10 0.0000 4 90 90 4120 4062 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 4120 4062 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 4118 3735 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 4118 3735 N\001
-6 -6
6 4185 5580 4545 6390 6 4185 5580 4545 6390
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
4455 6020 4230 6020 4455 6020 4230 6020
2 2 0 2 0 4 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 4 53 0 20 0.000 0 0 -1 0 0 5
4230 5670 4455 5670 4455 6345 4230 6345 4230 5670 4230 5670 4455 5670 4455 6345 4230 6345 4230 5670
4 1 0 50 0 14 10 0.0000 4 90 90 4345 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 4345 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 4343 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 4343 5895 N\001
-6 -6
6 4905 5445 5445 6525 6 4905 5445 5445 6525
6 4905 5445 5445 6525 6 4905 5445 5445 6525
@ -153,8 +30,8 @@ Single
5355 6020 5130 6020 5355 6020 5130 6020
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
5130 5670 5355 5670 5355 6345 5130 6345 5130 5670 5130 5670 5355 5670 5355 6345 5130 6345 5130 5670
4 1 0 50 0 14 10 0.0000 4 90 90 5245 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 5245 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 5243 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 5243 5895 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5355 5670 4905 5670 5355 5670 4905 5670
@ -162,7 +39,7 @@ Single
4905 6345 5355 6345 4905 6345 5355 6345
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
4905 5445 5355 5445 5355 6525 4905 6525 4905 5445 4905 5445 5355 5445 5355 6525 4905 6525 4905 5445
4 1 0 50 0 14 12 0.0000 4 120 105 5040 6075 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 5040 6075 L\001
-6 -6
-6 -6
6 5805 5445 6345 6525 6 5805 5445 6345 6525
@ -172,8 +49,8 @@ Single
6255 6020 6030 6020 6255 6020 6030 6020
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
6030 5670 6255 5670 6255 6345 6030 6345 6030 5670 6030 5670 6255 5670 6255 6345 6030 6345 6030 5670
4 1 0 50 0 14 10 0.0000 4 90 90 6145 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 6145 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 6143 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 6143 5895 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
6255 5670 5805 5670 6255 5670 5805 5670
@ -181,7 +58,7 @@ Single
5805 6345 6255 6345 5805 6345 6255 6345
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
5805 5445 6255 5445 6255 6525 5805 6525 5805 5445 5805 5445 6255 5445 6255 6525 5805 6525 5805 5445
4 1 0 50 0 14 12 0.0000 4 120 105 5940 6075 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 5940 6075 L\001
-6 -6
-6 -6
6 6705 5445 7245 6525 6 6705 5445 7245 6525
@ -191,8 +68,8 @@ Single
7155 6020 6930 6020 7155 6020 6930 6020
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
6930 5670 7155 5670 7155 6345 6930 6345 6930 5670 6930 5670 7155 5670 7155 6345 6930 6345 6930 5670
4 1 0 50 0 14 10 0.0000 4 90 90 7045 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 7045 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 7043 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 7043 5895 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7155 5670 6705 5670 7155 5670 6705 5670
@ -200,7 +77,7 @@ Single
6705 6345 7155 6345 6705 6345 7155 6345
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6705 5445 7155 5445 7155 6525 6705 6525 6705 5445 6705 5445 7155 5445 7155 6525 6705 6525 6705 5445
4 1 0 50 0 14 12 0.0000 4 120 105 6840 6075 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 6840 6075 L\001
-6 -6
-6 -6
6 450 5580 810 6390 6 450 5580 810 6390
@ -208,8 +85,8 @@ Single
720 6020 495 6020 720 6020 495 6020
2 2 0 2 0 4 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 4 53 0 20 0.000 0 0 -1 0 0 5
495 5670 720 5670 720 6345 495 6345 495 5670 495 5670 720 5670 720 6345 495 6345 495 5670
4 1 0 50 0 14 10 0.0000 4 90 90 610 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 610 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 608 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 608 5895 N\001
-6 -6
6 1170 5445 1710 6525 6 1170 5445 1710 6525
6 1170 5445 1710 6525 6 1170 5445 1710 6525
@ -218,8 +95,8 @@ Single
1620 6020 1395 6020 1620 6020 1395 6020
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
1395 5670 1620 5670 1620 6345 1395 6345 1395 5670 1395 5670 1620 5670 1620 6345 1395 6345 1395 5670
4 1 0 50 0 14 10 0.0000 4 90 90 1510 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 1510 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 1508 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 1508 5895 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
1620 5670 1170 5670 1620 5670 1170 5670
@ -227,7 +104,7 @@ Single
1170 6345 1620 6345 1170 6345 1620 6345
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
1170 5445 1620 5445 1620 6525 1170 6525 1170 5445 1170 5445 1620 5445 1620 6525 1170 6525 1170 5445
4 1 0 50 0 14 12 0.0000 4 120 105 1305 6075 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 1305 6075 L\001
-6 -6
-6 -6
6 2070 5445 2610 6525 6 2070 5445 2610 6525
@ -237,8 +114,8 @@ Single
2520 6020 2295 6020 2520 6020 2295 6020
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
2295 5670 2520 5670 2520 6345 2295 6345 2295 5670 2295 5670 2520 5670 2520 6345 2295 6345 2295 5670
4 1 0 50 0 14 10 0.0000 4 90 90 2410 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 2410 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 2408 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 2408 5895 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2520 5670 2070 5670 2520 5670 2070 5670
@ -246,7 +123,7 @@ Single
2070 6345 2520 6345 2070 6345 2520 6345
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
2070 5445 2520 5445 2520 6525 2070 6525 2070 5445 2070 5445 2520 5445 2520 6525 2070 6525 2070 5445
4 1 0 50 0 14 12 0.0000 4 120 105 2205 6075 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 2205 6075 L\001
-6 -6
-6 -6
6 2970 5445 3510 6525 6 2970 5445 3510 6525
@ -256,8 +133,8 @@ Single
3420 6020 3195 6020 3420 6020 3195 6020
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
3195 5670 3420 5670 3420 6345 3195 6345 3195 5670 3195 5670 3420 5670 3420 6345 3195 6345 3195 5670
4 1 0 50 0 14 10 0.0000 4 90 90 3310 6222 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 3310 6222 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 3308 5895 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 3308 5895 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
3420 5670 2970 5670 3420 5670 2970 5670
@ -265,7 +142,7 @@ Single
2970 6345 3420 6345 2970 6345 3420 6345
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
2970 5445 3420 5445 3420 6525 2970 6525 2970 5445 2970 5445 3420 5445 3420 6525 2970 6525 2970 5445
4 1 0 50 0 14 12 0.0000 4 120 105 3105 6075 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 3105 6075 L\001
-6 -6
-6 -6
6 720 3420 1080 4230 6 720 3420 1080 4230
@ -273,24 +150,24 @@ Single
990 3860 765 3860 990 3860 765 3860
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
765 3510 990 3510 990 4185 765 4185 765 3510 765 3510 990 3510 990 4185 765 4185 765 3510
4 1 0 50 0 14 10 0.0000 4 90 90 880 4062 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 880 4062 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 878 3735 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 878 3735 N\001
-6 -6
6 2700 3420 3060 4230 6 2700 3420 3060 4230
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
2970 3860 2745 3860 2970 3860 2745 3860
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
2745 3510 2970 3510 2970 4185 2745 4185 2745 3510 2745 3510 2970 3510 2970 4185 2745 4185 2745 3510
4 1 0 50 0 14 10 0.0000 4 90 90 2860 4062 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 2860 4062 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 2858 3735 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 2858 3735 N\001
-6 -6
6 1620 3465 1935 4230 6 1620 3465 1935 4230
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
1890 3860 1665 3860 1890 3860 1665 3860
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
1665 3510 1890 3510 1890 4185 1665 4185 1665 3510 1665 3510 1890 3510 1890 4185 1665 4185 1665 3510
4 1 0 50 0 14 10 0.0000 4 90 90 1780 4062 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 1780 4062 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 1778 3735 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 1778 3735 N\001
-6 -6
6 10485 3330 11025 4410 6 10485 3330 11025 4410
6 10665 3465 11025 4275 6 10665 3465 11025 4275
@ -298,8 +175,8 @@ Single
10935 3905 10710 3905 10935 3905 10710 3905
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
10710 3555 10935 3555 10935 4230 10710 4230 10710 3555 10710 3555 10935 3555 10935 4230 10710 4230 10710 3555
4 1 0 50 0 14 10 0.0000 4 90 90 10825 4107 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 10825 4107 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 10823 3780 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 10823 3780 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10935 3555 10485 3555 10935 3555 10485 3555
@ -307,7 +184,7 @@ Single
10485 4230 10935 4230 10485 4230 10935 4230
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
10485 3330 10935 3330 10935 4410 10485 4410 10485 3330 10485 3330 10935 3330 10935 4410 10485 4410 10485 3330
4 1 0 50 0 14 12 0.0000 4 120 105 10620 3960 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 10620 3960 L\001
-6 -6
6 7110 3105 7650 4185 6 7110 3105 7650 4185
6 7110 3105 7650 4185 6 7110 3105 7650 4185
@ -316,8 +193,8 @@ Single
7560 3680 7335 3680 7560 3680 7335 3680
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
7335 3330 7560 3330 7560 4005 7335 4005 7335 3330 7335 3330 7560 3330 7560 4005 7335 4005 7335 3330
4 1 0 50 0 14 10 0.0000 4 90 90 7450 3882 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 7450 3882 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 7448 3555 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 7448 3555 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7560 3330 7110 3330 7560 3330 7110 3330
@ -325,7 +202,7 @@ Single
7110 4005 7560 4005 7110 4005 7560 4005
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
7110 3105 7560 3105 7560 4185 7110 4185 7110 3105 7110 3105 7560 3105 7560 4185 7110 4185 7110 3105
4 1 0 50 0 14 12 0.0000 4 120 105 7245 3735 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 7245 3735 L\001
-6 -6
-6 -6
6 8010 3105 8550 4185 6 8010 3105 8550 4185
@ -335,8 +212,8 @@ Single
8460 3680 8235 3680 8460 3680 8235 3680
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
8235 3330 8460 3330 8460 4005 8235 4005 8235 3330 8235 3330 8460 3330 8460 4005 8235 4005 8235 3330
4 1 0 50 0 14 10 0.0000 4 90 90 8350 3882 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 8350 3882 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 8348 3555 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 8348 3555 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8460 3330 8010 3330 8460 3330 8010 3330
@ -344,7 +221,7 @@ Single
8010 4005 8460 4005 8010 4005 8460 4005
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
8010 3105 8460 3105 8460 4185 8010 4185 8010 3105 8010 3105 8460 3105 8460 4185 8010 4185 8010 3105
4 1 0 50 0 14 12 0.0000 4 120 105 8145 3735 L\001 4 1 0 50 0 14 12 0.0000 4 120 120 8145 3735 L\001
-6 -6
-6 -6
6 9315 990 12195 2160 6 9315 990 12195 2160
@ -353,8 +230,8 @@ Single
9945 1520 9720 1520 9945 1520 9720 1520
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
9720 1170 9945 1170 9945 1845 9720 1845 9720 1170 9720 1170 9945 1170 9945 1845 9720 1845 9720 1170
4 1 0 50 0 14 10 0.0000 4 90 90 9835 1722 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 9835 1722 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 9833 1395 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 9833 1395 N\001
-6 -6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
10935 1520 10710 1520 10935 1520 10710 1520
@ -390,50 +267,50 @@ Single
1 1 1.00 60.00 120.00 1 1 1.00 60.00 120.00
10665 1710 9945 1710 10665 1710 9945 1710
0.000 0.000 0.000 0.000
4 1 0 50 0 14 10 0.0000 4 90 90 10825 1722 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 10825 1722 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 10823 1395 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 10823 1395 N\001
4 1 0 50 0 14 10 0.0000 4 90 90 11815 1722 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 11815 1722 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 11813 1395 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 11813 1395 N\001
-6 -6
6 6345 1080 6705 1890 6 6345 1080 6705 1890
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
6615 1520 6390 1520 6615 1520 6390 1520
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
6390 1170 6615 1170 6615 1845 6390 1845 6390 1170 6390 1170 6615 1170 6615 1845 6390 1845 6390 1170
4 1 0 50 0 14 10 0.0000 4 90 90 6505 1722 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 6505 1722 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 6503 1395 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 6503 1395 N\001
-6 -6
6 7335 1080 7695 1890 6 7335 1080 7695 1890
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
7605 1520 7380 1520 7605 1520 7380 1520
2 2 0 2 0 6 52 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 6 52 0 20 0.000 0 0 -1 0 0 5
7380 1170 7605 1170 7605 1845 7380 1845 7380 1170 7380 1170 7605 1170 7605 1845 7380 1845 7380 1170
4 1 0 50 0 14 10 0.0000 4 90 90 7495 1722 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 7495 1722 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 7493 1395 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 7493 1395 N\001
-6 -6
6 8325 1080 8685 1890 6 8325 1080 8685 1890
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
8595 1520 8370 1520 8595 1520 8370 1520
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
8370 1170 8595 1170 8595 1845 8370 1845 8370 1170 8370 1170 8595 1170 8595 1845 8370 1845 8370 1170
4 1 0 50 0 14 10 0.0000 4 90 90 8485 1722 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 8485 1722 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 8483 1395 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 8483 1395 N\001
-6 -6
6 3870 1215 4185 1980 6 3870 1215 4185 1980
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
4140 1610 3915 1610 4140 1610 3915 1610
2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5 2 2 0 2 0 2 53 0 20 0.000 0 0 -1 0 0 5
3915 1260 4140 1260 4140 1935 3915 1935 3915 1260 3915 1260 4140 1260 4140 1935 3915 1935 3915 1260
4 1 0 50 0 14 10 0.0000 4 90 90 4030 1812 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 4030 1812 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 4028 1485 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 4028 1485 N\001
-6 -6
6 4770 1215 5085 1980 6 4770 1215 5085 1980
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5040 1610 4815 1610 5040 1610 4815 1610
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
4815 1260 5040 1260 5040 1935 4815 1935 4815 1260 4815 1260 5040 1260 5040 1935 4815 1935 4815 1260
4 1 0 50 0 14 10 0.0000 4 90 90 4930 1812 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 4930 1812 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 4928 1485 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 4928 1485 N\001
-6 -6
6 2205 990 2925 2160 6 2205 990 2925 2160
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
@ -448,23 +325,43 @@ Single
1 1 1.00 60.00 120.00 1 1 1.00 60.00 120.00
2655 1755 2880 1755 2880 2160 2205 2160 2205 1755 2430 1755 2655 1755 2880 1755 2880 2160 2205 2160 2205 1755 2430 1755
0.000 1.000 1.000 1.000 1.000 0.000 0.000 1.000 1.000 1.000 1.000 0.000
4 1 0 50 0 14 10 0.0000 4 90 90 2545 1812 P\001 4 1 0 50 0 14 10 0.0000 4 105 105 2545 1812 P\001
4 1 0 50 0 14 10 0.0000 4 90 90 2543 1485 N\001 4 1 0 50 0 14 10 0.0000 4 105 105 2543 1485 N\001
-6 -6
6 525 1350 1455 1830 6 525 1350 1455 1830
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
540 1590 1440 1590 540 1590 1440 1590
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
540 1365 1440 1365 1440 1815 540 1815 540 1365 540 1365 1440 1365 1440 1815 540 1815 540 1365
4 1 0 50 0 14 10 0.0000 4 105 630 990 1545 list *N\001 4 1 0 50 0 14 10 0.0000 4 105 735 990 1545 list *N\001
4 1 0 50 0 14 10 0.0000 4 105 630 990 1770 list *P\001 4 1 0 50 0 14 10 0.0000 4 105 735 990 1770 list *P\001
-6
6 4815 3420 5175 4230
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
5085 3860 4860 3860
2 2 0 2 0 7 53 0 20 0.000 0 0 -1 0 0 5
4860 3510 5085 3510 5085 4185 4860 4185 4860 3510
4 1 0 50 0 14 10 0.0000 4 105 105 4975 4062 P\001
4 1 0 50 0 14 10 0.0000 4 105 105 4973 3735 N\001
-6
6 5715 3285 6390 4410
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
6165 3860 5940 3860
2 2 0 2 0 6 53 0 20 0.000 0 0 -1 0 0 5
5940 3510 6165 3510 6165 4185 5940 4185 5940 3510
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 6
1 1 1.00 60.00 120.00
6165 3690 6390 3690 6390 3285 5715 3285 5715 3690 5940 3690
0.000 1.000 1.000 1.000 1.000 0.000
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 6
1 1 1.00 60.00 120.00
6165 4005 6390 4005 6390 4410 5715 4410 5715 4005 5940 4005
0.000 1.000 1.000 1.000 1.000 0.000
4 1 0 50 0 14 10 0.0000 4 105 105 6055 4062 P\001
4 1 0 50 0 14 10 0.0000 4 105 105 6053 3735 N\001
-6 -6
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
3330 2475 6435 2475 6435 4500 3330 4500 3330 2475
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
4050 4725 7605 4725 7605 6840 4050 6840 4050 4725 4050 4725 7605 4725 7605 6840 4050 6840 4050 4725
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
12600 6840 12600 4725 7785 4725 7785 6840 12600 6840
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
315 4725 3870 4725 3870 6840 315 6840 315 4725 315 4725 3870 4725 3870 6840 315 6840 315 4725
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
@ -489,6 +386,10 @@ Single
1845 270 3240 270 3240 2250 1845 2250 1845 270 1845 270 3240 270 3240 2250 1845 2250 1845 270
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
315 270 1620 270 1620 2250 315 2250 315 270 315 270 1620 270 1620 2250 315 2250 315 270
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
3330 2475 6435 2475 6435 4500 3330 4500 3330 2475
2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5
12285 6840 12285 4725 7785 4725 7785 6840 12285 6840
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 2 3 0 0 1 0 7 50 0 -1 0.000 0 1 0 2
1 1 1.00 60.00 120.00 1 1 1.00 60.00 120.00
4230 3690 4860 3690 4230 3690 4860 3690
@ -497,11 +398,6 @@ Single
1 1 1.00 60.00 120.00 1 1 1.00 60.00 120.00
4860 4050 4230 4050 4860 4050 4230 4050
0.000 0.000 0.000 0.000
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 7
1 1 1.00 60.00 120.00
5130 3690 5580 3690 5580 3240 3600 3240 3600 3690 3780 3690
3960 3690
0.000 1.000 1.000 1.000 1.000 1.000 0.000
3 0 0 1 0 7 50 0 -1 0.000 0 1 0 7 3 0 0 1 0 7 50 0 -1 0.000 0 1 0 7
1 1 1.00 60.00 120.00 1 1 1.00 60.00 120.00
3960 4050 3780 4050 3600 4050 3600 4410 5580 4410 5580 4050 3960 4050 3780 4050 3600 4050 3600 4410 5580 4410 5580 4050
@ -655,44 +551,49 @@ Single
3870 1800 3690 1800 3510 1800 3510 2160 5490 2160 5490 1800 3870 1800 3690 1800 3510 1800 3510 2160 5490 2160 5490 1800
5040 1800 5040 1800
0.000 1.000 1.000 1.000 1.000 1.000 0.000 0.000 1.000 1.000 1.000 1.000 1.000 0.000
4 1 0 50 0 14 10 0.0000 4 135 3240 5805 4950 Asymmetrical list starting at R(red)\001 3 0 0 1 0 7 50 0 -1 0.000 0 1 0 7
4 0 0 50 0 12 10 0.0000 4 135 3780 7875 5715 - FOREACH_ITEM(it, R, end, struct foo*, L)\001 1 1 1.00 60.00 120.00
4 0 0 50 0 12 10 0.0000 4 105 2610 7875 5490 - last element has R->P == &L\001 5130 3690 5580 3690 5580 3240 3600 3240 3600 3690 3780 3690
4 1 0 50 0 14 10 0.0000 4 135 3510 10215 4950 Symmetrical lists vs Asymmetrical lists\001 3960 3690
4 0 0 50 0 12 10 0.0000 4 135 4680 7875 6165 - FOREACH_ITEM_SAFE(it, bck, R, end, struct foo*, L)\001 0.000 1.000 1.000 1.000 1.000 1.000 0.000
4 0 0 50 0 12 10 0.0000 4 135 4500 7875 6390 does the same except that <bck> allows to delete\001 4 1 0 50 0 14 10 0.0000 4 135 3780 5805 4950 Asymmetrical list starting at R(red)\001
4 0 0 50 0 12 10 0.0000 4 135 2340 7875 6570 any node, including <it>\001 4 1 0 50 0 14 10 0.0000 4 135 4095 10215 4950 Symmetrical lists vs Asymmetrical lists\001
4 1 0 50 0 12 10 0.0000 4 135 450 5130 5355 foo_0\001 4 1 0 50 0 12 10 0.0000 4 135 525 5130 5355 foo_0\001
4 1 0 50 0 12 10 0.0000 4 135 450 6030 5355 foo_1\001 4 1 0 50 0 12 10 0.0000 4 135 525 6030 5355 foo_1\001
4 1 0 50 0 12 10 0.0000 4 135 450 6930 5355 foo_2\001 4 1 0 50 0 12 10 0.0000 4 135 525 6930 5355 foo_2\001
4 1 0 50 0 14 10 0.0000 4 135 3150 2070 4950 Symmetrical list starting at R(red)\001 4 1 0 50 0 14 10 0.0000 4 135 3675 2070 4950 Symmetrical list starting at R(red)\001
4 1 0 50 0 12 10 0.0000 4 135 450 3195 5355 foo_2\001 4 1 0 50 0 12 10 0.0000 4 135 525 3195 5355 foo_2\001
4 1 0 50 0 12 10 0.0000 4 135 450 2295 5355 foo_1\001 4 1 0 50 0 12 10 0.0000 4 135 525 2295 5355 foo_1\001
4 1 0 50 0 12 10 0.0000 4 135 450 1395 5355 foo_0\001 4 1 0 50 0 12 10 0.0000 4 135 525 1395 5355 foo_0\001
4 1 0 50 0 12 10 0.0000 4 105 270 9855 3420 foo\001 4 1 0 50 0 12 10 0.0000 4 105 315 9855 3420 foo\001
4 1 0 50 0 12 10 0.0000 4 90 90 9990 3825 E\001 4 1 0 50 0 12 10 0.0000 4 105 105 9990 3825 E\001
4 1 0 50 0 12 10 0.0000 4 135 2520 4905 3015 Replaces W with Y, returns W\001 4 1 0 50 0 14 10 0.0000 4 135 1680 7785 2655 Linking elements\001
4 1 0 50 0 14 10 0.0000 4 135 1440 7785 2655 Linking elements\001 4 1 0 50 0 12 10 0.0000 4 135 525 8235 3015 foo_1\001
4 1 0 50 0 12 10 0.0000 4 135 450 8235 3015 foo_1\001 4 1 0 50 0 12 10 0.0000 4 135 525 7335 3015 foo_0\001
4 1 0 50 0 12 10 0.0000 4 135 450 7335 3015 foo_0\001 4 1 0 50 0 14 10 0.0000 4 105 1470 2565 675 struct list *G\001
4 1 0 50 0 12 10 0.0000 4 135 3060 7425 810 adds Y(yellow) just after G(green)\001 4 1 0 50 0 14 10 0.0000 4 135 1470 2565 495 LIST_INIT(G):G\001
4 1 0 50 0 12 10 0.0000 4 135 1170 4500 855 adds W(white)\001 4 1 0 50 0 14 10 0.0000 4 135 1890 4500 495 LIST_INSERT(G,W):W\001
4 1 0 50 0 12 10 0.0000 4 135 2700 10755 810 adds Y at the queue (before G)\001 4 1 0 50 0 14 10 0.0000 4 135 3360 10665 2700 foo=LIST_ELEM(E, struct foo*, L)\001
4 1 0 50 0 12 12 0.0000 4 165 630 990 1080 P=prev\001 4 1 0 50 0 14 10 0.0000 4 135 1890 4500 675 LIST_APPEND(G,W):W\001
4 1 0 50 0 14 12 0.0000 4 135 1155 945 585 struct list\001 4 1 0 50 0 14 10 0.0000 4 135 1890 7425 540 LIST_INSERT(G,Y):Y\001
4 1 0 50 0 12 12 0.0000 4 120 630 990 855 N=next\001 4 1 0 50 0 14 10 0.0000 4 135 1890 10755 540 LIST_APPEND(G,Y):Y\001
4 1 0 50 0 12 10 0.0000 4 105 1080 2565 900 Terminates G\001 4 1 0 50 0 14 10 0.0000 4 135 1680 1755 2790 LIST_DELETE(Y):Y\001
4 1 0 50 0 14 10 0.0000 4 105 1260 2565 675 struct list *G\001 4 1 0 50 0 14 10 0.0000 4 135 1890 4905 2745 LIST_DEL_INIT(Y):Y\001
4 1 0 50 0 14 10 0.0000 4 135 1260 2565 495 LIST_INIT(G):G\001 4 1 0 50 0 12 9 0.0000 4 120 2880 10665 2925 Returns a pointer to struct foo*\001
4 1 0 50 0 14 10 0.0000 4 135 1350 4500 495 LIST_ADD(G,W):W\001 4 1 0 50 0 12 9 0.0000 4 120 2790 10665 3105 containing header E as member L\001
4 1 0 50 0 14 10 0.0000 4 135 1440 4500 675 LIST_ADDQ(G,W):W\001 4 1 0 50 0 12 9 0.0000 4 120 2700 10755 810 adds Y at the queue (before G)\001
4 1 0 50 0 14 10 0.0000 4 135 1350 7425 540 LIST_ADD(G,Y):Y\001 4 1 0 50 0 12 9 0.0000 4 120 3060 7425 810 adds Y(yellow) just after G(green)\001
4 1 0 50 0 14 10 0.0000 4 135 1440 10755 540 LIST_ADDQ(G,Y):Y\001 4 1 0 50 0 12 9 0.0000 4 120 1170 4500 855 adds W(white)\001
4 1 0 50 0 12 10 0.0000 4 135 2610 1755 3060 unlinks and returns Y(yellow)\001 4 1 0 50 0 12 9 0.0000 4 105 1080 2565 900 Terminates G\001
4 1 0 50 0 14 10 0.0000 4 135 1170 1755 2790 LIST_DEL(Y):Y\001 4 1 0 50 0 12 9 0.0000 4 90 540 990 855 N=next\001
4 1 0 50 0 14 10 0.0000 4 135 1440 4905 2745 LIST_RIWI(W,Y):W\001 4 1 0 50 0 12 9 0.0000 4 105 540 990 1080 P=prev\001
4 1 0 50 0 12 10 0.0000 4 135 2790 10665 3105 containing header E as member L\001 4 1 0 50 0 12 9 0.0000 4 120 2610 1755 3060 unlinks and returns Y(yellow)\001
4 1 0 50 0 14 10 0.0000 4 135 2880 10665 2700 foo=LIST_ELEM(E, struct foo*, L)\001 4 1 0 50 0 12 9 0.0000 4 120 2610 4905 3060 unlinks, inits, and returns Y\001
4 1 0 50 0 12 10 0.0000 4 135 2880 10665 2925 Returns a pointer to struct foo*\001 4 0 0 50 0 12 8 0.0000 4 105 2175 7875 5265 - both are empty if R->P == R\001
4 0 0 50 0 12 10 0.0000 4 135 2610 7875 5265 - both are empty if R->P == R\001 4 0 0 50 0 12 8 0.0000 4 90 2175 7875 5490 - last element has R->P == &L\001
4 0 0 50 0 12 10 0.0000 4 135 3960 7875 5940 iterates <it> through foo{0,1,2} and stops\001 4 0 0 50 0 12 8 0.0000 4 105 3150 7875 5715 - FOREACH_ITEM(it, R, end, struct foo*, L)\001
4 0 0 50 0 12 8 0.0000 4 105 3300 7875 5940 iterates <it> through foo{0,1,2} and stops\001
4 0 0 50 0 12 8 0.0000 4 105 3900 7875 6165 - FOREACH_ITEM_SAFE(it, bck, R, end, struct foo*, L)\001
4 0 0 50 0 12 8 0.0000 4 105 3750 7875 6390 does the same except that <bck> allows to delete\001
4 0 0 50 0 12 8 0.0000 4 105 1950 7875 6570 any node, including <it>\001
4 1 0 50 0 14 11 0.0000 4 135 1155 945 585 struct list\001

BIN
doc/internals/list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -87,7 +87,7 @@ static inline struct appctx *appctx_new(struct applet *applet, unsigned long thr
static inline void __appctx_free(struct appctx *appctx) static inline void __appctx_free(struct appctx *appctx)
{ {
task_destroy(appctx->t); task_destroy(appctx->t);
if (LIST_ADDED(&appctx->buffer_wait.list)) if (LIST_INLIST(&appctx->buffer_wait.list))
LIST_DEL_INIT(&appctx->buffer_wait.list); LIST_DEL_INIT(&appctx->buffer_wait.list);
pool_free(pool_head_appctx, appctx); pool_free(pool_head_appctx, appctx);

View File

@ -843,8 +843,8 @@ static inline int channel_alloc_buffer(struct channel *chn, struct buffer_wait *
if (b_alloc(&chn->buf) != NULL) if (b_alloc(&chn->buf) != NULL)
return 1; return 1;
if (!LIST_ADDED(&wait->list)) if (!LIST_INLIST(&wait->list))
LIST_ADDQ(&ti->buffer_wq, &wait->list); LIST_APPEND(&ti->buffer_wq, &wait->list);
return 0; return 0;
} }

View File

@ -545,7 +545,7 @@ static inline void conn_free(struct connection *conn)
{ {
/* If the connection is owned by the session, remove it from its list /* If the connection is owned by the session, remove it from its list
*/ */
if (LIST_ADDED(&conn->session_list)) { if (LIST_INLIST(&conn->session_list)) {
session_unown_conn(conn->owner, conn); session_unown_conn(conn->owner, conn);
} }
else if (!(conn->flags & CO_FL_PRIVATE)) { else if (!(conn->flags & CO_FL_PRIVATE)) {
@ -559,7 +559,7 @@ static inline void conn_free(struct connection *conn)
* already scheduled from cleaning but is freed before via another * already scheduled from cleaning but is freed before via another
* call. * call.
*/ */
MT_LIST_DEL(&conn->toremove_list); MT_LIST_DELETE(&conn->toremove_list);
sockaddr_free(&conn->src); sockaddr_free(&conn->src);
sockaddr_free(&conn->dst); sockaddr_free(&conn->dst);
@ -904,13 +904,13 @@ static inline int conn_get_alpn(const struct connection *conn, const char **str,
/* registers proto mux list <list>. Modifies the list element! */ /* registers proto mux list <list>. Modifies the list element! */
static inline void register_mux_proto(struct mux_proto_list *list) static inline void register_mux_proto(struct mux_proto_list *list)
{ {
LIST_ADDQ(&mux_proto_list.list, &list->list); LIST_APPEND(&mux_proto_list.list, &list->list);
} }
/* unregisters proto mux list <list> */ /* unregisters proto mux list <list> */
static inline void unregister_mux_proto(struct mux_proto_list *list) static inline void unregister_mux_proto(struct mux_proto_list *list)
{ {
LIST_DEL(&list->list); LIST_DELETE(&list->list);
LIST_INIT(&list->list); LIST_INIT(&list->list);
} }

View File

@ -39,17 +39,17 @@ struct redirect_rule *http_parse_redirect_rule(const char *file, int linenum, st
static inline void http_req_keywords_register(struct action_kw_list *kw_list) static inline void http_req_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&http_req_keywords.list, &kw_list->list); LIST_APPEND(&http_req_keywords.list, &kw_list->list);
} }
static inline void http_res_keywords_register(struct action_kw_list *kw_list) static inline void http_res_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&http_res_keywords.list, &kw_list->list); LIST_APPEND(&http_res_keywords.list, &kw_list->list);
} }
static inline void http_after_res_keywords_register(struct action_kw_list *kw_list) static inline void http_after_res_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&http_after_res_keywords.list, &kw_list->list); LIST_APPEND(&http_after_res_keywords.list, &kw_list->list);
} }
struct action_kw *action_http_req_custom(const char *kw); struct action_kw *action_http_req_custom(const char *kw);

View File

@ -45,10 +45,10 @@
#define LIST_HEAD_INIT(l) { &l, &l } #define LIST_HEAD_INIT(l) { &l, &l }
/* adds an element at the beginning of a list ; returns the element */ /* adds an element at the beginning of a list ; returns the element */
#define LIST_ADD(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); }) #define LIST_INSERT(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); (el); })
/* adds an element at the end of a list ; returns the element */ /* adds an element at the end of a list ; returns the element */
#define LIST_ADDQ(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); }) #define LIST_APPEND(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); })
/* adds the contents of a list <old> at the beginning of another list <new>. The old list head remains untouched. */ /* adds the contents of a list <old> at the beginning of another list <new>. The old list head remains untouched. */
#define LIST_SPLICE(new, old) do { \ #define LIST_SPLICE(new, old) do { \
@ -72,10 +72,10 @@
} while (0) } while (0)
/* removes an element from a list and returns it */ /* removes an element from a list and returns it */
#define LIST_DEL(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); }) #define LIST_DELETE(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); })
/* removes an element from a list, initializes it and returns it. /* removes an element from a list, initializes it and returns it.
* This is faster than LIST_DEL+LIST_INIT as we avoid reloading the pointers. * This is faster than LIST_DELETE+LIST_INIT as we avoid reloading the pointers.
*/ */
#define LIST_DEL_INIT(el) ({ \ #define LIST_DEL_INIT(el) ({ \
typeof(el) __ret = (el); \ typeof(el) __ret = (el); \
@ -99,7 +99,7 @@
/* checks if the list element <el> was added to a list or not. This only /* checks if the list element <el> was added to a list or not. This only
* works when detached elements are reinitialized (using LIST_DEL_INIT) * works when detached elements are reinitialized (using LIST_DEL_INIT)
*/ */
#define LIST_ADDED(el) ((el)->n != (el)) #define LIST_INLIST(el) ((el)->n != (el))
/* returns a pointer of type <pt> to a structure following the element /* returns a pointer of type <pt> to a structure following the element
* which contains list head <lh>, which is known as element <el> in * which contains list head <lh>, which is known as element <el> in
@ -225,7 +225,7 @@
* Returns 1 if we added the item, 0 otherwise (because it was already in a * Returns 1 if we added the item, 0 otherwise (because it was already in a
* list). * list).
*/ */
#define MT_LIST_TRY_ADD(_lh, _el) \ #define MT_LIST_TRY_INSERT(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -284,7 +284,7 @@
* Returns 1 if we added the item, 0 otherwise (because it was already in a * Returns 1 if we added the item, 0 otherwise (because it was already in a
* list). * list).
*/ */
#define MT_LIST_TRY_ADDQ(_lh, _el) \ #define MT_LIST_TRY_APPEND(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -342,7 +342,7 @@
* Add an item at the beginning of a list. * Add an item at the beginning of a list.
* It is assumed the element can't already be in a list, so it isn't checked. * It is assumed the element can't already be in a list, so it isn't checked.
*/ */
#define MT_LIST_ADD(_lh, _el) \ #define MT_LIST_INSERT(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -375,7 +375,7 @@
* Add an item at the end of a list. * Add an item at the end of a list.
* It is assumed the element can't already be in a list, so it isn't checked * It is assumed the element can't already be in a list, so it isn't checked
*/ */
#define MT_LIST_ADDQ(_lh, _el) \ #define MT_LIST_APPEND(_lh, _el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *lh = (_lh), *el = (_el); \ struct mt_list *lh = (_lh), *el = (_el); \
@ -407,8 +407,8 @@
/* /*
* Detach a list from its head. A pointer to the first element is returned * Detach a list from its head. A pointer to the first element is returned
* and the list is closed. If the list was empty, NULL is returned. This may * and the list is closed. If the list was empty, NULL is returned. This may
* exclusively be used with lists modified by MT_LIST_TRY_ADD/MT_LIST_TRY_ADDQ. This * exclusively be used with lists modified by MT_LIST_TRY_INSERT/MT_LIST_TRY_APPEND. This
* is incompatible with MT_LIST_DEL run concurrently. * is incompatible with MT_LIST_DELETE run concurrently.
* If there's at least one element, the next of the last element will always * If there's at least one element, the next of the last element will always
* be NULL. * be NULL.
*/ */
@ -455,7 +455,7 @@
/* Remove an item from a list. /* Remove an item from a list.
* Returns 1 if we removed the item, 0 otherwise (because it was in no list). * Returns 1 if we removed the item, 0 otherwise (because it was in no list).
*/ */
#define MT_LIST_DEL(_el) \ #define MT_LIST_DELETE(_el) \
({ \ ({ \
int _ret = 0; \ int _ret = 0; \
struct mt_list *el = (_el); \ struct mt_list *el = (_el); \
@ -590,7 +590,7 @@
/* checks if the list element <el> was added to a list or not. This only /* checks if the list element <el> was added to a list or not. This only
* works when detached elements are reinitialized (using LIST_DEL_INIT) * works when detached elements are reinitialized (using LIST_DEL_INIT)
*/ */
#define MT_LIST_ADDED(el) ((el)->next != (el)) #define MT_LIST_INLIST(el) ((el)->next != (el))
/* Lock an element in the list, to be sure it won't be removed. /* Lock an element in the list, to be sure it won't be removed.
* It needs to be synchronized somehow to be sure it's not removed * It needs to be synchronized somehow to be sure it's not removed
@ -723,10 +723,10 @@
p->next = n; \ p->next = n; \
} while (0); } while (0);
/* Equivalent of MT_LIST_DEL(), to be used when parsing the list with mt_list_entry_for_each_safe(). /* Equivalent of MT_LIST_DELETE(), to be used when parsing the list with mt_list_entry_for_each_safe().
* It should be the element currently parsed (tmpelt1) * It should be the element currently parsed (tmpelt1)
*/ */
#define MT_LIST_DEL_SAFE(_el) \ #define MT_LIST_DELETE_SAFE(_el) \
do { \ do { \
struct mt_list *el = (_el); \ struct mt_list *el = (_el); \
(el)->prev = (el); \ (el)->prev = (el); \
@ -734,8 +734,8 @@
(_el) = NULL; \ (_el) = NULL; \
} while (0) } while (0)
/* Safe as MT_LIST_DEL_SAFE, but it won't reinit the element */ /* Safe as MT_LIST_DELETE_SAFE, but it won't reinit the element */
#define MT_LIST_DEL_SAFE_NOINIT(_el) \ #define MT_LIST_DELETE_SAFE_NOINIT(_el) \
do { \ do { \
(_el) = NULL; \ (_el) = NULL; \
} while (0) } while (0)
@ -746,10 +746,10 @@
* the list is passed in <list_head>. A temporary variable <back> of same type * the list is passed in <list_head>. A temporary variable <back> of same type
* as <item> is needed so that <item> may safely be deleted if needed. * as <item> is needed so that <item> may safely be deleted if needed.
* tmpelt1 is a temporary struct mt_list *, and tmpelt2 is a temporary * tmpelt1 is a temporary struct mt_list *, and tmpelt2 is a temporary
* struct mt_list, used internally, both are needed for MT_LIST_DEL_SAFE. * struct mt_list, used internally, both are needed for MT_LIST_DELETE_SAFE.
* Example: list_for_each_entry_safe(cur_acl, tmp, known_acl, list, elt1, elt2) * Example: list_for_each_entry_safe(cur_acl, tmp, known_acl, list, elt1, elt2)
* { ... }; * { ... };
* If you want to remove the current element, please use MT_LIST_DEL_SAFE. * If you want to remove the current element, please use MT_LIST_DELETE_SAFE.
*/ */
#define mt_list_for_each_entry_safe(item, list_head, member, tmpelt, tmpelt2) \ #define mt_list_for_each_entry_safe(item, list_head, member, tmpelt, tmpelt2) \
for ((tmpelt) = NULL; (tmpelt) != MT_LIST_BUSY; ({ \ for ((tmpelt) = NULL; (tmpelt) != MT_LIST_BUSY; ({ \

View File

@ -194,7 +194,7 @@ static inline struct bind_conf *bind_conf_alloc(struct proxy *fe, const char *fi
goto err; goto err;
} }
LIST_ADDQ(&fe->conf.bind, &bind_conf->by_fe); LIST_APPEND(&fe->conf.bind, &bind_conf->by_fe);
bind_conf->settings.ux.uid = -1; bind_conf->settings.ux.uid = -1;
bind_conf->settings.ux.gid = -1; bind_conf->settings.ux.gid = -1;
bind_conf->settings.ux.mode = 0; bind_conf->settings.ux.mode = 0;

View File

@ -241,8 +241,8 @@ static inline void *pool_get_from_cache(struct pool_head *pool)
ph->count--; ph->count--;
pool_cache_bytes -= pool->size; pool_cache_bytes -= pool->size;
pool_cache_count--; pool_cache_count--;
LIST_DEL(&item->by_pool); LIST_DELETE(&item->by_pool);
LIST_DEL(&item->by_lru); LIST_DELETE(&item->by_lru);
#ifdef DEBUG_MEMORY_POOLS #ifdef DEBUG_MEMORY_POOLS
/* keep track of where the element was allocated from */ /* keep track of where the element was allocated from */
*POOL_LINK(pool, item) = (void *)pool; *POOL_LINK(pool, item) = (void *)pool;

View File

@ -123,7 +123,7 @@ static inline void session_unown_conn(struct session *sess, struct connection *c
* conn->owner that points to a dead session, but in this case the * conn->owner that points to a dead session, but in this case the
* element is not linked. * element is not linked.
*/ */
if (!LIST_ADDED(&conn->session_list)) if (!LIST_INLIST(&conn->session_list))
return; return;
if (conn->flags & CO_FL_SESS_IDLE) if (conn->flags & CO_FL_SESS_IDLE)
@ -133,7 +133,7 @@ static inline void session_unown_conn(struct session *sess, struct connection *c
list_for_each_entry(srv_list, &sess->srv_list, srv_list) { list_for_each_entry(srv_list, &sess->srv_list, srv_list) {
if (srv_list->target == conn->target) { if (srv_list->target == conn->target) {
if (LIST_ISEMPTY(&srv_list->conn_list)) { if (LIST_ISEMPTY(&srv_list->conn_list)) {
LIST_DEL(&srv_list->srv_list); LIST_DELETE(&srv_list->srv_list);
pool_free(pool_head_sess_srv_list, srv_list); pool_free(pool_head_sess_srv_list, srv_list);
} }
break; break;
@ -168,9 +168,9 @@ static inline int session_add_conn(struct session *sess, struct connection *conn
return 0; return 0;
srv_list->target = target; srv_list->target = target;
LIST_INIT(&srv_list->conn_list); LIST_INIT(&srv_list->conn_list);
LIST_ADDQ(&sess->srv_list, &srv_list->srv_list); LIST_APPEND(&sess->srv_list, &srv_list->srv_list);
} }
LIST_ADDQ(&srv_list->conn_list, &conn->session_list); LIST_APPEND(&srv_list->conn_list, &conn->session_list);
return 1; return 1;
} }

View File

@ -194,24 +194,24 @@ static inline void shctx_block_append_hot(struct shared_context *shctx,
struct shared_block *s) struct shared_block *s)
{ {
shctx->nbav--; shctx->nbav--;
LIST_DEL(&s->list); LIST_DELETE(&s->list);
LIST_ADD(head, &s->list); LIST_INSERT(head, &s->list);
} }
static inline void shctx_block_set_hot(struct shared_context *shctx, static inline void shctx_block_set_hot(struct shared_context *shctx,
struct shared_block *s) struct shared_block *s)
{ {
shctx->nbav--; shctx->nbav--;
LIST_DEL(&s->list); LIST_DELETE(&s->list);
LIST_ADDQ(&shctx->hot, &s->list); LIST_APPEND(&shctx->hot, &s->list);
} }
static inline void shctx_block_set_avail(struct shared_context *shctx, static inline void shctx_block_set_avail(struct shared_context *shctx,
struct shared_block *s) struct shared_block *s)
{ {
shctx->nbav++; shctx->nbav++;
LIST_DEL(&s->list); LIST_DELETE(&s->list);
LIST_ADDQ(&shctx->avail, &s->list); LIST_APPEND(&shctx->avail, &s->list);
} }
#endif /* __HAPROXY_SHCTX_H */ #endif /* __HAPROXY_SHCTX_H */

View File

@ -284,12 +284,12 @@ static inline void stream_inc_http_fail_ctr(struct stream *s)
static inline void stream_add_srv_conn(struct stream *strm, struct server *srv) static inline void stream_add_srv_conn(struct stream *strm, struct server *srv)
{ {
/* note: this inserts in reverse order but we do not care, it's only /* note: this inserts in reverse order but we do not care, it's only
* used for massive kills (i.e. almost never). MT_LIST_ADD() is a bit * used for massive kills (i.e. almost never). MT_LIST_INSERT() is a bit
* faster than MT_LIST_ADDQ under contention due to a faster recovery * faster than MT_LIST_APPEND under contention due to a faster recovery
* from a conflict with an adjacent MT_LIST_DEL, and using it improves * from a conflict with an adjacent MT_LIST_DELETE, and using it improves
* the performance by about 3% on 32-cores. * the performance by about 3% on 32-cores.
*/ */
MT_LIST_ADD(&srv->per_thr[tid].streams, &strm->by_srv); MT_LIST_INSERT(&srv->per_thr[tid].streams, &strm->by_srv);
HA_ATOMIC_STORE(&strm->srv_conn, srv); HA_ATOMIC_STORE(&strm->srv_conn, srv);
} }
@ -300,7 +300,7 @@ static inline void stream_del_srv_conn(struct stream *strm)
if (!srv) if (!srv)
return; return;
MT_LIST_DEL(&strm->by_srv); MT_LIST_DELETE(&strm->by_srv);
HA_ATOMIC_STORE(&strm->srv_conn, NULL); HA_ATOMIC_STORE(&strm->srv_conn, NULL);
} }

View File

@ -397,13 +397,13 @@ static inline void _tasklet_wakeup_on(struct tasklet *tl, int thr, const char *f
/* Try to remove a tasklet from the list. This call is inherently racy and may /* Try to remove a tasklet from the list. This call is inherently racy and may
* only be performed on the thread that was supposed to dequeue this tasklet. * only be performed on the thread that was supposed to dequeue this tasklet.
* This way it is safe to call MT_LIST_DEL without first removing the * This way it is safe to call MT_LIST_DELETE without first removing the
* TASK_IN_LIST bit, which must absolutely be removed afterwards in case * TASK_IN_LIST bit, which must absolutely be removed afterwards in case
* another thread would want to wake this tasklet up in parallel. * another thread would want to wake this tasklet up in parallel.
*/ */
static inline void tasklet_remove_from_tasklet_list(struct tasklet *t) static inline void tasklet_remove_from_tasklet_list(struct tasklet *t)
{ {
if (MT_LIST_DEL((struct mt_list *)&t->list)) { if (MT_LIST_DELETE((struct mt_list *)&t->list)) {
_HA_ATOMIC_AND(&t->state, ~TASK_IN_LIST); _HA_ATOMIC_AND(&t->state, ~TASK_IN_LIST);
_HA_ATOMIC_DEC(&task_per_thread[t->tid >= 0 ? t->tid : tid].rq_total); _HA_ATOMIC_DEC(&task_per_thread[t->tid >= 0 ? t->tid : tid].rq_total);
} }
@ -531,7 +531,7 @@ static inline void task_destroy(struct task *t)
/* Should only be called by the thread responsible for the tasklet */ /* Should only be called by the thread responsible for the tasklet */
static inline void tasklet_free(struct tasklet *tl) static inline void tasklet_free(struct tasklet *tl)
{ {
if (MT_LIST_DEL((struct mt_list *)&tl->list)) if (MT_LIST_DELETE((struct mt_list *)&tl->list))
_HA_ATOMIC_DEC(&task_per_thread[tl->tid >= 0 ? tl->tid : tid].rq_total); _HA_ATOMIC_DEC(&task_per_thread[tl->tid >= 0 ? tl->tid : tid].rq_total);
#ifdef DEBUG_TASK #ifdef DEBUG_TASK
@ -595,8 +595,8 @@ static inline struct notification *notification_new(struct list *purge, struct l
struct notification *com = pool_alloc(pool_head_notification); struct notification *com = pool_alloc(pool_head_notification);
if (!com) if (!com)
return NULL; return NULL;
LIST_ADDQ(purge, &com->purge_me); LIST_APPEND(purge, &com->purge_me);
LIST_ADDQ(event, &com->wake_me); LIST_APPEND(event, &com->wake_me);
HA_SPIN_INIT(&com->lock); HA_SPIN_INIT(&com->lock);
com->task = wakeup; com->task = wakeup;
return com; return com;
@ -616,7 +616,7 @@ static inline void notification_purge(struct list *purge)
/* Delete all pending communication signals. */ /* Delete all pending communication signals. */
list_for_each_entry_safe(com, back, purge, purge_me) { list_for_each_entry_safe(com, back, purge, purge_me) {
HA_SPIN_LOCK(NOTIF_LOCK, &com->lock); HA_SPIN_LOCK(NOTIF_LOCK, &com->lock);
LIST_DEL(&com->purge_me); LIST_DELETE(&com->purge_me);
if (!com->task) { if (!com->task) {
HA_SPIN_UNLOCK(NOTIF_LOCK, &com->lock); HA_SPIN_UNLOCK(NOTIF_LOCK, &com->lock);
pool_free(pool_head_notification, com); pool_free(pool_head_notification, com);
@ -642,7 +642,7 @@ static inline void notification_gc(struct list *purge)
list_for_each_entry_safe (com, back, purge, purge_me) { list_for_each_entry_safe (com, back, purge, purge_me) {
if (com->task) if (com->task)
continue; continue;
LIST_DEL(&com->purge_me); LIST_DELETE(&com->purge_me);
pool_free(pool_head_notification, com); pool_free(pool_head_notification, com);
} }
} }
@ -660,7 +660,7 @@ static inline void notification_wake(struct list *wake)
/* Wake task and delete all pending communication signals. */ /* Wake task and delete all pending communication signals. */
list_for_each_entry_safe(com, back, wake, wake_me) { list_for_each_entry_safe(com, back, wake, wake_me) {
HA_SPIN_LOCK(NOTIF_LOCK, &com->lock); HA_SPIN_LOCK(NOTIF_LOCK, &com->lock);
LIST_DEL(&com->wake_me); LIST_DELETE(&com->wake_me);
if (!com->task) { if (!com->task) {
HA_SPIN_UNLOCK(NOTIF_LOCK, &com->lock); HA_SPIN_UNLOCK(NOTIF_LOCK, &com->lock);
pool_free(pool_head_notification, com); pool_free(pool_head_notification, com);
@ -682,7 +682,7 @@ static inline int notification_registered(struct list *wake)
/* adds list item <item> to work list <work> and wake up the associated task */ /* adds list item <item> to work list <work> and wake up the associated task */
static inline void work_list_add(struct work_list *work, struct mt_list *item) static inline void work_list_add(struct work_list *work, struct mt_list *item)
{ {
MT_LIST_TRY_ADDQ(&work->head, item); MT_LIST_TRY_APPEND(&work->head, item);
task_wakeup(work->task, TASK_WOKEN_OTHER); task_wakeup(work->task, TASK_WOKEN_OTHER);
} }

View File

@ -116,7 +116,7 @@ static inline void action_kw_tcp_check_build_list(struct buffer *chk)
static inline void tcp_check_keywords_register(struct action_kw_list *kw_list) static inline void tcp_check_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&tcp_check_keywords.list, &kw_list->list); LIST_APPEND(&tcp_check_keywords.list, &kw_list->list);
} }
#endif /* _HAPROXY_TCPCHECK_H */ #endif /* _HAPROXY_TCPCHECK_H */

View File

@ -156,7 +156,7 @@ static inline void trace_register_source(struct trace_source *source)
source->sink = NULL; source->sink = NULL;
source->state = TRACE_STATE_STOPPED; source->state = TRACE_STATE_STOPPED;
source->lockon_ptr = NULL; source->lockon_ptr = NULL;
LIST_ADDQ(&trace_sources, &source->source_link); LIST_APPEND(&trace_sources, &source->source_link);
} }
#endif /* _HAPROXY_TRACE_H */ #endif /* _HAPROXY_TRACE_H */

View File

@ -1016,7 +1016,7 @@ static inline void quic_pktns_discard(struct quic_pktns *pktns,
pkt = eb64_entry(&node->node, struct quic_tx_packet, pn_node); pkt = eb64_entry(&node->node, struct quic_tx_packet, pn_node);
node = eb64_next(node); node = eb64_next(node);
list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) { list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) {
LIST_DEL(&frm->list); LIST_DELETE(&frm->list);
pool_free(pool_head_quic_tx_frm, frm); pool_free(pool_head_quic_tx_frm, frm);
} }
eb64_delete(&pkt->pn_node); eb64_delete(&pkt->pn_node);
@ -1188,14 +1188,14 @@ static inline void quic_rx_packet_refdec(struct quic_rx_packet *pkt)
static inline void quic_rx_packet_list_addq(struct list *list, static inline void quic_rx_packet_list_addq(struct list *list,
struct quic_rx_packet *pkt) struct quic_rx_packet *pkt)
{ {
LIST_ADDQ(list, &pkt->list); LIST_APPEND(list, &pkt->list);
quic_rx_packet_refinc(pkt); quic_rx_packet_refinc(pkt);
} }
/* Remove <pkt> RX packet from <list>, decrementing its reference counter. */ /* Remove <pkt> RX packet from <list>, decrementing its reference counter. */
static inline void quic_rx_packet_list_del(struct quic_rx_packet *pkt) static inline void quic_rx_packet_list_del(struct quic_rx_packet *pkt)
{ {
LIST_DEL(&pkt->list); LIST_DELETE(&pkt->list);
quic_rx_packet_refdec(pkt); quic_rx_packet_refdec(pkt);
} }

View File

@ -49,7 +49,7 @@ static inline enum acl_test_res pat2acl(struct pattern *pat)
*/ */
void acl_register_keywords(struct acl_kw_list *kwl) void acl_register_keywords(struct acl_kw_list *kwl)
{ {
LIST_ADDQ(&acl_keywords.list, &kwl->list); LIST_APPEND(&acl_keywords.list, &kwl->list);
} }
/* /*
@ -57,7 +57,7 @@ void acl_register_keywords(struct acl_kw_list *kwl)
*/ */
void acl_unregister_keywords(struct acl_kw_list *kwl) void acl_unregister_keywords(struct acl_kw_list *kwl)
{ {
LIST_DEL(&kwl->list); LIST_DELETE(&kwl->list);
LIST_INIT(&kwl->list); LIST_INIT(&kwl->list);
} }
@ -278,7 +278,7 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
if (!conv_expr) if (!conv_expr)
goto out_free_smp; goto out_free_smp;
LIST_ADDQ(&(smp->conv_exprs), &(conv_expr->list)); LIST_APPEND(&(smp->conv_exprs), &(conv_expr->list));
conv_expr->conv = conv; conv_expr->conv = conv;
acl_conv_found = 1; acl_conv_found = 1;
@ -653,7 +653,7 @@ struct acl *prune_acl(struct acl *acl) {
free(acl->name); free(acl->name);
list_for_each_entry_safe(expr, exprb, &acl->expr, list) { list_for_each_entry_safe(expr, exprb, &acl->expr, list) {
LIST_DEL(&expr->list); LIST_DELETE(&expr->list);
prune_acl_expr(expr); prune_acl_expr(expr);
free(expr); free(expr);
} }
@ -721,7 +721,7 @@ struct acl *parse_acl(const char **args, struct list *known_acl, char **err, str
} }
LIST_INIT(&cur_acl->expr); LIST_INIT(&cur_acl->expr);
LIST_ADDQ(known_acl, &cur_acl->list); LIST_APPEND(known_acl, &cur_acl->list);
cur_acl->name = name; cur_acl->name = name;
} }
@ -731,7 +731,7 @@ struct acl *parse_acl(const char **args, struct list *known_acl, char **err, str
*/ */
cur_acl->use |= acl_expr->smp->fetch->use; cur_acl->use |= acl_expr->smp->fetch->use;
cur_acl->val |= acl_expr->smp->fetch->val; cur_acl->val |= acl_expr->smp->fetch->val;
LIST_ADDQ(&cur_acl->expr, &acl_expr->list); LIST_APPEND(&cur_acl->expr, &acl_expr->list);
return cur_acl; return cur_acl;
out_free_name: out_free_name:
@ -824,9 +824,9 @@ static struct acl *find_acl_default(const char *acl_name, struct list *known_acl
cur_acl->use |= acl_expr->smp->fetch->use; cur_acl->use |= acl_expr->smp->fetch->use;
cur_acl->val |= acl_expr->smp->fetch->val; cur_acl->val |= acl_expr->smp->fetch->val;
LIST_INIT(&cur_acl->expr); LIST_INIT(&cur_acl->expr);
LIST_ADDQ(&cur_acl->expr, &acl_expr->list); LIST_APPEND(&cur_acl->expr, &acl_expr->list);
if (known_acl) if (known_acl)
LIST_ADDQ(known_acl, &cur_acl->list); LIST_APPEND(known_acl, &cur_acl->list);
return cur_acl; return cur_acl;
@ -990,9 +990,9 @@ struct acl_cond *parse_acl_cond(const char **args, struct list *known_acl,
goto out_free_term; goto out_free_term;
} }
LIST_INIT(&cur_suite->terms); LIST_INIT(&cur_suite->terms);
LIST_ADDQ(&cond->suites, &cur_suite->list); LIST_APPEND(&cond->suites, &cur_suite->list);
} }
LIST_ADDQ(&cur_suite->terms, &cur_term->list); LIST_APPEND(&cur_suite->terms, &cur_term->list);
neg = 0; neg = 0;
} }
@ -1313,10 +1313,10 @@ void free_acl_cond(struct acl_cond *cond)
list_for_each_entry_safe(suite, suiteb, &cond->suites, list) { list_for_each_entry_safe(suite, suiteb, &cond->suites, list) {
list_for_each_entry_safe(term, termb, &suite->terms, list) { list_for_each_entry_safe(term, termb, &suite->terms, list) {
LIST_DEL(&term->list); LIST_DELETE(&term->list);
free(term); free(term);
} }
LIST_DEL(&suite->list); LIST_DELETE(&suite->list);
free(suite); free(suite);
} }

View File

@ -289,7 +289,7 @@ void free_act_rules(struct list *rules)
struct act_rule *rule, *ruleb; struct act_rule *rule, *ruleb;
list_for_each_entry_safe(rule, ruleb, rules, list) { list_for_each_entry_safe(rule, ruleb, rules, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
free_acl_cond(rule->cond); free_acl_cond(rule->cond);
if (rule->release_ptr) if (rule->release_ptr)
rule->release_ptr(rule); rule->release_ptr(rule);

View File

@ -78,7 +78,7 @@ struct arg_list *arg_list_add(struct arg_list *orig, struct arg *arg, int pos)
if (new) { if (new) {
new->arg = arg; new->arg = arg;
new->arg_pos = pos; new->arg_pos = pos;
LIST_ADDQ(&orig->list, &new->list); LIST_APPEND(&orig->list, &new->list);
} }
return new; return new;
} }

View File

@ -1472,7 +1472,7 @@ int connect_server(struct stream *s)
if (tokill_conn) { if (tokill_conn) {
/* We got one, put it into the concerned thread's to kill list, and wake it's kill task */ /* We got one, put it into the concerned thread's to kill list, and wake it's kill task */
MT_LIST_ADDQ(&idle_conns[i].toremove_conns, MT_LIST_APPEND(&idle_conns[i].toremove_conns,
(struct mt_list *)&tokill_conn->toremove_list); (struct mt_list *)&tokill_conn->toremove_list);
task_wakeup(idle_conns[i].cleanup_task, TASK_WOKEN_OTHER); task_wakeup(idle_conns[i].cleanup_task, TASK_WOKEN_OTHER);
break; break;

View File

@ -1581,7 +1581,7 @@ static int parse_cache_rule(struct proxy *proxy, const char *name, struct act_ru
fconf->id = cache_store_flt_id; fconf->id = cache_store_flt_id;
fconf->conf = cconf; fconf->conf = cconf;
fconf->ops = &cache_ops; fconf->ops = &cache_ops;
LIST_ADDQ(&proxy->filter_configs, &fconf->list); LIST_APPEND(&proxy->filter_configs, &fconf->list);
rule->arg.act.p[0] = cconf; rule->arg.act.p[0] = cconf;
return 1; return 1;
@ -2052,7 +2052,7 @@ int cfg_post_parse_section_cache()
/* add to the list of cache to init and reinit tmp_cache_config /* add to the list of cache to init and reinit tmp_cache_config
* for next cache section, if any. * for next cache section, if any.
*/ */
LIST_ADDQ(&caches_config, &tmp_cache_config->list); LIST_APPEND(&caches_config, &tmp_cache_config->list);
tmp_cache_config = NULL; tmp_cache_config = NULL;
return err_code; return err_code;
} }
@ -2091,8 +2091,8 @@ int post_check_cache()
memcpy(shctx->data, cache_config, sizeof(struct cache)); memcpy(shctx->data, cache_config, sizeof(struct cache));
cache = (struct cache *)shctx->data; cache = (struct cache *)shctx->data;
cache->entries = EB_ROOT; cache->entries = EB_ROOT;
LIST_ADDQ(&caches, &cache->list); LIST_APPEND(&caches, &cache->list);
LIST_DEL(&cache_config->list); LIST_DELETE(&cache_config->list);
free(cache_config); free(cache_config);
/* Find all references for this cache in the existing filters /* Find all references for this cache in the existing filters
@ -2511,7 +2511,7 @@ parse_cache_flt(char **args, int *cur_arg, struct proxy *px,
} }
/* Remove the implicit filter. <cconf> is kept for the explicit one */ /* Remove the implicit filter. <cconf> is kept for the explicit one */
LIST_DEL(&f->list); LIST_DELETE(&f->list);
free(f); free(f);
free(name); free(name);
break; break;

View File

@ -1216,7 +1216,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
(curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
file, linenum); file, linenum);
LIST_ADDQ(&curproxy->http_req_rules, &rule->list); LIST_APPEND(&curproxy->http_req_rules, &rule->list);
} }
else if (strcmp(args[0], "http-response") == 0) { /* response access control */ else if (strcmp(args[0], "http-response") == 0) { /* response access control */
struct act_rule *rule; struct act_rule *rule;
@ -1246,7 +1246,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
(curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, (curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR,
file, linenum); file, linenum);
LIST_ADDQ(&curproxy->http_res_rules, &rule->list); LIST_APPEND(&curproxy->http_res_rules, &rule->list);
} }
else if (strcmp(args[0], "http-after-response") == 0) { else if (strcmp(args[0], "http-after-response") == 0) {
struct act_rule *rule; struct act_rule *rule;
@ -1276,7 +1276,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
(curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, (curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR,
file, linenum); file, linenum);
LIST_ADDQ(&curproxy->http_after_res_rules, &rule->list); LIST_APPEND(&curproxy->http_after_res_rules, &rule->list);
} }
else if (strcmp(args[0], "http-send-name-header") == 0) { /* send server name in request header */ else if (strcmp(args[0], "http-send-name-header") == 0) { /* send server name in request header */
/* set the header name and length into the proxy structure */ /* set the header name and length into the proxy structure */
@ -1320,7 +1320,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
goto out; goto out;
} }
LIST_ADDQ(&curproxy->redirect_rules, &rule->list); LIST_APPEND(&curproxy->redirect_rules, &rule->list);
err_code |= warnif_misplaced_redirect(curproxy, file, linenum, args[0]); err_code |= warnif_misplaced_redirect(curproxy, file, linenum, args[0]);
err_code |= warnif_cond_conflicts(rule->cond, err_code |= warnif_cond_conflicts(rule->cond,
(curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
@ -1381,7 +1381,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
goto alloc_error; goto alloc_error;
} }
LIST_INIT(&rule->list); LIST_INIT(&rule->list);
LIST_ADDQ(&curproxy->switching_rules, &rule->list); LIST_APPEND(&curproxy->switching_rules, &rule->list);
} }
else if (strcmp(args[0], "use-server") == 0) { else if (strcmp(args[0], "use-server") == 0) {
struct server_rule *rule; struct server_rule *rule;
@ -1437,7 +1437,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
goto alloc_error; goto alloc_error;
} }
LIST_INIT(&rule->list); LIST_INIT(&rule->list);
LIST_ADDQ(&curproxy->server_rules, &rule->list); LIST_APPEND(&curproxy->server_rules, &rule->list);
curproxy->be_req_ana |= AN_REQ_SRV_RULES; curproxy->be_req_ana |= AN_REQ_SRV_RULES;
} }
else if ((strcmp(args[0], "force-persist") == 0) || else if ((strcmp(args[0], "force-persist") == 0) ||
@ -1486,7 +1486,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
rule->type = PERSIST_TYPE_IGNORE; rule->type = PERSIST_TYPE_IGNORE;
} }
LIST_INIT(&rule->list); LIST_INIT(&rule->list);
LIST_ADDQ(&curproxy->persist_rules, &rule->list); LIST_APPEND(&curproxy->persist_rules, &rule->list);
} }
else if (strcmp(args[0], "stick-table") == 0) { else if (strcmp(args[0], "stick-table") == 0) {
struct stktable *other; struct stktable *other;
@ -1653,9 +1653,9 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
rule->table.name = name ? strdup(name) : NULL; rule->table.name = name ? strdup(name) : NULL;
LIST_INIT(&rule->list); LIST_INIT(&rule->list);
if (flags & STK_ON_RSP) if (flags & STK_ON_RSP)
LIST_ADDQ(&curproxy->storersp_rules, &rule->list); LIST_APPEND(&curproxy->storersp_rules, &rule->list);
else else
LIST_ADDQ(&curproxy->sticking_rules, &rule->list); LIST_APPEND(&curproxy->sticking_rules, &rule->list);
} }
else if (strcmp(args[0], "stats") == 0) { else if (strcmp(args[0], "stats") == 0) {
if (!(curproxy->cap & PR_CAP_DEF) && curproxy->uri_auth == curr_defproxy->uri_auth) if (!(curproxy->cap & PR_CAP_DEF) && curproxy->uri_auth == curr_defproxy->uri_auth)
@ -1701,7 +1701,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
} }
rule->cond = cond; rule->cond = cond;
LIST_INIT(&rule->list); LIST_INIT(&rule->list);
LIST_ADDQ(&curproxy->uri_auth->admin_rules, &rule->list); LIST_APPEND(&curproxy->uri_auth->admin_rules, &rule->list);
} else if (strcmp(args[1], "uri") == 0) { } else if (strcmp(args[1], "uri") == 0) {
if (*(args[2]) == 0) { if (*(args[2]) == 0) {
ha_alert("parsing [%s:%d] : 'uri' needs an URI prefix.\n", file, linenum); ha_alert("parsing [%s:%d] : 'uri' needs an URI prefix.\n", file, linenum);
@ -1768,7 +1768,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
err_code |= warnif_cond_conflicts(rule->cond, err_code |= warnif_cond_conflicts(rule->cond,
(curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
file, linenum); file, linenum);
LIST_ADDQ(&curproxy->uri_auth->http_req_rules, &rule->list); LIST_APPEND(&curproxy->uri_auth->http_req_rules, &rule->list);
} else if (strcmp(args[1], "auth") == 0) { } else if (strcmp(args[1], "auth") == 0) {
if (*(args[2]) == 0) { if (*(args[2]) == 0) {
@ -2418,7 +2418,7 @@ stats_error_parsing:
err_code |= ERR_ALERT | ERR_FATAL; err_code |= ERR_ALERT | ERR_FATAL;
goto out; goto out;
} }
LIST_ADDQ(&curproxy->mon_fail_cond, &cond->list); LIST_APPEND(&curproxy->mon_fail_cond, &cond->list);
} }
else { else {
ha_alert("parsing [%s:%d] : '%s' only supports 'fail'.\n", file, linenum, args[0]); ha_alert("parsing [%s:%d] : '%s' only supports 'fail'.\n", file, linenum, args[0]);

View File

@ -1181,7 +1181,7 @@ static int bind_parse_tls_ticket_keys(char **args, int cur_arg, struct proxy *px
HA_RWLOCK_INIT(&keys_ref->lock); HA_RWLOCK_INIT(&keys_ref->lock);
conf->keys_ref = keys_ref; conf->keys_ref = keys_ref;
LIST_ADD(&tlskeys_reference, &keys_ref->list); LIST_INSERT(&tlskeys_reference, &keys_ref->list);
return 0; return 0;

View File

@ -2372,7 +2372,7 @@ int check_config_validity()
/* Only one element in the list, a simple string: free the expression and /* Only one element in the list, a simple string: free the expression and
* fall back to static rule * fall back to static rule
*/ */
LIST_DEL(&node->list); LIST_DELETE(&node->list);
free(node->arg); free(node->arg);
free(node); free(node);
} }
@ -2437,7 +2437,7 @@ int check_config_validity()
/* Only one element in the list, a simple string: free the expression and /* Only one element in the list, a simple string: free the expression and
* fall back to static rule * fall back to static rule
*/ */
LIST_DEL(&node->list); LIST_DELETE(&node->list);
free(node->arg); free(node->arg);
free(node); free(node);
} }
@ -2643,7 +2643,7 @@ int check_config_validity()
break; break;
} }
LIST_ADDQ(&curproxy->uri_auth->http_req_rules, &rule->list); LIST_APPEND(&curproxy->uri_auth->http_req_rules, &rule->list);
if (curproxy->uri_auth->auth_realm) { if (curproxy->uri_auth->auth_realm) {
ha_free(&curproxy->uri_auth->auth_realm); ha_free(&curproxy->uri_auth->auth_realm);
@ -3766,7 +3766,7 @@ out_uri_auth_compat:
*/ */
void cfg_register_keywords(struct cfg_kw_list *kwl) void cfg_register_keywords(struct cfg_kw_list *kwl)
{ {
LIST_ADDQ(&cfg_keywords.list, &kwl->list); LIST_APPEND(&cfg_keywords.list, &kwl->list);
} }
/* /*
@ -3774,7 +3774,7 @@ void cfg_register_keywords(struct cfg_kw_list *kwl)
*/ */
void cfg_unregister_keywords(struct cfg_kw_list *kwl) void cfg_unregister_keywords(struct cfg_kw_list *kwl)
{ {
LIST_DEL(&kwl->list); LIST_DELETE(&kwl->list);
LIST_INIT(&kwl->list); LIST_INIT(&kwl->list);
} }
@ -3806,7 +3806,7 @@ int cfg_register_section(char *section_name,
cs->section_parser = section_parser; cs->section_parser = section_parser;
cs->post_section_parser = post_section_parser; cs->post_section_parser = post_section_parser;
LIST_ADDQ(&sections, &cs->list); LIST_APPEND(&sections, &cs->list);
return 1; return 1;
} }
@ -3827,7 +3827,7 @@ int cfg_register_postparser(char *name, int (*func)())
cp->name = name; cp->name = name;
cp->func = func; cp->func = func;
LIST_ADDQ(&postparsers, &cp->list); LIST_APPEND(&postparsers, &cp->list);
return 1; return 1;
} }
@ -3840,7 +3840,7 @@ void cfg_unregister_sections(void)
struct cfg_section *cs, *ics; struct cfg_section *cs, *ics;
list_for_each_entry_safe(cs, ics, &sections, list) { list_for_each_entry_safe(cs, ics, &sections, list) {
LIST_DEL(&cs->list); LIST_DELETE(&cs->list);
free(cs); free(cs);
} }
} }
@ -3850,8 +3850,8 @@ void cfg_backup_sections(struct list *backup_sections)
struct cfg_section *cs, *ics; struct cfg_section *cs, *ics;
list_for_each_entry_safe(cs, ics, &sections, list) { list_for_each_entry_safe(cs, ics, &sections, list) {
LIST_DEL(&cs->list); LIST_DELETE(&cs->list);
LIST_ADDQ(backup_sections, &cs->list); LIST_APPEND(backup_sections, &cs->list);
} }
} }
@ -3860,8 +3860,8 @@ void cfg_restore_sections(struct list *backup_sections)
struct cfg_section *cs, *ics; struct cfg_section *cs, *ics;
list_for_each_entry_safe(cs, ics, backup_sections, list) { list_for_each_entry_safe(cs, ics, backup_sections, list) {
LIST_DEL(&cs->list); LIST_DELETE(&cs->list);
LIST_ADDQ(&sections, &cs->list); LIST_APPEND(&sections, &cs->list);
} }
} }

View File

@ -1273,11 +1273,11 @@ struct buffer *check_get_buf(struct check *check, struct buffer *bptr)
{ {
struct buffer *buf = NULL; struct buffer *buf = NULL;
if (likely(!LIST_ADDED(&check->buf_wait.list)) && if (likely(!LIST_INLIST(&check->buf_wait.list)) &&
unlikely((buf = b_alloc(bptr)) == NULL)) { unlikely((buf = b_alloc(bptr)) == NULL)) {
check->buf_wait.target = check; check->buf_wait.target = check;
check->buf_wait.wakeup_cb = check_buf_available; check->buf_wait.wakeup_cb = check_buf_available;
LIST_ADDQ(&ti->buffer_wq, &check->buf_wait.list); LIST_APPEND(&ti->buffer_wq, &check->buf_wait.list);
} }
return buf; return buf;
} }
@ -1701,7 +1701,7 @@ static int init_srv_agent_check(struct server *srv)
} }
chk->action = TCPCHK_ACT_CONNECT; chk->action = TCPCHK_ACT_CONNECT;
chk->connect.options = (TCPCHK_OPT_DEFAULT_CONNECT|TCPCHK_OPT_IMPLICIT); chk->connect.options = (TCPCHK_OPT_DEFAULT_CONNECT|TCPCHK_OPT_IMPLICIT);
LIST_ADD(srv->agent.tcpcheck_rules->list, &chk->list); LIST_INSERT(srv->agent.tcpcheck_rules->list, &chk->list);
} }
@ -1874,7 +1874,7 @@ static int srv_parse_agent_check(char **args, int *cur_arg, struct proxy *curpx,
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""}, chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
1, curpx, &rs->rules, TCPCHK_RULES_AGENT_CHK, 1, curpx, &rs->rules, TCPCHK_RULES_AGENT_CHK,
@ -1885,7 +1885,7 @@ static int srv_parse_agent_check(char **args, int *cur_arg, struct proxy *curpx,
} }
chk->expect.custom = tcpcheck_agent_expect_reply; chk->expect.custom = tcpcheck_agent_expect_reply;
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -1986,7 +1986,7 @@ int set_srv_agent_send(struct server *srv, const char *send)
var->data.u.str.area = str; var->data.u.str.area = str;
var->data.u.str.data = strlen(str); var->data.u.str.data = strlen(str);
LIST_INIT(&var->list); LIST_INIT(&var->list);
LIST_ADDQ(&rules->preset_vars, &var->list); LIST_APPEND(&rules->preset_vars, &var->list);
return 1; return 1;

View File

@ -338,7 +338,7 @@ struct cli_kw* cli_find_kw_exact(char **args)
void cli_register_kw(struct cli_kw_list *kw_list) void cli_register_kw(struct cli_kw_list *kw_list)
{ {
LIST_ADDQ(&cli_keywords.list, &kw_list->list); LIST_APPEND(&cli_keywords.list, &kw_list->list);
} }

View File

@ -206,13 +206,13 @@ ssize_t dns_recv_nameserver(struct dns_nameserver *ns, void *data, size_t size)
* so we can add if to free_sess list * so we can add if to free_sess list
* to receive a new request * to receive a new request
*/ */
LIST_ADD(&ds->dss->free_sess, &ds->list); LIST_INSERT(&ds->dss->free_sess, &ds->list);
} }
else { else {
/* there is no more pipelined requests /* there is no more pipelined requests
* into this session, so we move it * into this session, so we move it
* to idle_sess list */ * to idle_sess list */
LIST_ADD(&ds->dss->idle_sess, &ds->list); LIST_INSERT(&ds->dss->idle_sess, &ds->list);
/* update the counter of idle sessions */ /* update the counter of idle sessions */
ds->dss->idle_conns++; ds->dss->idle_conns++;
@ -548,7 +548,7 @@ static void dns_session_io_handler(struct appctx *appctx)
* to destroy the task */ * to destroy the task */
task_queue(ds->task_exp); task_queue(ds->task_exp);
} }
LIST_ADDQ(&ds->queries, &query->list); LIST_APPEND(&ds->queries, &query->list);
eb32_insert(&ds->query_ids, &query->qid); eb32_insert(&ds->query_ids, &query->qid);
ds->onfly_queries++; ds->onfly_queries++;
} }
@ -613,7 +613,7 @@ static void dns_session_io_handler(struct appctx *appctx)
if (ret) { if (ret) {
/* let's be woken up once new request to write arrived */ /* let's be woken up once new request to write arrived */
HA_RWLOCK_WRLOCK(DNS_LOCK, &ring->lock); HA_RWLOCK_WRLOCK(DNS_LOCK, &ring->lock);
LIST_ADDQ(&ring->waiters, &appctx->wait_entry); LIST_APPEND(&ring->waiters, &appctx->wait_entry);
HA_RWLOCK_WRUNLOCK(DNS_LOCK, &ring->lock); HA_RWLOCK_WRUNLOCK(DNS_LOCK, &ring->lock);
si_rx_endp_done(si); si_rx_endp_done(si);
} }
@ -626,7 +626,7 @@ read:
* delete from the list * delete from the list
*/ */
__ha_barrier_load(); __ha_barrier_load();
if (!LIST_ADDED(&ds->waiter)) { if (!LIST_INLIST(&ds->waiter)) {
while (1) { while (1) {
uint16_t query_id; uint16_t query_id;
struct eb32_node *eb; struct eb32_node *eb;
@ -697,7 +697,7 @@ read:
/* remove query ids mapping from pending queries list/tree */ /* remove query ids mapping from pending queries list/tree */
eb32_delete(&query->qid); eb32_delete(&query->qid);
LIST_DEL(&query->list); LIST_DELETE(&query->list);
pool_free(dns_query_pool, query); pool_free(dns_query_pool, query);
ds->onfly_queries--; ds->onfly_queries--;
@ -708,7 +708,7 @@ read:
* wait_sess list where the task processing * wait_sess list where the task processing
* response will pop available responses * response will pop available responses
*/ */
LIST_ADDQ(&ds->dss->wait_sess, &ds->waiter); LIST_APPEND(&ds->dss->wait_sess, &ds->waiter);
/* lock the dns_stream_server containing lists heads */ /* lock the dns_stream_server containing lists heads */
HA_SPIN_UNLOCK(DNS_LOCK, &ds->dss->lock); HA_SPIN_UNLOCK(DNS_LOCK, &ds->dss->lock);
@ -719,7 +719,7 @@ read:
break; break;
} }
if (!LIST_ADDED(&ds->waiter)) { if (!LIST_INLIST(&ds->waiter)) {
/* there is no more pending data to read and the con was closed by the server side */ /* there is no more pending data to read and the con was closed by the server side */
if (!co_data(si_oc(si)) && (si_oc(si)->flags & CF_SHUTW)) { if (!co_data(si_oc(si)) && (si_oc(si)->flags & CF_SHUTW)) {
goto close; goto close;
@ -742,7 +742,7 @@ void dns_queries_flush(struct dns_session *ds)
list_for_each_entry_safe(query, queryb, &ds->queries, list) { list_for_each_entry_safe(query, queryb, &ds->queries, list) {
eb32_delete(&query->qid); eb32_delete(&query->qid);
LIST_DEL(&query->list); LIST_DELETE(&query->list);
pool_free(dns_query_pool, query); pool_free(dns_query_pool, query);
} }
} }
@ -824,7 +824,7 @@ static void dns_session_release(struct appctx *appctx)
* message offsets if the session * message offsets if the session
* was closed with an incomplete pending response * was closed with an incomplete pending response
*/ */
if (!LIST_ADDED(&ds->waiter)) if (!LIST_INLIST(&ds->waiter))
ds->rx_msg.len = ds->rx_msg.offset = 0; ds->rx_msg.len = ds->rx_msg.offset = 0;
/* we flush pending sent queries because we never /* we flush pending sent queries because we never
@ -850,7 +850,7 @@ static void dns_session_release(struct appctx *appctx)
} }
if (ds->nb_queries < DNS_STREAM_MAX_PIPELINED_REQ) if (ds->nb_queries < DNS_STREAM_MAX_PIPELINED_REQ)
LIST_ADD(&ds->dss->free_sess, &ds->list); LIST_INSERT(&ds->dss->free_sess, &ds->list);
HA_SPIN_UNLOCK(DNS_LOCK, &dss->lock); HA_SPIN_UNLOCK(DNS_LOCK, &dss->lock);
} }
@ -912,7 +912,7 @@ static struct appctx *dns_session_create(struct dns_session *ds)
/* Error unrolling */ /* Error unrolling */
out_free_strm: out_free_strm:
LIST_DEL(&s->list); LIST_DELETE(&s->list);
pool_free(pool_head_stream, s); pool_free(pool_head_stream, s);
out_free_sess: out_free_sess:
session_free(sess); session_free(sess);
@ -935,7 +935,7 @@ static struct task *dns_process_query_exp(struct task *t, void *context, unsigne
list_for_each_entry_safe(query, queryb, &ds->queries, list) { list_for_each_entry_safe(query, queryb, &ds->queries, list) {
if (tick_is_expired(query->expire, now_ms)) { if (tick_is_expired(query->expire, now_ms)) {
eb32_delete(&query->qid); eb32_delete(&query->qid);
LIST_DEL(&query->list); LIST_DELETE(&query->list);
pool_free(dns_query_pool, query); pool_free(dns_query_pool, query);
ds->onfly_queries--; ds->onfly_queries--;
} }
@ -1130,7 +1130,7 @@ static struct task *dns_process_req(struct task *t, void *context, unsigned int
* it may be close to be full so we put it at the end * it may be close to be full so we put it at the end
* of free conn list */ * of free conn list */
LIST_DEL_INIT(&ds->list); LIST_DEL_INIT(&ds->list);
LIST_ADDQ(&dss->free_sess, &ds->list); LIST_APPEND(&dss->free_sess, &ds->list);
} }
} }
@ -1154,7 +1154,7 @@ static struct task *dns_process_req(struct task *t, void *context, unsigned int
* this request, this request may be large and fill * this request, this request may be large and fill
* the ring buffer so we prefer to put at the end of free * the ring buffer so we prefer to put at the end of free
* list. */ * list. */
LIST_ADDQ(&dss->free_sess, &ds->list); LIST_APPEND(&dss->free_sess, &ds->list);
ads = ds; ads = ds;
} }
} }
@ -1167,7 +1167,7 @@ static struct task *dns_process_req(struct task *t, void *context, unsigned int
/* ring is empty so this ring_write should never fail */ /* ring is empty so this ring_write should never fail */
ring_write(&ads->ring, DNS_TCP_MSG_MAX_SIZE, NULL, 0, &myist, 1); ring_write(&ads->ring, DNS_TCP_MSG_MAX_SIZE, NULL, 0, &myist, 1);
ads->nb_queries++; ads->nb_queries++;
LIST_ADD(&dss->free_sess, &ads->list); LIST_INSERT(&dss->free_sess, &ads->list);
} }
else else
ns->counters->snd_error++; ns->counters->snd_error++;

View File

@ -124,7 +124,7 @@ static struct pid_list *pid_list_add(pid_t pid, struct task *t)
LIST_INIT(&elem->list); LIST_INIT(&elem->list);
HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock); HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock);
LIST_ADD(&pid_list, &elem->list); LIST_INSERT(&pid_list, &elem->list);
HA_SPIN_UNLOCK(PID_LIST_LOCK, &pid_list_lock); HA_SPIN_UNLOCK(PID_LIST_LOCK, &pid_list_lock);
return elem; return elem;
@ -138,7 +138,7 @@ static void pid_list_del(struct pid_list *elem)
return; return;
HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock); HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock);
LIST_DEL(&elem->list); LIST_DELETE(&elem->list);
HA_SPIN_UNLOCK(PID_LIST_LOCK, &pid_list_lock); HA_SPIN_UNLOCK(PID_LIST_LOCK, &pid_list_lock);
if (!elem->exited) if (!elem->exited)

View File

@ -141,7 +141,7 @@ static void fcgi_release_rule(struct fcgi_rule *rule)
struct logformat_node *lf, *lfb; struct logformat_node *lf, *lfb;
list_for_each_entry_safe(lf, lfb, &rule->value, list) { list_for_each_entry_safe(lf, lfb, &rule->value, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -205,12 +205,12 @@ static void fcgi_flt_deinit(struct proxy *px, struct flt_conf *fconf)
free(fcgi_conf->name); free(fcgi_conf->name);
list_for_each_entry_safe(rule, back, &fcgi_conf->param_rules, list) { list_for_each_entry_safe(rule, back, &fcgi_conf->param_rules, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
fcgi_release_rule(rule); fcgi_release_rule(rule);
} }
list_for_each_entry_safe(rule, back, &fcgi_conf->hdr_rules, list) { list_for_each_entry_safe(rule, back, &fcgi_conf->hdr_rules, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
fcgi_release_rule(rule); fcgi_release_rule(rule);
} }
@ -270,9 +270,9 @@ static int fcgi_flt_check(struct proxy *px, struct flt_conf *fconf)
} }
if (rule->type == FCGI_RULE_SET_PARAM || rule->type == FCGI_RULE_UNSET_PARAM) if (rule->type == FCGI_RULE_SET_PARAM || rule->type == FCGI_RULE_UNSET_PARAM)
LIST_ADDQ(&fcgi_conf->param_rules, &rule->list); LIST_APPEND(&fcgi_conf->param_rules, &rule->list);
else /* FCGI_RULE_PASS_HDR/FCGI_RULE_HIDE_HDR */ else /* FCGI_RULE_PASS_HDR/FCGI_RULE_HIDE_HDR */
LIST_ADDQ(&fcgi_conf->hdr_rules, &rule->list); LIST_APPEND(&fcgi_conf->hdr_rules, &rule->list);
rule = NULL; rule = NULL;
} }
return 0; return 0;
@ -549,7 +549,7 @@ parse_fcgi_flt(char **args, int *cur_arg, struct proxy *px,
} }
/* Place the filter at its right position */ /* Place the filter at its right position */
LIST_DEL(&f->list); LIST_DELETE(&f->list);
free(f); free(f);
ha_free(&name); ha_free(&name);
break; break;
@ -627,7 +627,7 @@ static int proxy_parse_use_fcgi_app(char **args, int section, struct proxy *curp
fconf->id = fcgi_flt_id; fconf->id = fcgi_flt_id;
fconf->conf = fcgi_conf; fconf->conf = fcgi_conf;
fconf->ops = &fcgi_flt_ops; fconf->ops = &fcgi_flt_ops;
LIST_ADDQ(&curpx->filter_configs, &fconf->list); LIST_APPEND(&curpx->filter_configs, &fconf->list);
end: end:
return retval; return retval;
@ -743,7 +743,7 @@ static int fcgi_app_add_rule(struct fcgi_app *curapp, enum fcgi_rule_type type,
goto err; goto err;
} }
rule->cond = cond; rule->cond = cond;
LIST_ADDQ(&curapp->conf.rules, &rule->list); LIST_APPEND(&curapp->conf.rules, &rule->list);
return 1; return 1;
err: err:
@ -1090,12 +1090,12 @@ void fcgi_apps_deinit()
free(curapp->conf.file); free(curapp->conf.file);
list_for_each_entry_safe(log, logb, &curapp->logsrvs, list) { list_for_each_entry_safe(log, logb, &curapp->logsrvs, list) {
LIST_DEL(&log->list); LIST_DELETE(&log->list);
free(log); free(log);
} }
list_for_each_entry_safe(rule, back, &curapp->conf.rules, list) { list_for_each_entry_safe(rule, back, &curapp->conf.rules, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
fcgi_release_rule_conf(rule); fcgi_release_rule_conf(rule);
} }

View File

@ -89,7 +89,7 @@ static struct flt_kw_list flt_keywords = {
void void
flt_register_keywords(struct flt_kw_list *kwl) flt_register_keywords(struct flt_kw_list *kwl)
{ {
LIST_ADDQ(&flt_keywords.list, &kwl->list); LIST_APPEND(&flt_keywords.list, &kwl->list);
} }
/* /*
@ -238,7 +238,7 @@ parse_filter(char **args, int section_type, struct proxy *curpx,
goto error; goto error;
} }
LIST_ADDQ(&curpx->filter_configs, &fconf->list); LIST_APPEND(&curpx->filter_configs, &fconf->list);
} }
return 0; return 0;
@ -358,7 +358,7 @@ flt_deinit(struct proxy *proxy)
list_for_each_entry_safe(fconf, back, &proxy->filter_configs, list) { list_for_each_entry_safe(fconf, back, &proxy->filter_configs, list) {
if (fconf->ops->deinit) if (fconf->ops->deinit)
fconf->ops->deinit(proxy, fconf); fconf->ops->deinit(proxy, fconf);
LIST_DEL(&fconf->list); LIST_DELETE(&fconf->list);
free(fconf); free(fconf);
} }
} }
@ -412,7 +412,7 @@ flt_stream_add_filter(struct stream *s, struct flt_conf *fconf, unsigned int fla
} }
} }
LIST_ADDQ(&strm_flt(s)->filters, &f->list); LIST_APPEND(&strm_flt(s)->filters, &f->list);
strm_flt(s)->flags |= STRM_FLT_FL_HAS_FILTERS; strm_flt(s)->flags |= STRM_FLT_FL_HAS_FILTERS;
return 0; return 0;
} }
@ -450,7 +450,7 @@ flt_stream_release(struct stream *s, int only_backend)
if (!only_backend || (filter->flags & FLT_FL_IS_BACKEND_FILTER)) { if (!only_backend || (filter->flags & FLT_FL_IS_BACKEND_FILTER)) {
if (FLT_OPS(filter)->detach) if (FLT_OPS(filter)->detach)
FLT_OPS(filter)->detach(s, filter); FLT_OPS(filter)->detach(s, filter);
LIST_DEL(&filter->list); LIST_DELETE(&filter->list);
pool_free(pool_head_filter, filter); pool_free(pool_head_filter, filter);
} }
} }

View File

@ -753,7 +753,7 @@ check_implicit_http_comp_flt(struct proxy *proxy)
fconf->id = http_comp_flt_id; fconf->id = http_comp_flt_id;
fconf->conf = NULL; fconf->conf = NULL;
fconf->ops = &comp_ops; fconf->ops = &comp_ops;
LIST_ADDQ(&proxy->filter_configs, &fconf->list); LIST_APPEND(&proxy->filter_configs, &fconf->list);
end: end:
return err; return err;
} }

View File

@ -128,11 +128,11 @@ spoe_release_message(struct spoe_message *msg)
list_for_each_entry_safe(arg, argback, &msg->args, list) { list_for_each_entry_safe(arg, argback, &msg->args, list) {
release_sample_expr(arg->expr); release_sample_expr(arg->expr);
free(arg->name); free(arg->name);
LIST_DEL(&arg->list); LIST_DELETE(&arg->list);
free(arg); free(arg);
} }
list_for_each_entry_safe(acl, aclback, &msg->acls, list) { list_for_each_entry_safe(acl, aclback, &msg->acls, list) {
LIST_DEL(&acl->list); LIST_DELETE(&acl->list);
prune_acl(acl); prune_acl(acl);
free(acl); free(acl);
} }
@ -169,11 +169,11 @@ spoe_release_agent(struct spoe_agent *agent)
free(agent->var_t_process); free(agent->var_t_process);
free(agent->var_t_total); free(agent->var_t_total);
list_for_each_entry_safe(msg, msgback, &agent->messages, list) { list_for_each_entry_safe(msg, msgback, &agent->messages, list) {
LIST_DEL(&msg->list); LIST_DELETE(&msg->list);
spoe_release_message(msg); spoe_release_message(msg);
} }
list_for_each_entry_safe(grp, grpback, &agent->groups, list) { list_for_each_entry_safe(grp, grpback, &agent->groups, list) {
LIST_DEL(&grp->list); LIST_DELETE(&grp->list);
spoe_release_group(grp); spoe_release_group(grp);
} }
if (agent->rt) { if (agent->rt) {
@ -1233,7 +1233,7 @@ spoe_release_appctx(struct appctx *appctx)
_HA_ATOMIC_DEC(&agent->counters.applets); _HA_ATOMIC_DEC(&agent->counters.applets);
HA_SPIN_LOCK(SPOE_APPLET_LOCK, &agent->rt[tid].lock); HA_SPIN_LOCK(SPOE_APPLET_LOCK, &agent->rt[tid].lock);
if (!LIST_ISEMPTY(&spoe_appctx->list)) { if (!LIST_ISEMPTY(&spoe_appctx->list)) {
LIST_DEL(&spoe_appctx->list); LIST_DELETE(&spoe_appctx->list);
LIST_INIT(&spoe_appctx->list); LIST_INIT(&spoe_appctx->list);
} }
HA_SPIN_UNLOCK(SPOE_APPLET_LOCK, &agent->rt[tid].lock); HA_SPIN_UNLOCK(SPOE_APPLET_LOCK, &agent->rt[tid].lock);
@ -1259,7 +1259,7 @@ spoe_release_appctx(struct appctx *appctx)
/* Notify all waiting streams */ /* Notify all waiting streams */
list_for_each_entry_safe(ctx, back, &spoe_appctx->waiting_queue, list) { list_for_each_entry_safe(ctx, back, &spoe_appctx->waiting_queue, list) {
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
_HA_ATOMIC_DEC(&agent->counters.nb_waiting); _HA_ATOMIC_DEC(&agent->counters.nb_waiting);
spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting); spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting);
@ -1289,7 +1289,7 @@ spoe_release_appctx(struct appctx *appctx)
/* If this was the last running applet, notify all waiting streams */ /* If this was the last running applet, notify all waiting streams */
list_for_each_entry_safe(ctx, back, &agent->rt[tid].sending_queue, list) { list_for_each_entry_safe(ctx, back, &agent->rt[tid].sending_queue, list) {
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
_HA_ATOMIC_DEC(&agent->counters.nb_sending); _HA_ATOMIC_DEC(&agent->counters.nb_sending);
spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue); spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue);
@ -1299,7 +1299,7 @@ spoe_release_appctx(struct appctx *appctx)
task_wakeup(ctx->strm->task, TASK_WOKEN_MSG); task_wakeup(ctx->strm->task, TASK_WOKEN_MSG);
} }
list_for_each_entry_safe(ctx, back, &agent->rt[tid].waiting_queue, list) { list_for_each_entry_safe(ctx, back, &agent->rt[tid].waiting_queue, list) {
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
_HA_ATOMIC_DEC(&agent->counters.nb_waiting); _HA_ATOMIC_DEC(&agent->counters.nb_waiting);
spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting); spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting);
@ -1500,7 +1500,7 @@ spoe_handle_sending_frame_appctx(struct appctx *appctx, int *skip)
goto abort_frag_frame; goto abort_frag_frame;
spoe_release_buffer(&ctx->buffer, &ctx->buffer_wait); spoe_release_buffer(&ctx->buffer, &ctx->buffer_wait);
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
_HA_ATOMIC_DEC(&agent->counters.nb_sending); _HA_ATOMIC_DEC(&agent->counters.nb_sending);
spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue); spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue);
@ -1520,7 +1520,7 @@ spoe_handle_sending_frame_appctx(struct appctx *appctx, int *skip)
goto abort_frag_frame; goto abort_frag_frame;
spoe_release_buffer(&ctx->buffer, &ctx->buffer_wait); spoe_release_buffer(&ctx->buffer, &ctx->buffer_wait);
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
_HA_ATOMIC_DEC(&agent->counters.nb_sending); _HA_ATOMIC_DEC(&agent->counters.nb_sending);
spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue); spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue);
@ -1546,16 +1546,16 @@ spoe_handle_sending_frame_appctx(struct appctx *appctx, int *skip)
no_frag_frame_sent: no_frag_frame_sent:
if (SPOE_APPCTX(appctx)->flags & SPOE_APPCTX_FL_ASYNC) { if (SPOE_APPCTX(appctx)->flags & SPOE_APPCTX_FL_ASYNC) {
appctx->st0 = SPOE_APPCTX_ST_PROCESSING; appctx->st0 = SPOE_APPCTX_ST_PROCESSING;
LIST_ADDQ(&agent->rt[tid].waiting_queue, &ctx->list); LIST_APPEND(&agent->rt[tid].waiting_queue, &ctx->list);
} }
else if (SPOE_APPCTX(appctx)->flags & SPOE_APPCTX_FL_PIPELINING) { else if (SPOE_APPCTX(appctx)->flags & SPOE_APPCTX_FL_PIPELINING) {
appctx->st0 = SPOE_APPCTX_ST_PROCESSING; appctx->st0 = SPOE_APPCTX_ST_PROCESSING;
LIST_ADDQ(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list); LIST_APPEND(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list);
} }
else { else {
appctx->st0 = SPOE_APPCTX_ST_WAITING_SYNC_ACK; appctx->st0 = SPOE_APPCTX_ST_WAITING_SYNC_ACK;
*skip = 1; *skip = 1;
LIST_ADDQ(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list); LIST_APPEND(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list);
} }
_HA_ATOMIC_INC(&agent->counters.nb_waiting); _HA_ATOMIC_INC(&agent->counters.nb_waiting);
ctx->stats.tv_wait = now; ctx->stats.tv_wait = now;
@ -1611,7 +1611,7 @@ spoe_handle_receiving_frame_appctx(struct appctx *appctx, int *skip)
break; break;
default: default:
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
_HA_ATOMIC_DEC(&agent->counters.nb_waiting); _HA_ATOMIC_DEC(&agent->counters.nb_waiting);
spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting); spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting);
@ -2008,7 +2008,7 @@ spoe_create_appctx(struct spoe_config *conf)
strm->res.flags |= CF_READ_DONTWAIT; strm->res.flags |= CF_READ_DONTWAIT;
HA_SPIN_LOCK(SPOE_APPLET_LOCK, &conf->agent->rt[tid].lock); HA_SPIN_LOCK(SPOE_APPLET_LOCK, &conf->agent->rt[tid].lock);
LIST_ADDQ(&conf->agent->rt[tid].applets, &SPOE_APPCTX(appctx)->list); LIST_APPEND(&conf->agent->rt[tid].applets, &SPOE_APPCTX(appctx)->list);
HA_SPIN_UNLOCK(SPOE_APPLET_LOCK, &conf->agent->rt[tid].lock); HA_SPIN_UNLOCK(SPOE_APPLET_LOCK, &conf->agent->rt[tid].lock);
_HA_ATOMIC_INC(&conf->agent->counters.applets); _HA_ATOMIC_INC(&conf->agent->counters.applets);
@ -2101,7 +2101,7 @@ spoe_queue_context(struct spoe_context *ctx)
ctx->stats.tv_queue = now; ctx->stats.tv_queue = now;
if (ctx->spoe_appctx) if (ctx->spoe_appctx)
return 1; return 1;
LIST_ADDQ(&agent->rt[tid].sending_queue, &ctx->list); LIST_APPEND(&agent->rt[tid].sending_queue, &ctx->list);
SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p" SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
" - Add stream in sending queue" " - Add stream in sending queue"
@ -2624,7 +2624,7 @@ spoe_stop_processing(struct spoe_agent *agent, struct spoe_context *ctx)
else else
_HA_ATOMIC_DEC(&agent->counters.nb_waiting); _HA_ATOMIC_DEC(&agent->counters.nb_waiting);
LIST_DEL(&ctx->list); LIST_DELETE(&ctx->list);
LIST_INIT(&ctx->list); LIST_INIT(&ctx->list);
} }
} }
@ -2833,20 +2833,20 @@ spoe_acquire_buffer(struct buffer *buf, struct buffer_wait *buffer_wait)
if (buf->size) if (buf->size)
return 1; return 1;
if (LIST_ADDED(&buffer_wait->list)) if (LIST_INLIST(&buffer_wait->list))
LIST_DEL_INIT(&buffer_wait->list); LIST_DEL_INIT(&buffer_wait->list);
if (b_alloc(buf)) if (b_alloc(buf))
return 1; return 1;
LIST_ADDQ(&ti->buffer_wq, &buffer_wait->list); LIST_APPEND(&ti->buffer_wq, &buffer_wait->list);
return 0; return 0;
} }
static void static void
spoe_release_buffer(struct buffer *buf, struct buffer_wait *buffer_wait) spoe_release_buffer(struct buffer *buf, struct buffer_wait *buffer_wait)
{ {
if (LIST_ADDED(&buffer_wait->list)) if (LIST_INLIST(&buffer_wait->list))
LIST_DEL_INIT(&buffer_wait->list); LIST_DEL_INIT(&buffer_wait->list);
/* Release the buffer if needed */ /* Release the buffer if needed */
@ -3439,7 +3439,7 @@ cfg_parse_spoe_agent(const char *file, int linenum, char **args, int kwm)
goto out; goto out;
} }
ph->id = strdup(args[cur_arg]); ph->id = strdup(args[cur_arg]);
LIST_ADDQ(&curmphs, &ph->list); LIST_APPEND(&curmphs, &ph->list);
cur_arg++; cur_arg++;
} }
} }
@ -3463,7 +3463,7 @@ cfg_parse_spoe_agent(const char *file, int linenum, char **args, int kwm)
goto out; goto out;
} }
ph->id = strdup(args[cur_arg]); ph->id = strdup(args[cur_arg]);
LIST_ADDQ(&curgphs, &ph->list); LIST_APPEND(&curgphs, &ph->list);
cur_arg++; cur_arg++;
} }
} }
@ -3766,7 +3766,7 @@ cfg_parse_spoe_agent(const char *file, int linenum, char **args, int kwm)
err_code |= ERR_ALERT | ERR_ABORT; err_code |= ERR_ALERT | ERR_ABORT;
goto out; goto out;
} }
LIST_ADDQ(&curvars, &vph->list); LIST_APPEND(&curvars, &vph->list);
cur_arg++; cur_arg++;
} }
} }
@ -3841,7 +3841,7 @@ cfg_parse_spoe_group(const char *file, int linenum, char **args, int kwm)
curgrp->conf.line = linenum; curgrp->conf.line = linenum;
LIST_INIT(&curgrp->phs); LIST_INIT(&curgrp->phs);
LIST_INIT(&curgrp->messages); LIST_INIT(&curgrp->messages);
LIST_ADDQ(&curgrps, &curgrp->list); LIST_APPEND(&curgrps, &curgrp->list);
} }
else if (strcmp(args[0], "messages") == 0) { else if (strcmp(args[0], "messages") == 0) {
int cur_arg = 1; int cur_arg = 1;
@ -3863,7 +3863,7 @@ cfg_parse_spoe_group(const char *file, int linenum, char **args, int kwm)
goto out; goto out;
} }
ph->id = strdup(args[cur_arg]); ph->id = strdup(args[cur_arg]);
LIST_ADDQ(&curgrp->phs, &ph->list); LIST_APPEND(&curgrp->phs, &ph->list);
cur_arg++; cur_arg++;
} }
} }
@ -3937,7 +3937,7 @@ cfg_parse_spoe_message(const char *file, int linenum, char **args, int kwm)
LIST_INIT(&curmsg->acls); LIST_INIT(&curmsg->acls);
LIST_INIT(&curmsg->by_evt); LIST_INIT(&curmsg->by_evt);
LIST_INIT(&curmsg->by_grp); LIST_INIT(&curmsg->by_grp);
LIST_ADDQ(&curmsgs, &curmsg->list); LIST_APPEND(&curmsgs, &curmsg->list);
} }
else if (strcmp(args[0], "args") == 0) { else if (strcmp(args[0], "args") == 0) {
int cur_arg = 1; int cur_arg = 1;
@ -3976,7 +3976,7 @@ cfg_parse_spoe_message(const char *file, int linenum, char **args, int kwm)
goto out; goto out;
} }
curmsg->nargs++; curmsg->nargs++;
LIST_ADDQ(&curmsg->args, &arg->list); LIST_APPEND(&curmsg->args, &arg->list);
cur_arg++; cur_arg++;
} }
curproxy->conf.args.file = NULL; curproxy->conf.args.file = NULL;
@ -4342,7 +4342,7 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
} }
msg->agent = curagent; msg->agent = curagent;
LIST_ADDQ(&curagent->events[msg->event], &msg->by_evt); LIST_APPEND(&curagent->events[msg->event], &msg->by_evt);
goto next_mph; goto next_mph;
} }
} }
@ -4359,8 +4359,8 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
list_for_each_entry_safe(grp, grpback, &curgrps, list) { list_for_each_entry_safe(grp, grpback, &curgrps, list) {
if (strcmp(grp->id, ph->id) == 0) { if (strcmp(grp->id, ph->id) == 0) {
grp->agent = curagent; grp->agent = curagent;
LIST_DEL(&grp->list); LIST_DELETE(&grp->list);
LIST_ADDQ(&curagent->groups, &grp->list); LIST_APPEND(&curagent->groups, &grp->list);
goto next_aph; goto next_aph;
} }
} }
@ -4390,8 +4390,8 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
* them only if a rule use the corresponding SPOE group. */ * them only if a rule use the corresponding SPOE group. */
msg->agent = curagent; msg->agent = curagent;
msg->group = grp; msg->group = grp;
LIST_DEL(&ph->list); LIST_DELETE(&ph->list);
LIST_ADDQ(&grp->messages, &msg->by_grp); LIST_APPEND(&grp->messages, &msg->by_grp);
goto next_mph_grp; goto next_mph_grp;
} }
} }
@ -4423,16 +4423,16 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
conf->agent_fe.options2 |= curpxopts2; conf->agent_fe.options2 |= curpxopts2;
list_for_each_entry_safe(logsrv, logsrvback, &curlogsrvs, list) { list_for_each_entry_safe(logsrv, logsrvback, &curlogsrvs, list) {
LIST_DEL(&logsrv->list); LIST_DELETE(&logsrv->list);
LIST_ADDQ(&conf->agent_fe.logsrvs, &logsrv->list); LIST_APPEND(&conf->agent_fe.logsrvs, &logsrv->list);
} }
list_for_each_entry_safe(ph, phback, &curmphs, list) { list_for_each_entry_safe(ph, phback, &curmphs, list) {
LIST_DEL(&ph->list); LIST_DELETE(&ph->list);
spoe_release_placeholder(ph); spoe_release_placeholder(ph);
} }
list_for_each_entry_safe(ph, phback, &curgphs, list) { list_for_each_entry_safe(ph, phback, &curgphs, list) {
LIST_DEL(&ph->list); LIST_DELETE(&ph->list);
spoe_release_placeholder(ph); spoe_release_placeholder(ph);
} }
list_for_each_entry_safe(vph, vphback, &curvars, list) { list_for_each_entry_safe(vph, vphback, &curvars, list) {
@ -4451,12 +4451,12 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
goto error; goto error;
} }
LIST_DEL(&vph->list); LIST_DELETE(&vph->list);
free(vph->name); free(vph->name);
free(vph); free(vph);
} }
list_for_each_entry_safe(grp, grpback, &curgrps, list) { list_for_each_entry_safe(grp, grpback, &curgrps, list) {
LIST_DEL(&grp->list); LIST_DELETE(&grp->list);
spoe_release_group(grp); spoe_release_group(grp);
} }
*cur_arg = pos; *cur_arg = pos;
@ -4468,28 +4468,28 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
error: error:
spoe_release_agent(curagent); spoe_release_agent(curagent);
list_for_each_entry_safe(ph, phback, &curmphs, list) { list_for_each_entry_safe(ph, phback, &curmphs, list) {
LIST_DEL(&ph->list); LIST_DELETE(&ph->list);
spoe_release_placeholder(ph); spoe_release_placeholder(ph);
} }
list_for_each_entry_safe(ph, phback, &curgphs, list) { list_for_each_entry_safe(ph, phback, &curgphs, list) {
LIST_DEL(&ph->list); LIST_DELETE(&ph->list);
spoe_release_placeholder(ph); spoe_release_placeholder(ph);
} }
list_for_each_entry_safe(vph, vphback, &curvars, list) { list_for_each_entry_safe(vph, vphback, &curvars, list) {
LIST_DEL(&vph->list); LIST_DELETE(&vph->list);
free(vph->name); free(vph->name);
free(vph); free(vph);
} }
list_for_each_entry_safe(grp, grpback, &curgrps, list) { list_for_each_entry_safe(grp, grpback, &curgrps, list) {
LIST_DEL(&grp->list); LIST_DELETE(&grp->list);
spoe_release_group(grp); spoe_release_group(grp);
} }
list_for_each_entry_safe(msg, msgback, &curmsgs, list) { list_for_each_entry_safe(msg, msgback, &curmsgs, list) {
LIST_DEL(&msg->list); LIST_DELETE(&msg->list);
spoe_release_message(msg); spoe_release_message(msg);
} }
list_for_each_entry_safe(logsrv, logsrvback, &curlogsrvs, list) { list_for_each_entry_safe(logsrv, logsrvback, &curlogsrvs, list) {
LIST_DEL(&logsrv->list); LIST_DELETE(&logsrv->list);
free(logsrv); free(logsrv);
} }
free(conf); free(conf);

View File

@ -282,7 +282,7 @@ void hap_register_build_opts(const char *str, int must_free)
} }
b->str = str; b->str = str;
b->must_free = must_free; b->must_free = must_free;
LIST_ADDQ(&build_opts_list, &b->list); LIST_APPEND(&build_opts_list, &b->list);
} }
static void display_version() static void display_version()
@ -880,7 +880,7 @@ next_dir_entry:
/* remove the current directory (wl) from cfg_cfgfiles */ /* remove the current directory (wl) from cfg_cfgfiles */
free(wl->s); free(wl->s);
LIST_DEL(&wl->list); LIST_DELETE(&wl->list);
free(wl); free(wl);
} }
@ -1463,7 +1463,7 @@ static void init(int argc, char **argv)
ha_alert("Cannot allocate memory\n"); ha_alert("Cannot allocate memory\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
LIST_ADD(&mworker_cli_conf, &c->list); LIST_INSERT(&mworker_cli_conf, &c->list);
argv++; argv++;
argc--; argc--;
@ -1654,7 +1654,7 @@ static void init(int argc, char **argv)
proc_self = tmproc; proc_self = tmproc;
LIST_ADDQ(&proc_list, &tmproc->list); LIST_APPEND(&proc_list, &tmproc->list);
} }
for (proc = 0; proc < global.nbproc; proc++) { for (proc = 0; proc < global.nbproc; proc++) {
@ -1677,7 +1677,7 @@ static void init(int argc, char **argv)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
LIST_ADDQ(&proc_list, &tmproc->list); LIST_APPEND(&proc_list, &tmproc->list);
} }
} }
if (global.mode & (MODE_MWORKER|MODE_MWORKER_WAIT)) { if (global.mode & (MODE_MWORKER|MODE_MWORKER_WAIT)) {
@ -1699,7 +1699,7 @@ static void init(int argc, char **argv)
ha_alert("Can't create the master's CLI.\n"); ha_alert("Can't create the master's CLI.\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
LIST_DEL(&c->list); LIST_DELETE(&c->list);
free(c->s); free(c->s);
free(c); free(c);
} }
@ -2277,69 +2277,69 @@ void deinit(void)
idle_conn_task = NULL; idle_conn_task = NULL;
list_for_each_entry_safe(log, logb, &global.logsrvs, list) { list_for_each_entry_safe(log, logb, &global.logsrvs, list) {
LIST_DEL(&log->list); LIST_DELETE(&log->list);
free(log); free(log);
} }
list_for_each_entry_safe(wl, wlb, &cfg_cfgfiles, list) { list_for_each_entry_safe(wl, wlb, &cfg_cfgfiles, list) {
free(wl->s); free(wl->s);
LIST_DEL(&wl->list); LIST_DELETE(&wl->list);
free(wl); free(wl);
} }
list_for_each_entry_safe(bol, bolb, &build_opts_list, list) { list_for_each_entry_safe(bol, bolb, &build_opts_list, list) {
if (bol->must_free) if (bol->must_free)
free((void *)bol->str); free((void *)bol->str);
LIST_DEL(&bol->list); LIST_DELETE(&bol->list);
free(bol); free(bol);
} }
list_for_each_entry_safe(pxdf, pxdfb, &proxy_deinit_list, list) { list_for_each_entry_safe(pxdf, pxdfb, &proxy_deinit_list, list) {
LIST_DEL(&pxdf->list); LIST_DELETE(&pxdf->list);
free(pxdf); free(pxdf);
} }
list_for_each_entry_safe(pdf, pdfb, &post_deinit_list, list) { list_for_each_entry_safe(pdf, pdfb, &post_deinit_list, list) {
LIST_DEL(&pdf->list); LIST_DELETE(&pdf->list);
free(pdf); free(pdf);
} }
list_for_each_entry_safe(srvdf, srvdfb, &server_deinit_list, list) { list_for_each_entry_safe(srvdf, srvdfb, &server_deinit_list, list) {
LIST_DEL(&srvdf->list); LIST_DELETE(&srvdf->list);
free(srvdf); free(srvdf);
} }
list_for_each_entry_safe(pcf, pcfb, &post_check_list, list) { list_for_each_entry_safe(pcf, pcfb, &post_check_list, list) {
LIST_DEL(&pcf->list); LIST_DELETE(&pcf->list);
free(pcf); free(pcf);
} }
list_for_each_entry_safe(pscf, pscfb, &post_server_check_list, list) { list_for_each_entry_safe(pscf, pscfb, &post_server_check_list, list) {
LIST_DEL(&pscf->list); LIST_DELETE(&pscf->list);
free(pscf); free(pscf);
} }
list_for_each_entry_safe(ppcf, ppcfb, &post_proxy_check_list, list) { list_for_each_entry_safe(ppcf, ppcfb, &post_proxy_check_list, list) {
LIST_DEL(&ppcf->list); LIST_DELETE(&ppcf->list);
free(ppcf); free(ppcf);
} }
list_for_each_entry_safe(tif, tifb, &per_thread_init_list, list) { list_for_each_entry_safe(tif, tifb, &per_thread_init_list, list) {
LIST_DEL(&tif->list); LIST_DELETE(&tif->list);
free(tif); free(tif);
} }
list_for_each_entry_safe(tdf, tdfb, &per_thread_deinit_list, list) { list_for_each_entry_safe(tdf, tdfb, &per_thread_deinit_list, list) {
LIST_DEL(&tdf->list); LIST_DELETE(&tdf->list);
free(tdf); free(tdf);
} }
list_for_each_entry_safe(taf, tafb, &per_thread_alloc_list, list) { list_for_each_entry_safe(taf, tafb, &per_thread_alloc_list, list) {
LIST_DEL(&taf->list); LIST_DELETE(&taf->list);
free(taf); free(taf);
} }
list_for_each_entry_safe(tff, tffb, &per_thread_free_list, list) { list_for_each_entry_safe(tff, tffb, &per_thread_free_list, list) {
LIST_DEL(&tff->list); LIST_DELETE(&tff->list);
free(tff); free(tff);
} }
@ -3004,7 +3004,7 @@ int main(int argc, char **argv)
proc_self = child; proc_self = child;
continue; continue;
} }
LIST_DEL(&child->list); LIST_DELETE(&child->list);
mworker_free_child(child); mworker_free_child(child);
child = NULL; child = NULL;
} }

View File

@ -312,7 +312,7 @@ static inline struct hlua_function *new_hlua_function()
fcn = calloc(1, sizeof(*fcn)); fcn = calloc(1, sizeof(*fcn));
if (!fcn) if (!fcn)
return NULL; return NULL;
LIST_ADDQ(&referenced_functions, &fcn->l); LIST_APPEND(&referenced_functions, &fcn->l);
for (i = 0; i < MAX_THREADS + 1; i++) for (i = 0; i < MAX_THREADS + 1; i++)
fcn->function_ref[i] = -1; fcn->function_ref[i] = -1;
return fcn; return fcn;
@ -324,7 +324,7 @@ static inline void release_hlua_function(struct hlua_function *fcn)
return; return;
if (fcn->name) if (fcn->name)
ha_free(&fcn->name); ha_free(&fcn->name);
LIST_DEL(&fcn->l); LIST_DELETE(&fcn->l);
ha_free(&fcn); ha_free(&fcn);
} }
@ -6387,7 +6387,7 @@ __LJMP static int hlua_register_init(lua_State *L)
WILL_LJMP(luaL_error(L, "Lua out of memory error.")); WILL_LJMP(luaL_error(L, "Lua out of memory error."));
init->function_ref = ref; init->function_ref = ref;
LIST_ADDQ(&hlua_init_functions[hlua_state_id], &init->l); LIST_APPEND(&hlua_init_functions[hlua_state_id], &init->l);
return 0; return 0;
} }
@ -8499,7 +8499,7 @@ static int hlua_config_prepend_path(char **args, int section_type, struct proxy
memprintf(err, "memory allocation failed"); memprintf(err, "memory allocation failed");
goto err2; goto err2;
} }
LIST_ADDQ(&prepend_path_list, &p->l); LIST_APPEND(&prepend_path_list, &p->l);
hlua_prepend_path(hlua_states[0], type, path); hlua_prepend_path(hlua_states[0], type, path);
hlua_prepend_path(hlua_states[1], type, path); hlua_prepend_path(hlua_states[1], type, path);

View File

@ -51,7 +51,7 @@ static void release_http_action(struct act_rule *rule)
if (rule->arg.http.re) if (rule->arg.http.re)
regex_free(rule->arg.http.re); regex_free(rule->arg.http.re);
list_for_each_entry_safe(lf, lfb, &rule->arg.http.fmt, list) { list_for_each_entry_safe(lf, lfb, &rule->arg.http.fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -1744,7 +1744,7 @@ static void release_http_redir(struct act_rule *rule)
struct redirect_rule *redir; struct redirect_rule *redir;
redir = rule->arg.redir; redir = rule->arg.redir;
LIST_DEL(&redir->list); LIST_DELETE(&redir->list);
if (redir->cond) { if (redir->cond) {
prune_acl_cond(redir->cond); prune_acl_cond(redir->cond);
free(redir->cond); free(redir->cond);
@ -1752,7 +1752,7 @@ static void release_http_redir(struct act_rule *rule)
free(redir->rdr_str); free(redir->rdr_str);
free(redir->cookie_str); free(redir->cookie_str);
list_for_each_entry_safe(lf, lfb, &redir->rdr_fmt, list) { list_for_each_entry_safe(lf, lfb, &redir->rdr_fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
free(lf); free(lf);
} }
free(redir); free(redir);
@ -1876,14 +1876,14 @@ static void release_http_map(struct act_rule *rule)
free(rule->arg.map.ref); free(rule->arg.map.ref);
list_for_each_entry_safe(lf, lfb, &rule->arg.map.key, list) { list_for_each_entry_safe(lf, lfb, &rule->arg.map.key, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
} }
if (rule->action == 1) { if (rule->action == 1) {
list_for_each_entry_safe(lf, lfb, &rule->arg.map.value, list) { list_for_each_entry_safe(lf, lfb, &rule->arg.map.value, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);

View File

@ -1009,9 +1009,9 @@ void release_http_reply(struct http_reply *http_reply)
ha_free(&http_reply->ctype); ha_free(&http_reply->ctype);
list_for_each_entry_safe(hdr, hdrb, &http_reply->hdrs, list) { list_for_each_entry_safe(hdr, hdrb, &http_reply->hdrs, list) {
LIST_DEL(&hdr->list); LIST_DELETE(&hdr->list);
list_for_each_entry_safe(lf, lfb, &hdr->value, list) { list_for_each_entry_safe(lf, lfb, &hdr->value, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -1027,7 +1027,7 @@ void release_http_reply(struct http_reply *http_reply)
chunk_destroy(&http_reply->body.obj); chunk_destroy(&http_reply->body.obj);
else if (http_reply->type == HTTP_REPLY_LOGFMT) { else if (http_reply->type == HTTP_REPLY_LOGFMT) {
list_for_each_entry_safe(lf, lfb, &http_reply->body.fmt, list) { list_for_each_entry_safe(lf, lfb, &http_reply->body.fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -1100,12 +1100,12 @@ static void http_htx_deinit(void)
free(http_errs->id); free(http_errs->id);
for (rc = 0; rc < HTTP_ERR_SIZE; rc++) for (rc = 0; rc < HTTP_ERR_SIZE; rc++)
release_http_reply(http_errs->replies[rc]); release_http_reply(http_errs->replies[rc]);
LIST_DEL(&http_errs->list); LIST_DELETE(&http_errs->list);
free(http_errs); free(http_errs);
} }
list_for_each_entry_safe(http_rep, http_repb, &http_replies_list, list) { list_for_each_entry_safe(http_rep, http_repb, &http_replies_list, list) {
LIST_DEL(&http_rep->list); LIST_DELETE(&http_rep->list);
release_http_reply(http_rep); release_http_reply(http_rep);
} }
} }
@ -1598,7 +1598,7 @@ struct http_reply *http_parse_http_reply(const char **args, int *orig_arg, struc
memprintf(errmsg, "'%s' : out of memory", args[cur_arg-1]); memprintf(errmsg, "'%s' : out of memory", args[cur_arg-1]);
goto error; goto error;
} }
LIST_ADDQ(&reply->hdrs, &hdr->list); LIST_APPEND(&reply->hdrs, &hdr->list);
LIST_INIT(&hdr->value); LIST_INIT(&hdr->value);
hdr->name = ist(strdup(args[cur_arg])); hdr->name = ist(strdup(args[cur_arg]));
if (!isttest(hdr->name)) { if (!isttest(hdr->name)) {
@ -1654,9 +1654,9 @@ struct http_reply *http_parse_http_reply(const char **args, int *orig_arg, struc
"with an erorrfile.\n", "with an erorrfile.\n",
px->conf.args.file, px->conf.args.line); px->conf.args.file, px->conf.args.line);
list_for_each_entry_safe(hdr, hdrb, &reply->hdrs, list) { list_for_each_entry_safe(hdr, hdrb, &reply->hdrs, list) {
LIST_DEL(&hdr->list); LIST_DELETE(&hdr->list);
list_for_each_entry_safe(lf, lfb, &hdr->value, list) { list_for_each_entry_safe(lf, lfb, &hdr->value, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -1759,7 +1759,7 @@ static int proxy_parse_errorloc(char **args, int section, struct proxy *curpx,
reply->ctype = NULL; reply->ctype = NULL;
LIST_INIT(&reply->hdrs); LIST_INIT(&reply->hdrs);
reply->body.errmsg = msg; reply->body.errmsg = msg;
LIST_ADDQ(&http_replies_list, &reply->list); LIST_APPEND(&http_replies_list, &reply->list);
conf_err = calloc(1, sizeof(*conf_err)); conf_err = calloc(1, sizeof(*conf_err));
if (!conf_err) { if (!conf_err) {
@ -1774,7 +1774,7 @@ static int proxy_parse_errorloc(char **args, int section, struct proxy *curpx,
conf_err->file = strdup(file); conf_err->file = strdup(file);
conf_err->line = line; conf_err->line = line;
LIST_ADDQ(&curpx->conf.errors, &conf_err->list); LIST_APPEND(&curpx->conf.errors, &conf_err->list);
/* handle warning message */ /* handle warning message */
if (*errmsg) if (*errmsg)
@ -1825,7 +1825,7 @@ static int proxy_parse_errorfile(char **args, int section, struct proxy *curpx,
reply->ctype = NULL; reply->ctype = NULL;
LIST_INIT(&reply->hdrs); LIST_INIT(&reply->hdrs);
reply->body.errmsg = msg; reply->body.errmsg = msg;
LIST_ADDQ(&http_replies_list, &reply->list); LIST_APPEND(&http_replies_list, &reply->list);
conf_err = calloc(1, sizeof(*conf_err)); conf_err = calloc(1, sizeof(*conf_err));
if (!conf_err) { if (!conf_err) {
@ -1839,7 +1839,7 @@ static int proxy_parse_errorfile(char **args, int section, struct proxy *curpx,
conf_err->info.errorfile.reply = reply; conf_err->info.errorfile.reply = reply;
conf_err->file = strdup(file); conf_err->file = strdup(file);
conf_err->line = line; conf_err->line = line;
LIST_ADDQ(&curpx->conf.errors, &conf_err->list); LIST_APPEND(&curpx->conf.errors, &conf_err->list);
/* handle warning message */ /* handle warning message */
if (*errmsg) if (*errmsg)
@ -1901,7 +1901,7 @@ static int proxy_parse_errorfiles(char **args, int section, struct proxy *curpx,
} }
conf_err->file = strdup(file); conf_err->file = strdup(file);
conf_err->line = line; conf_err->line = line;
LIST_ADDQ(&curpx->conf.errors, &conf_err->list); LIST_APPEND(&curpx->conf.errors, &conf_err->list);
out: out:
return ret; return ret;
@ -1970,11 +1970,11 @@ static int proxy_parse_http_error(char **args, int section, struct proxy *curpx,
conf_err->type = 1; conf_err->type = 1;
conf_err->info.errorfile.status = reply->status; conf_err->info.errorfile.status = reply->status;
conf_err->info.errorfile.reply = reply; conf_err->info.errorfile.reply = reply;
LIST_ADDQ(&http_replies_list, &reply->list); LIST_APPEND(&http_replies_list, &reply->list);
} }
conf_err->file = strdup(file); conf_err->file = strdup(file);
conf_err->line = line; conf_err->line = line;
LIST_ADDQ(&curpx->conf.errors, &conf_err->list); LIST_APPEND(&curpx->conf.errors, &conf_err->list);
/* handle warning message */ /* handle warning message */
if (*errmsg) if (*errmsg)
@ -2036,7 +2036,7 @@ static int proxy_check_errors(struct proxy *px)
} }
} }
next: next:
LIST_DEL(&conf_err->list); LIST_DELETE(&conf_err->list);
free(conf_err->file); free(conf_err->file);
free(conf_err); free(conf_err);
} }
@ -2099,7 +2099,7 @@ int proxy_dup_default_conf_errors(struct proxy *curpx, const struct proxy *defpx
} }
new_conf_err->file = strdup(conf_err->file); new_conf_err->file = strdup(conf_err->file);
new_conf_err->line = conf_err->line; new_conf_err->line = conf_err->line;
LIST_ADDQ(&curpx->conf.errors, &new_conf_err->list); LIST_APPEND(&curpx->conf.errors, &new_conf_err->list);
new_conf_err = NULL; new_conf_err = NULL;
} }
ret = 1; ret = 1;
@ -2116,7 +2116,7 @@ void proxy_release_conf_errors(struct proxy *px)
list_for_each_entry_safe(conf_err, conf_err_back, &px->conf.errors, list) { list_for_each_entry_safe(conf_err, conf_err_back, &px->conf.errors, list) {
if (conf_err->type == 0) if (conf_err->type == 0)
free(conf_err->info.errorfiles.name); free(conf_err->info.errorfiles.name);
LIST_DEL(&conf_err->list); LIST_DELETE(&conf_err->list);
free(conf_err->file); free(conf_err->file);
free(conf_err); free(conf_err);
} }
@ -2168,7 +2168,7 @@ static int cfg_parse_http_errors(const char *file, int linenum, char **args, int
goto out; goto out;
} }
LIST_ADDQ(&http_errors_list, &curr_errs->list); LIST_APPEND(&http_errors_list, &curr_errs->list);
curr_errs->id = strdup(args[1]); curr_errs->id = strdup(args[1]);
curr_errs->conf.file = strdup(file); curr_errs->conf.file = strdup(file);
curr_errs->conf.line = linenum; curr_errs->conf.line = linenum;

View File

@ -84,7 +84,7 @@ void hap_register_post_check(int (*fct)())
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&post_check_list, &b->list); LIST_APPEND(&post_check_list, &b->list);
} }
/* used to register some initialization functions to call for each proxy after /* used to register some initialization functions to call for each proxy after
@ -100,7 +100,7 @@ void hap_register_post_proxy_check(int (*fct)(struct proxy *))
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&post_proxy_check_list, &b->list); LIST_APPEND(&post_proxy_check_list, &b->list);
} }
/* used to register some initialization functions to call for each server after /* used to register some initialization functions to call for each server after
@ -116,7 +116,7 @@ void hap_register_post_server_check(int (*fct)(struct server *))
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&post_server_check_list, &b->list); LIST_APPEND(&post_server_check_list, &b->list);
} }
/* used to register some de-initialization functions to call after everything /* used to register some de-initialization functions to call after everything
@ -132,7 +132,7 @@ void hap_register_post_deinit(void (*fct)())
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&post_deinit_list, &b->list); LIST_APPEND(&post_deinit_list, &b->list);
} }
/* used to register some per proxy de-initialization functions to call after /* used to register some per proxy de-initialization functions to call after
@ -148,7 +148,7 @@ void hap_register_proxy_deinit(void (*fct)(struct proxy *))
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&proxy_deinit_list, &b->list); LIST_APPEND(&proxy_deinit_list, &b->list);
} }
/* used to register some per server de-initialization functions to call after /* used to register some per server de-initialization functions to call after
@ -164,7 +164,7 @@ void hap_register_server_deinit(void (*fct)(struct server *))
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&server_deinit_list, &b->list); LIST_APPEND(&server_deinit_list, &b->list);
} }
/* used to register some allocation functions to call for each thread. */ /* used to register some allocation functions to call for each thread. */
@ -178,7 +178,7 @@ void hap_register_per_thread_alloc(int (*fct)())
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&per_thread_alloc_list, &b->list); LIST_APPEND(&per_thread_alloc_list, &b->list);
} }
/* used to register some initialization functions to call for each thread. */ /* used to register some initialization functions to call for each thread. */
@ -192,7 +192,7 @@ void hap_register_per_thread_init(int (*fct)())
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&per_thread_init_list, &b->list); LIST_APPEND(&per_thread_init_list, &b->list);
} }
/* used to register some de-initialization functions to call for each thread. */ /* used to register some de-initialization functions to call for each thread. */
@ -206,7 +206,7 @@ void hap_register_per_thread_deinit(void (*fct)())
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&per_thread_deinit_list, &b->list); LIST_APPEND(&per_thread_deinit_list, &b->list);
} }
/* used to register some free functions to call for each thread. */ /* used to register some free functions to call for each thread. */
@ -220,5 +220,5 @@ void hap_register_per_thread_free(void (*fct)())
exit(1); exit(1);
} }
b->fct = fct; b->fct = fct;
LIST_ADDQ(&per_thread_free_list, &b->list); LIST_APPEND(&per_thread_free_list, &b->list);
} }

View File

@ -353,7 +353,7 @@ void default_add_listener(struct protocol *proto, struct listener *listener)
return; return;
listener_set_state(listener, LI_ASSIGNED); listener_set_state(listener, LI_ASSIGNED);
listener->rx.proto = proto; listener->rx.proto = proto;
LIST_ADDQ(&proto->receivers, &listener->rx.proto_list); LIST_APPEND(&proto->receivers, &listener->rx.proto_list);
proto->nb_receivers++; proto->nb_receivers++;
} }
@ -440,7 +440,7 @@ int pause_listener(struct listener *l)
if (l->rx.proto->suspend) if (l->rx.proto->suspend)
ret = l->rx.proto->suspend(l); ret = l->rx.proto->suspend(l);
MT_LIST_DEL(&l->wait_queue); MT_LIST_DELETE(&l->wait_queue);
listener_set_state(l, LI_PAUSED); listener_set_state(l, LI_PAUSED);
@ -474,7 +474,7 @@ int resume_listener(struct listener *l)
/* check that another thread didn't to the job in parallel (e.g. at the /* check that another thread didn't to the job in parallel (e.g. at the
* end of listen_accept() while we'd come from dequeue_all_listeners(). * end of listen_accept() while we'd come from dequeue_all_listeners().
*/ */
if (MT_LIST_ADDED(&l->wait_queue)) if (MT_LIST_INLIST(&l->wait_queue))
goto end; goto end;
if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) && if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) &&
@ -513,7 +513,7 @@ static void listener_full(struct listener *l)
{ {
HA_SPIN_LOCK(LISTENER_LOCK, &l->lock); HA_SPIN_LOCK(LISTENER_LOCK, &l->lock);
if (l->state >= LI_READY) { if (l->state >= LI_READY) {
MT_LIST_DEL(&l->wait_queue); MT_LIST_DELETE(&l->wait_queue);
if (l->state != LI_FULL) { if (l->state != LI_FULL) {
l->rx.proto->disable(l); l->rx.proto->disable(l);
listener_set_state(l, LI_FULL); listener_set_state(l, LI_FULL);
@ -529,7 +529,7 @@ static void limit_listener(struct listener *l, struct mt_list *list)
{ {
HA_SPIN_LOCK(LISTENER_LOCK, &l->lock); HA_SPIN_LOCK(LISTENER_LOCK, &l->lock);
if (l->state == LI_READY) { if (l->state == LI_READY) {
MT_LIST_TRY_ADDQ(list, &l->wait_queue); MT_LIST_TRY_APPEND(list, &l->wait_queue);
l->rx.proto->disable(l); l->rx.proto->disable(l);
listener_set_state(l, LI_LIMITED); listener_set_state(l, LI_LIMITED);
} }
@ -597,7 +597,7 @@ void default_unbind_listener(struct listener *listener)
*/ */
void do_unbind_listener(struct listener *listener) void do_unbind_listener(struct listener *listener)
{ {
MT_LIST_DEL(&listener->wait_queue); MT_LIST_DELETE(&listener->wait_queue);
if (listener->rx.proto->unbind) if (listener->rx.proto->unbind)
listener->rx.proto->unbind(listener); listener->rx.proto->unbind(listener);
@ -641,8 +641,8 @@ int create_listeners(struct bind_conf *bc, const struct sockaddr_storage *ss,
return 0; return 0;
} }
l->obj_type = OBJ_TYPE_LISTENER; l->obj_type = OBJ_TYPE_LISTENER;
LIST_ADDQ(&bc->frontend->conf.listeners, &l->by_fe); LIST_APPEND(&bc->frontend->conf.listeners, &l->by_fe);
LIST_ADDQ(&bc->listeners, &l->by_bind); LIST_APPEND(&bc->listeners, &l->by_bind);
l->bind_conf = bc; l->bind_conf = bc;
l->rx.settings = &bc->settings; l->rx.settings = &bc->settings;
l->rx.owner = l; l->rx.owner = l;
@ -681,7 +681,7 @@ void __delete_listener(struct listener *listener)
{ {
if (listener->state == LI_ASSIGNED) { if (listener->state == LI_ASSIGNED) {
listener_set_state(listener, LI_INIT); listener_set_state(listener, LI_INIT);
LIST_DEL(&listener->rx.proto_list); LIST_DELETE(&listener->rx.proto_list);
listener->rx.proto->nb_receivers--; listener->rx.proto->nb_receivers--;
_HA_ATOMIC_DEC(&jobs); _HA_ATOMIC_DEC(&jobs);
_HA_ATOMIC_DEC(&listeners); _HA_ATOMIC_DEC(&listeners);
@ -1199,7 +1199,7 @@ struct task *manage_global_listener_queue(struct task *t, void *context, unsigne
*/ */
void bind_register_keywords(struct bind_kw_list *kwl) void bind_register_keywords(struct bind_kw_list *kwl)
{ {
LIST_ADDQ(&bind_keywords.list, &kwl->list); LIST_APPEND(&bind_keywords.list, &kwl->list);
} }
/* Return a pointer to the bind keyword <kw>, or NULL if not found. If the /* Return a pointer to the bind keyword <kw>, or NULL if not found. If the

View File

@ -393,7 +393,7 @@ int parse_logformat_var(char *arg, int arg_len, char *var, int var_len, struct p
goto error_free; goto error_free;
} }
curproxy->to_log |= logformat_keywords[j].lw; curproxy->to_log |= logformat_keywords[j].lw;
LIST_ADDQ(list_format, &node->list); LIST_APPEND(list_format, &node->list);
} }
if (logformat_keywords[j].replace_by) if (logformat_keywords[j].replace_by)
ha_warning("parsing [%s:%d] : deprecated variable '%s' in '%s', please replace it with '%s'.\n", ha_warning("parsing [%s:%d] : deprecated variable '%s' in '%s', please replace it with '%s'.\n",
@ -447,7 +447,7 @@ int add_to_logformat_list(char *start, char *end, int type, struct list *list_fo
str[end - start] = '\0'; str[end - start] = '\0';
node->arg = str; node->arg = str;
node->type = LOG_FMT_TEXT; // type string node->type = LOG_FMT_TEXT; // type string
LIST_ADDQ(list_format, &node->list); LIST_APPEND(list_format, &node->list);
} else if (type == LF_SEPARATOR) { } else if (type == LF_SEPARATOR) {
struct logformat_node *node = calloc(1, sizeof(*node)); struct logformat_node *node = calloc(1, sizeof(*node));
if (!node) { if (!node) {
@ -455,7 +455,7 @@ int add_to_logformat_list(char *start, char *end, int type, struct list *list_fo
return 0; return 0;
} }
node->type = LOG_FMT_SEPARATOR; node->type = LOG_FMT_SEPARATOR;
LIST_ADDQ(list_format, &node->list); LIST_APPEND(list_format, &node->list);
} }
return 1; return 1;
} }
@ -528,7 +528,7 @@ int add_sample_to_logformat_list(char *text, char *arg, int arg_len, struct prox
curpx->to_log |= LW_XPRT; curpx->to_log |= LW_XPRT;
if (curpx->http_needed) if (curpx->http_needed)
curpx->to_log |= LW_REQ; curpx->to_log |= LW_REQ;
LIST_ADDQ(list_format, &node->list); LIST_APPEND(list_format, &node->list);
return 1; return 1;
error_free: error_free:
@ -574,7 +574,7 @@ int parse_logformat_string(const char *fmt, struct proxy *curproxy, struct list
/* flush the list first. */ /* flush the list first. */
list_for_each_entry_safe(tmplf, back, list_format, list) { list_for_each_entry_safe(tmplf, back, list_format, list) {
LIST_DEL(&tmplf->list); LIST_DELETE(&tmplf->list);
release_sample_expr(tmplf->expr); release_sample_expr(tmplf->expr);
free(tmplf->arg); free(tmplf->arg);
free(tmplf); free(tmplf);
@ -831,7 +831,7 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file
} }
list_for_each_entry_safe(logsrv, back, logsrvs, list) { list_for_each_entry_safe(logsrv, back, logsrvs, list) {
LIST_DEL(&logsrv->list); LIST_DELETE(&logsrv->list);
free(logsrv); free(logsrv);
} }
return 1; return 1;
@ -858,7 +858,7 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file
memcpy(node, logsrv, sizeof(struct logsrv)); memcpy(node, logsrv, sizeof(struct logsrv));
node->ref = logsrv; node->ref = logsrv;
LIST_INIT(&node->list); LIST_INIT(&node->list);
LIST_ADDQ(logsrvs, &node->list); LIST_APPEND(logsrvs, &node->list);
node->conf.file = strdup(file); node->conf.file = strdup(file);
node->conf.line = linenum; node->conf.line = linenum;
@ -1064,7 +1064,7 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file
} }
done: done:
LIST_ADDQ(logsrvs, &logsrv->list); LIST_APPEND(logsrvs, &logsrv->list);
return 1; return 1;
error: error:

View File

@ -25,8 +25,8 @@
#include <import/lru.h> #include <import/lru.h>
/* Minimal list manipulation macros for lru64_list */ /* Minimal list manipulation macros for lru64_list */
#define LIST_ADD(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); }) #define LIST_INSERT(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); })
#define LIST_DEL(el) ({ (el)->n->p = (el)->p; (el)->p->n = (el)->n; }) #define LIST_DELETE(el) ({ (el)->n->p = (el)->p; (el)->p->n = (el)->n; })
/* Lookup key <key> in LRU cache <lru> for use with domain <domain> whose data's /* Lookup key <key> in LRU cache <lru> for use with domain <domain> whose data's
@ -46,8 +46,8 @@ struct lru64 *lru64_lookup(unsigned long long key, struct lru64_head *lru,
* head of the LRU list. * head of the LRU list.
*/ */
if (elem->domain == domain && elem->revision == revision) { if (elem->domain == domain && elem->revision == revision) {
LIST_DEL(&elem->lru); LIST_DELETE(&elem->lru);
LIST_ADD(&lru->list, &elem->lru); LIST_INSERT(&lru->list, &elem->lru);
return elem; return elem;
} }
} }
@ -87,8 +87,8 @@ struct lru64 *lru64_get(unsigned long long key, struct lru64_head *lru,
* head of the LRU list. * head of the LRU list.
*/ */
if (elem->domain == domain && elem->revision == revision) { if (elem->domain == domain && elem->revision == revision) {
LIST_DEL(&elem->lru); LIST_DELETE(&elem->lru);
LIST_ADD(&lru->list, &elem->lru); LIST_INSERT(&lru->list, &elem->lru);
return elem; return elem;
} }
@ -96,7 +96,7 @@ struct lru64 *lru64_get(unsigned long long key, struct lru64_head *lru,
return NULL; // currently locked return NULL; // currently locked
/* recycle this entry */ /* recycle this entry */
LIST_DEL(&elem->lru); LIST_DELETE(&elem->lru);
} }
else { else {
/* New entry inserted, initialize and move to the head of the /* New entry inserted, initialize and move to the head of the
@ -107,7 +107,7 @@ struct lru64 *lru64_get(unsigned long long key, struct lru64_head *lru,
} }
elem->domain = NULL; elem->domain = NULL;
LIST_ADD(&lru->list, &elem->lru); LIST_INSERT(&lru->list, &elem->lru);
if (lru->cache_usage > lru->cache_size) { if (lru->cache_usage > lru->cache_size) {
/* try to kill oldest entry */ /* try to kill oldest entry */
@ -116,7 +116,7 @@ struct lru64 *lru64_get(unsigned long long key, struct lru64_head *lru,
old = container_of(lru->list.p, typeof(*old), lru); old = container_of(lru->list.p, typeof(*old), lru);
if (old->domain) { if (old->domain) {
/* not locked */ /* not locked */
LIST_DEL(&old->lru); LIST_DELETE(&old->lru);
__eb64_delete(&old->node); __eb64_delete(&old->node);
if (old->data && old->free) if (old->data && old->free)
old->free(old->data); old->free(old->data);
@ -181,7 +181,7 @@ int lru64_destroy(struct lru64_head *lru)
next = container_of(elem->lru.p, typeof(*next), lru); next = container_of(elem->lru.p, typeof(*next), lru);
if (elem->domain) { if (elem->domain) {
/* not locked */ /* not locked */
LIST_DEL(&elem->lru); LIST_DELETE(&elem->lru);
eb64_delete(&elem->node); eb64_delete(&elem->node);
if (elem->data && elem->free) if (elem->data && elem->free)
elem->free(elem->data); elem->free(elem->data);
@ -211,7 +211,7 @@ void lru64_kill_oldest(struct lru64_head *lru, unsigned long int nb)
if (!elem->domain) if (!elem->domain)
continue; /* locked entry */ continue; /* locked entry */
LIST_DEL(&elem->lru); LIST_DELETE(&elem->lru);
eb64_delete(&elem->node); eb64_delete(&elem->node);
if (elem->data && elem->free) if (elem->data && elem->free)
elem->free(elem->data); elem->free(elem->data);

View File

@ -46,7 +46,7 @@ void email_alert_free(struct email_alert *alert)
if (alert->rules.list) { if (alert->rules.list) {
list_for_each_entry_safe(rule, back, alert->rules.list, list) { list_for_each_entry_safe(rule, back, alert->rules.list, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
free_tcpcheck(rule, 1); free_tcpcheck(rule, 1);
} }
free_tcpcheck_vars(&alert->rules.preset_vars); free_tcpcheck_vars(&alert->rules.preset_vars);
@ -74,7 +74,7 @@ static struct task *process_email_alert(struct task *t, void *context, unsigned
} }
alert = LIST_NEXT(&q->email_alerts, typeof(alert), list); alert = LIST_NEXT(&q->email_alerts, typeof(alert), list);
LIST_DEL(&alert->list); LIST_DELETE(&alert->list);
t->expire = now_ms; t->expire = now_ms;
check->tcpcheck_rules = &alert->rules; check->tcpcheck_rules = &alert->rules;
check->status = HCHK_STATUS_INI; check->status = HCHK_STATUS_INI;
@ -189,7 +189,7 @@ static int enqueue_one_email_alert(struct proxy *p, struct server *s,
tcpcheck->action = TCPCHK_ACT_CONNECT; tcpcheck->action = TCPCHK_ACT_CONNECT;
tcpcheck->comment = NULL; tcpcheck->comment = NULL;
LIST_ADDQ(alert->rules.list, &tcpcheck->list); LIST_APPEND(alert->rules.list, &tcpcheck->list);
if (!add_tcpcheck_expect_str(&alert->rules, "220 ")) if (!add_tcpcheck_expect_str(&alert->rules, "220 "))
goto error; goto error;
@ -269,7 +269,7 @@ static int enqueue_one_email_alert(struct proxy *p, struct server *s,
HA_SPIN_LOCK(EMAIL_ALERTS_LOCK, &q->lock); HA_SPIN_LOCK(EMAIL_ALERTS_LOCK, &q->lock);
task_wakeup(check->task, TASK_WOKEN_MSG); task_wakeup(check->task, TASK_WOKEN_MSG);
LIST_ADDQ(&q->email_alerts, &alert->list); LIST_APPEND(&q->email_alerts, &alert->list);
HA_SPIN_UNLOCK(EMAIL_ALERTS_LOCK, &q->lock); HA_SPIN_UNLOCK(EMAIL_ALERTS_LOCK, &q->lock);
return 1; return 1;

View File

@ -330,7 +330,7 @@ static int cli_io_handler_pat_list(struct appctx *appctx)
*/ */
if (appctx->st2 == STAT_ST_LIST) { if (appctx->st2 == STAT_ST_LIST) {
if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) { if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) {
LIST_DEL(&appctx->ctx.map.bref.users); LIST_DELETE(&appctx->ctx.map.bref.users);
LIST_INIT(&appctx->ctx.map.bref.users); LIST_INIT(&appctx->ctx.map.bref.users);
} }
} }
@ -359,7 +359,7 @@ static int cli_io_handler_pat_list(struct appctx *appctx)
HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) { if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) {
LIST_DEL(&appctx->ctx.map.bref.users); LIST_DELETE(&appctx->ctx.map.bref.users);
LIST_INIT(&appctx->ctx.map.bref.users); LIST_INIT(&appctx->ctx.map.bref.users);
} }
@ -384,7 +384,7 @@ static int cli_io_handler_pat_list(struct appctx *appctx)
/* let's try again later from this stream. We add ourselves into /* let's try again later from this stream. We add ourselves into
* this stream's users so that it can remove us upon termination. * this stream's users so that it can remove us upon termination.
*/ */
LIST_ADDQ(&elt->back_refs, &appctx->ctx.map.bref.users); LIST_APPEND(&elt->back_refs, &appctx->ctx.map.bref.users);
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
si_rx_room_blk(si); si_rx_room_blk(si);
return 0; return 0;
@ -635,7 +635,7 @@ static void cli_release_show_map(struct appctx *appctx)
if (appctx->st2 == STAT_ST_LIST) { if (appctx->st2 == STAT_ST_LIST) {
HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users))
LIST_DEL(&appctx->ctx.map.bref.users); LIST_DELETE(&appctx->ctx.map.bref.users);
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
} }
} }

View File

@ -604,11 +604,11 @@ static inline struct buffer *fcgi_get_buf(struct fcgi_conn *fconn, struct buffer
{ {
struct buffer *buf = NULL; struct buffer *buf = NULL;
if (likely(!LIST_ADDED(&fconn->buf_wait.list)) && if (likely(!LIST_INLIST(&fconn->buf_wait.list)) &&
unlikely((buf = b_alloc(bptr)) == NULL)) { unlikely((buf = b_alloc(bptr)) == NULL)) {
fconn->buf_wait.target = fconn; fconn->buf_wait.target = fconn;
fconn->buf_wait.wakeup_cb = fcgi_buf_available; fconn->buf_wait.wakeup_cb = fcgi_buf_available;
LIST_ADDQ(&ti->buffer_wq, &fconn->buf_wait.list); LIST_APPEND(&ti->buffer_wq, &fconn->buf_wait.list);
} }
return buf; return buf;
} }
@ -845,7 +845,7 @@ static void fcgi_release(struct fcgi_conn *fconn)
TRACE_DEVEL("freeing fconn", FCGI_EV_FCONN_END, conn); TRACE_DEVEL("freeing fconn", FCGI_EV_FCONN_END, conn);
if (LIST_ADDED(&fconn->buf_wait.list)) if (LIST_INLIST(&fconn->buf_wait.list))
LIST_DEL_INIT(&fconn->buf_wait.list); LIST_DEL_INIT(&fconn->buf_wait.list);
fcgi_release_buf(fconn, &fconn->dbuf); fcgi_release_buf(fconn, &fconn->dbuf);
@ -3641,7 +3641,7 @@ static void fcgi_detach(struct conn_stream *cs)
} }
else if (!fconn->conn->hash_node->node.node.leaf_p && else if (!fconn->conn->hash_node->node.node.leaf_p &&
fcgi_avail_streams(fconn->conn) > 0 && objt_server(fconn->conn->target) && fcgi_avail_streams(fconn->conn) > 0 && objt_server(fconn->conn->target) &&
!LIST_ADDED(&fconn->conn->session_list)) { !LIST_INLIST(&fconn->conn->session_list)) {
ebmb_insert(&__objt_server(fconn->conn->target)->per_thr[tid].avail_conns, ebmb_insert(&__objt_server(fconn->conn->target)->per_thr[tid].avail_conns,
&fconn->conn->hash_node->node, &fconn->conn->hash_node->node,
sizeof(fconn->conn->hash_node->hash)); sizeof(fconn->conn->hash_node->hash));
@ -3708,9 +3708,9 @@ static void fcgi_do_shutr(struct fcgi_strm *fstrm)
* automatically called via the shut_tl tasklet when there's room * automatically called via the shut_tl tasklet when there's room
* again. * again.
*/ */
if (!LIST_ADDED(&fstrm->send_list)) { if (!LIST_INLIST(&fstrm->send_list)) {
if (fstrm->flags & (FCGI_SF_BLK_MBUSY|FCGI_SF_BLK_MROOM)) { if (fstrm->flags & (FCGI_SF_BLK_MBUSY|FCGI_SF_BLK_MROOM)) {
LIST_ADDQ(&fconn->send_list, &fstrm->send_list); LIST_APPEND(&fconn->send_list, &fstrm->send_list);
} }
} }
fstrm->flags |= FCGI_SF_WANT_SHUTR; fstrm->flags |= FCGI_SF_WANT_SHUTR;
@ -3764,9 +3764,9 @@ static void fcgi_do_shutw(struct fcgi_strm *fstrm)
* automatically called via the shut_tl tasklet when there's room * automatically called via the shut_tl tasklet when there's room
* again. * again.
*/ */
if (!LIST_ADDED(&fstrm->send_list)) { if (!LIST_INLIST(&fstrm->send_list)) {
if (fstrm->flags & (FCGI_SF_BLK_MBUSY|FCGI_SF_BLK_MROOM)) { if (fstrm->flags & (FCGI_SF_BLK_MBUSY|FCGI_SF_BLK_MROOM)) {
LIST_ADDQ(&fconn->send_list, &fstrm->send_list); LIST_APPEND(&fconn->send_list, &fstrm->send_list);
} }
} }
fstrm->flags |= FCGI_SF_WANT_SHUTW; fstrm->flags |= FCGI_SF_WANT_SHUTW;
@ -3859,8 +3859,8 @@ static int fcgi_subscribe(struct conn_stream *cs, int event_type, struct wait_ev
if (event_type & SUB_RETRY_SEND) { if (event_type & SUB_RETRY_SEND) {
TRACE_DEVEL("unsubscribe(send)", FCGI_EV_STRM_SEND, fconn->conn, fstrm); TRACE_DEVEL("unsubscribe(send)", FCGI_EV_STRM_SEND, fconn->conn, fstrm);
if (!LIST_ADDED(&fstrm->send_list)) if (!LIST_INLIST(&fstrm->send_list))
LIST_ADDQ(&fconn->send_list, &fstrm->send_list); LIST_APPEND(&fconn->send_list, &fstrm->send_list);
} }
return 0; return 0;
} }

View File

@ -448,11 +448,11 @@ static inline struct buffer *h1_get_buf(struct h1c *h1c, struct buffer *bptr)
{ {
struct buffer *buf = NULL; struct buffer *buf = NULL;
if (likely(!LIST_ADDED(&h1c->buf_wait.list)) && if (likely(!LIST_INLIST(&h1c->buf_wait.list)) &&
unlikely((buf = b_alloc(bptr)) == NULL)) { unlikely((buf = b_alloc(bptr)) == NULL)) {
h1c->buf_wait.target = h1c; h1c->buf_wait.target = h1c;
h1c->buf_wait.wakeup_cb = h1_buf_available; h1c->buf_wait.wakeup_cb = h1_buf_available;
LIST_ADDQ(&ti->buffer_wq, &h1c->buf_wait.list); LIST_APPEND(&ti->buffer_wq, &h1c->buf_wait.list);
} }
return buf; return buf;
} }
@ -913,7 +913,7 @@ static void h1_release(struct h1c *h1c)
} }
if (LIST_ADDED(&h1c->buf_wait.list)) if (LIST_INLIST(&h1c->buf_wait.list))
LIST_DEL_INIT(&h1c->buf_wait.list); LIST_DEL_INIT(&h1c->buf_wait.list);
h1_release_buf(h1c, &h1c->ibuf); h1_release_buf(h1c, &h1c->ibuf);

View File

@ -806,11 +806,11 @@ static inline struct buffer *h2_get_buf(struct h2c *h2c, struct buffer *bptr)
{ {
struct buffer *buf = NULL; struct buffer *buf = NULL;
if (likely(!LIST_ADDED(&h2c->buf_wait.list)) && if (likely(!LIST_INLIST(&h2c->buf_wait.list)) &&
unlikely((buf = b_alloc(bptr)) == NULL)) { unlikely((buf = b_alloc(bptr)) == NULL)) {
h2c->buf_wait.target = h2c; h2c->buf_wait.target = h2c;
h2c->buf_wait.wakeup_cb = h2_buf_available; h2c->buf_wait.wakeup_cb = h2_buf_available;
LIST_ADDQ(&ti->buffer_wq, &h2c->buf_wait.list); LIST_APPEND(&ti->buffer_wq, &h2c->buf_wait.list);
} }
return buf; return buf;
} }
@ -1074,7 +1074,7 @@ static void h2_release(struct h2c *h2c)
TRACE_DEVEL("freeing h2c", H2_EV_H2C_END, conn); TRACE_DEVEL("freeing h2c", H2_EV_H2C_END, conn);
hpack_dht_free(h2c->ddht); hpack_dht_free(h2c->ddht);
if (LIST_ADDED(&h2c->buf_wait.list)) if (LIST_INLIST(&h2c->buf_wait.list))
LIST_DEL_INIT(&h2c->buf_wait.list); LIST_DEL_INIT(&h2c->buf_wait.list);
h2_release_buf(h2c, &h2c->dbuf); h2_release_buf(h2c, &h2c->dbuf);
@ -2125,7 +2125,7 @@ static void h2c_unblock_sfctl(struct h2c *h2c)
LIST_DEL_INIT(&h2s->list); LIST_DEL_INIT(&h2s->list);
if ((h2s->subs && h2s->subs->events & SUB_RETRY_SEND) || if ((h2s->subs && h2s->subs->events & SUB_RETRY_SEND) ||
h2s->flags & (H2_SF_WANT_SHUTR|H2_SF_WANT_SHUTW)) h2s->flags & (H2_SF_WANT_SHUTR|H2_SF_WANT_SHUTW))
LIST_ADDQ(&h2c->send_list, &h2s->list); LIST_APPEND(&h2c->send_list, &h2s->list);
} }
node = eb32_next(node); node = eb32_next(node);
} }
@ -2478,7 +2478,7 @@ static int h2c_handle_window_update(struct h2c *h2c, struct h2s *h2s)
LIST_DEL_INIT(&h2s->list); LIST_DEL_INIT(&h2s->list);
if ((h2s->subs && h2s->subs->events & SUB_RETRY_SEND) || if ((h2s->subs && h2s->subs->events & SUB_RETRY_SEND) ||
h2s->flags & (H2_SF_WANT_SHUTR|H2_SF_WANT_SHUTW)) h2s->flags & (H2_SF_WANT_SHUTR|H2_SF_WANT_SHUTW))
LIST_ADDQ(&h2c->send_list, &h2s->list); LIST_APPEND(&h2c->send_list, &h2s->list);
} }
} }
else { else {
@ -4274,7 +4274,7 @@ static void h2_detach(struct conn_stream *cs)
} }
else if (!h2c->conn->hash_node->node.node.leaf_p && else if (!h2c->conn->hash_node->node.node.leaf_p &&
h2_avail_streams(h2c->conn) > 0 && objt_server(h2c->conn->target) && h2_avail_streams(h2c->conn) > 0 && objt_server(h2c->conn->target) &&
!LIST_ADDED(&h2c->conn->session_list)) { !LIST_INLIST(&h2c->conn->session_list)) {
ebmb_insert(&__objt_server(h2c->conn->target)->per_thr[tid].avail_conns, ebmb_insert(&__objt_server(h2c->conn->target)->per_thr[tid].avail_conns,
&h2c->conn->hash_node->node, &h2c->conn->hash_node->node,
sizeof(h2c->conn->hash_node->hash)); sizeof(h2c->conn->hash_node->hash));
@ -4361,11 +4361,11 @@ add_to_list:
* again. * again.
*/ */
h2s->flags |= H2_SF_WANT_SHUTR; h2s->flags |= H2_SF_WANT_SHUTR;
if (!LIST_ADDED(&h2s->list)) { if (!LIST_INLIST(&h2s->list)) {
if (h2s->flags & H2_SF_BLK_MFCTL) if (h2s->flags & H2_SF_BLK_MFCTL)
LIST_ADDQ(&h2c->fctl_list, &h2s->list); LIST_APPEND(&h2c->fctl_list, &h2s->list);
else if (h2s->flags & (H2_SF_BLK_MBUSY|H2_SF_BLK_MROOM)) else if (h2s->flags & (H2_SF_BLK_MBUSY|H2_SF_BLK_MROOM))
LIST_ADDQ(&h2c->send_list, &h2s->list); LIST_APPEND(&h2c->send_list, &h2s->list);
} }
TRACE_LEAVE(H2_EV_STRM_SHUT, h2c->conn, h2s); TRACE_LEAVE(H2_EV_STRM_SHUT, h2c->conn, h2s);
return; return;
@ -4436,11 +4436,11 @@ static void h2_do_shutw(struct h2s *h2s)
* again. * again.
*/ */
h2s->flags |= H2_SF_WANT_SHUTW; h2s->flags |= H2_SF_WANT_SHUTW;
if (!LIST_ADDED(&h2s->list)) { if (!LIST_INLIST(&h2s->list)) {
if (h2s->flags & H2_SF_BLK_MFCTL) if (h2s->flags & H2_SF_BLK_MFCTL)
LIST_ADDQ(&h2c->fctl_list, &h2s->list); LIST_APPEND(&h2c->fctl_list, &h2s->list);
else if (h2s->flags & (H2_SF_BLK_MBUSY|H2_SF_BLK_MROOM)) else if (h2s->flags & (H2_SF_BLK_MBUSY|H2_SF_BLK_MROOM))
LIST_ADDQ(&h2c->send_list, &h2s->list); LIST_APPEND(&h2c->send_list, &h2s->list);
} }
TRACE_LEAVE(H2_EV_STRM_SHUT, h2c->conn, h2s); TRACE_LEAVE(H2_EV_STRM_SHUT, h2c->conn, h2s);
return; return;
@ -5765,9 +5765,9 @@ static size_t h2s_make_data(struct h2s *h2s, struct buffer *buf, size_t count)
if (h2s_mws(h2s) <= 0) { if (h2s_mws(h2s) <= 0) {
h2s->flags |= H2_SF_BLK_SFCTL; h2s->flags |= H2_SF_BLK_SFCTL;
if (LIST_ADDED(&h2s->list)) if (LIST_INLIST(&h2s->list))
LIST_DEL_INIT(&h2s->list); LIST_DEL_INIT(&h2s->list);
LIST_ADDQ(&h2c->blocked_list, &h2s->list); LIST_APPEND(&h2c->blocked_list, &h2s->list);
TRACE_STATE("stream window <=0, flow-controlled", H2_EV_TX_FRAME|H2_EV_TX_DATA|H2_EV_H2S_FCTL, h2c->conn, h2s); TRACE_STATE("stream window <=0, flow-controlled", H2_EV_TX_FRAME|H2_EV_TX_DATA|H2_EV_H2S_FCTL, h2c->conn, h2s);
goto end; goto end;
} }
@ -6151,11 +6151,11 @@ static int h2_subscribe(struct conn_stream *cs, int event_type, struct wait_even
if (event_type & SUB_RETRY_SEND) { if (event_type & SUB_RETRY_SEND) {
TRACE_DEVEL("subscribe(send)", H2_EV_STRM_SEND, h2c->conn, h2s); TRACE_DEVEL("subscribe(send)", H2_EV_STRM_SEND, h2c->conn, h2s);
if (!(h2s->flags & H2_SF_BLK_SFCTL) && if (!(h2s->flags & H2_SF_BLK_SFCTL) &&
!LIST_ADDED(&h2s->list)) { !LIST_INLIST(&h2s->list)) {
if (h2s->flags & H2_SF_BLK_MFCTL) if (h2s->flags & H2_SF_BLK_MFCTL)
LIST_ADDQ(&h2c->fctl_list, &h2s->list); LIST_APPEND(&h2c->fctl_list, &h2s->list);
else else
LIST_ADDQ(&h2c->send_list, &h2s->list); LIST_APPEND(&h2c->send_list, &h2s->list);
} }
} }
TRACE_LEAVE(H2_EV_STRM_SEND|H2_EV_STRM_RECV, h2c->conn, h2s); TRACE_LEAVE(H2_EV_STRM_SEND|H2_EV_STRM_RECV, h2c->conn, h2s);

View File

@ -70,7 +70,7 @@ int mworker_ext_launch_all()
} }
LIST_DEL(&child->list); LIST_DELETE(&child->list);
mworker_free_child(child); mworker_free_child(child);
child = NULL; child = NULL;
@ -183,7 +183,7 @@ int cfg_parse_program(const char *file, int linenum, char **args, int kwm)
goto error; goto error;
} }
LIST_ADDQ(&proc_list, &ext_child->list); LIST_APPEND(&proc_list, &ext_child->list);
} else if (strcmp(args[0], "command") == 0) { } else if (strcmp(args[0], "command") == 0) {
int arg_nb = 0; int arg_nb = 0;
@ -302,7 +302,7 @@ int cfg_parse_program(const char *file, int linenum, char **args, int kwm)
error: error:
if (ext_child) { if (ext_child) {
LIST_DEL(&ext_child->list); LIST_DELETE(&ext_child->list);
if (ext_child->command) { if (ext_child->command) {
int i; int i;

View File

@ -184,7 +184,7 @@ void mworker_env_to_proc_list()
/* this is a process inherited from a reload that should be leaving */ /* this is a process inherited from a reload that should be leaving */
child->options |= PROC_O_LEAVING; child->options |= PROC_O_LEAVING;
LIST_ADDQ(&proc_list, &child->list); LIST_APPEND(&proc_list, &child->list);
} else { } else {
mworker_free_child(child); mworker_free_child(child);
} }
@ -276,7 +276,7 @@ restart_wait:
if (child->pid != exitpid) if (child->pid != exitpid)
continue; continue;
LIST_DEL(&child->list); LIST_DELETE(&child->list);
close(child->ipc_fd[0]); close(child->ipc_fd[0]);
childfound = 1; childfound = 1;
break; break;

View File

@ -1163,7 +1163,7 @@ void pat_prune_gen(struct pattern_expr *expr)
struct pattern_list *pat, *tmp; struct pattern_list *pat, *tmp;
list_for_each_entry_safe(pat, tmp, &expr->patterns, list) { list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
LIST_DEL(&pat->list); LIST_DELETE(&pat->list);
pat_unlink_from_head(&pat->pat.ref->list_head, &pat->from_ref); pat_unlink_from_head(&pat->pat.ref->list_head, &pat->from_ref);
if (pat->pat.sflags & PAT_SF_REGFREE) if (pat->pat.sflags & PAT_SF_REGFREE)
regex_free(pat->pat.ptr.ptr); regex_free(pat->pat.ptr.ptr);
@ -1200,7 +1200,7 @@ int pat_idx_list_val(struct pattern_expr *expr, struct pattern *pat, char **err)
memcpy(&patl->pat, pat, sizeof(*pat)); memcpy(&patl->pat, pat, sizeof(*pat));
/* chain pattern in the expression */ /* chain pattern in the expression */
LIST_ADDQ(&expr->patterns, &patl->list); LIST_APPEND(&expr->patterns, &patl->list);
/* and from the reference */ /* and from the reference */
patl->from_ref = pat->ref->list_head; patl->from_ref = pat->ref->list_head;
pat->ref->list_head = &patl->from_ref; pat->ref->list_head = &patl->from_ref;
@ -1232,7 +1232,7 @@ int pat_idx_list_ptr(struct pattern_expr *expr, struct pattern *pat, char **err)
memcpy(patl->pat.ptr.ptr, pat->ptr.ptr, pat->len); memcpy(patl->pat.ptr.ptr, pat->ptr.ptr, pat->len);
/* chain pattern in the expression */ /* chain pattern in the expression */
LIST_ADDQ(&expr->patterns, &patl->list); LIST_APPEND(&expr->patterns, &patl->list);
/* and from the reference */ /* and from the reference */
patl->from_ref = pat->ref->list_head; patl->from_ref = pat->ref->list_head;
pat->ref->list_head = &patl->from_ref; pat->ref->list_head = &patl->from_ref;
@ -1265,7 +1265,7 @@ int pat_idx_list_str(struct pattern_expr *expr, struct pattern *pat, char **err)
patl->pat.ptr.str[patl->pat.len] = '\0'; patl->pat.ptr.str[patl->pat.len] = '\0';
/* chain pattern in the expression */ /* chain pattern in the expression */
LIST_ADDQ(&expr->patterns, &patl->list); LIST_APPEND(&expr->patterns, &patl->list);
/* and from the reference */ /* and from the reference */
patl->from_ref = pat->ref->list_head; patl->from_ref = pat->ref->list_head;
pat->ref->list_head = &patl->from_ref; pat->ref->list_head = &patl->from_ref;
@ -1298,7 +1298,7 @@ int pat_idx_list_reg_cap(struct pattern_expr *expr, struct pattern *pat, int cap
} }
/* chain pattern in the expression */ /* chain pattern in the expression */
LIST_ADDQ(&expr->patterns, &patl->list); LIST_APPEND(&expr->patterns, &patl->list);
/* and from the reference */ /* and from the reference */
patl->from_ref = pat->ref->list_head; patl->from_ref = pat->ref->list_head;
pat->ref->list_head = &patl->from_ref; pat->ref->list_head = &patl->from_ref;
@ -1506,7 +1506,7 @@ void pat_delete_gen(struct pat_ref *ref, struct pat_ref_elt *elt)
BUG_ON(pat->pat.ref != elt); BUG_ON(pat->pat.ref != elt);
/* Delete and free entry. */ /* Delete and free entry. */
LIST_DEL(&pat->list); LIST_DELETE(&pat->list);
if (pat->pat.sflags & PAT_SF_REGFREE) if (pat->pat.sflags & PAT_SF_REGFREE)
regex_free(pat->pat.ptr.reg); regex_free(pat->pat.ptr.reg);
else else
@ -1597,10 +1597,10 @@ void pat_ref_delete_by_ptr(struct pat_ref *ref, struct pat_ref_elt *elt)
* not relink them if this elt was the last one in the list. * not relink them if this elt was the last one in the list.
*/ */
list_for_each_entry_safe(bref, back, &elt->back_refs, users) { list_for_each_entry_safe(bref, back, &elt->back_refs, users) {
LIST_DEL(&bref->users); LIST_DELETE(&bref->users);
LIST_INIT(&bref->users); LIST_INIT(&bref->users);
if (elt->list.n != &ref->head) if (elt->list.n != &ref->head)
LIST_ADDQ(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users); LIST_APPEND(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users);
bref->ref = elt->list.n; bref->ref = elt->list.n;
} }
@ -1613,7 +1613,7 @@ void pat_ref_delete_by_ptr(struct pat_ref *ref, struct pat_ref_elt *elt)
list_for_each_entry(expr, &ref->pat, list) list_for_each_entry(expr, &ref->pat, list)
HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &expr->lock); HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &expr->lock);
LIST_DEL(&elt->list); LIST_DELETE(&elt->list);
free(elt->sample); free(elt->sample);
free(elt->pattern); free(elt->pattern);
free(elt); free(elt);
@ -1823,7 +1823,7 @@ struct pat_ref *pat_ref_new(const char *reference, const char *display, unsigned
LIST_INIT(&ref->head); LIST_INIT(&ref->head);
LIST_INIT(&ref->pat); LIST_INIT(&ref->pat);
HA_SPIN_INIT(&ref->lock); HA_SPIN_INIT(&ref->lock);
LIST_ADDQ(&pattern_reference, &ref->list); LIST_APPEND(&pattern_reference, &ref->list);
return ref; return ref;
} }
@ -1859,7 +1859,7 @@ struct pat_ref *pat_ref_newid(int unique_id, const char *display, unsigned int f
LIST_INIT(&ref->head); LIST_INIT(&ref->head);
LIST_INIT(&ref->pat); LIST_INIT(&ref->pat);
HA_SPIN_INIT(&ref->lock); HA_SPIN_INIT(&ref->lock);
LIST_ADDQ(&pattern_reference, &ref->list); LIST_APPEND(&pattern_reference, &ref->list);
return ref; return ref;
} }
@ -1893,7 +1893,7 @@ struct pat_ref_elt *pat_ref_append(struct pat_ref *ref, const char *pattern, con
LIST_INIT(&elt->back_refs); LIST_INIT(&elt->back_refs);
elt->list_head = NULL; elt->list_head = NULL;
elt->tree_head = NULL; elt->tree_head = NULL;
LIST_ADDQ(&ref->head, &elt->list); LIST_APPEND(&ref->head, &elt->list);
return elt; return elt;
fail: fail:
if (elt) if (elt)
@ -2052,17 +2052,17 @@ int pat_ref_purge_older(struct pat_ref *ref, unsigned int oldest, int budget)
* not relink them if this elt was the last one in the list. * not relink them if this elt was the last one in the list.
*/ */
list_for_each_entry_safe(bref, bref_bck, &elt->back_refs, users) { list_for_each_entry_safe(bref, bref_bck, &elt->back_refs, users) {
LIST_DEL(&bref->users); LIST_DELETE(&bref->users);
LIST_INIT(&bref->users); LIST_INIT(&bref->users);
if (elt->list.n != &ref->head) if (elt->list.n != &ref->head)
LIST_ADDQ(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users); LIST_APPEND(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users);
bref->ref = elt->list.n; bref->ref = elt->list.n;
} }
/* delete the storage for all representations of this pattern. */ /* delete the storage for all representations of this pattern. */
pat_delete_gen(ref, elt); pat_delete_gen(ref, elt);
LIST_DEL(&elt->list); LIST_DELETE(&elt->list);
free(elt->pattern); free(elt->pattern);
free(elt->sample); free(elt->sample);
free(elt); free(elt);
@ -2107,15 +2107,15 @@ void pat_ref_reload(struct pat_ref *ref, struct pat_ref *replace)
bref->ref = NULL; bref->ref = NULL;
} }
pat_delete_gen(ref, elt); pat_delete_gen(ref, elt);
LIST_DEL(&elt->list); LIST_DELETE(&elt->list);
free(elt->pattern); free(elt->pattern);
free(elt->sample); free(elt->sample);
free(elt); free(elt);
} }
/* switch pat_ret_elt lists */ /* switch pat_ret_elt lists */
LIST_ADD(&replace->head, &ref->head); LIST_INSERT(&replace->head, &ref->head);
LIST_DEL(&replace->head); LIST_DELETE(&replace->head);
list_for_each_entry(expr, &ref->pat, list) { list_for_each_entry(expr, &ref->pat, list) {
list_for_each_entry(elt, &ref->head, list) { list_for_each_entry(elt, &ref->head, list) {
@ -2255,9 +2255,9 @@ struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref
/* This new pattern expression reference one of his heads. */ /* This new pattern expression reference one of his heads. */
expr->pat_head = head; expr->pat_head = head;
/* Link with ref, or to self to facilitate LIST_DEL() */ /* Link with ref, or to self to facilitate LIST_DELETE() */
if (ref) if (ref)
LIST_ADDQ(&ref->pat, &expr->list); LIST_APPEND(&ref->pat, &expr->list);
else else
LIST_INIT(&expr->list); LIST_INIT(&expr->list);
@ -2281,7 +2281,7 @@ struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref
list->expr = expr; list->expr = expr;
/* Link the list element with the pattern_head. */ /* Link the list element with the pattern_head. */
LIST_ADDQ(&head->head, &list->list); LIST_APPEND(&head->head, &list->list);
return expr; return expr;
} }
@ -2637,9 +2637,9 @@ void pattern_prune(struct pattern_head *head)
struct pattern_expr_list *list, *safe; struct pattern_expr_list *list, *safe;
list_for_each_entry_safe(list, safe, &head->head, list) { list_for_each_entry_safe(list, safe, &head->head, list) {
LIST_DEL(&list->list); LIST_DELETE(&list->list);
if (list->do_free) { if (list->do_free) {
LIST_DEL(&list->expr->list); LIST_DELETE(&list->expr->list);
HA_RWLOCK_WRLOCK(PATEXP_LOCK, &list->expr->lock); HA_RWLOCK_WRLOCK(PATEXP_LOCK, &list->expr->lock);
head->prune(list->expr); head->prune(list->expr);
HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &list->expr->lock); HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &list->expr->lock);
@ -2754,11 +2754,11 @@ int pattern_finalize_config(void)
/* Convert back to linked list */ /* Convert back to linked list */
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
LIST_ADDQ(&pr, &arr[i]->list); LIST_APPEND(&pr, &arr[i]->list);
/* swap root */ /* swap root */
LIST_ADD(&pr, &pattern_reference); LIST_INSERT(&pr, &pattern_reference);
LIST_DEL(&pr); LIST_DELETE(&pr);
free(arr); free(arr);
return 0; return 0;

View File

@ -2858,7 +2858,7 @@ static struct appctx *peer_session_create(struct peers *peers, struct peer *peer
/* Error unrolling */ /* Error unrolling */
out_free_strm: out_free_strm:
LIST_DEL(&s->list); LIST_DELETE(&s->list);
pool_free(pool_head_stream, s); pool_free(pool_head_stream, s);
out_free_sess: out_free_sess:
session_free(sess); session_free(sess);

View File

@ -104,7 +104,7 @@ struct pool_head *create_pool(char *name, unsigned int size, unsigned int flags)
strlcpy2(pool->name, name, sizeof(pool->name)); strlcpy2(pool->name, name, sizeof(pool->name));
pool->size = size; pool->size = size;
pool->flags = flags; pool->flags = flags;
LIST_ADDQ(start, &pool->list); LIST_APPEND(start, &pool->list);
#ifdef CONFIG_HAP_POOLS #ifdef CONFIG_HAP_POOLS
/* update per-thread pool cache if necessary */ /* update per-thread pool cache if necessary */
@ -202,8 +202,8 @@ void pool_evict_from_local_cache(struct pool_head *pool)
ph->count--; ph->count--;
pool_cache_bytes -= pool->size; pool_cache_bytes -= pool->size;
pool_cache_count--; pool_cache_count--;
LIST_DEL(&item->by_pool); LIST_DELETE(&item->by_pool);
LIST_DEL(&item->by_lru); LIST_DELETE(&item->by_lru);
pool_put_to_shared_cache(pool, item); pool_put_to_shared_cache(pool, item);
} }
} }
@ -224,8 +224,8 @@ void pool_evict_from_local_caches()
*/ */
ph = LIST_NEXT(&item->by_pool, struct pool_cache_head *, list); ph = LIST_NEXT(&item->by_pool, struct pool_cache_head *, list);
pool = container_of(ph - tid, struct pool_head, cache); pool = container_of(ph - tid, struct pool_head, cache);
LIST_DEL(&item->by_pool); LIST_DELETE(&item->by_pool);
LIST_DEL(&item->by_lru); LIST_DELETE(&item->by_lru);
ph->count--; ph->count--;
pool_cache_count--; pool_cache_count--;
pool_cache_bytes -= pool->size; pool_cache_bytes -= pool->size;
@ -243,8 +243,8 @@ void pool_put_to_cache(struct pool_head *pool, void *ptr)
struct pool_cache_item *item = (struct pool_cache_item *)ptr; struct pool_cache_item *item = (struct pool_cache_item *)ptr;
struct pool_cache_head *ph = &pool->cache[tid]; struct pool_cache_head *ph = &pool->cache[tid];
LIST_ADD(&ph->list, &item->by_pool); LIST_INSERT(&ph->list, &item->by_pool);
LIST_ADD(&ti->pool_lru_head, &item->by_lru); LIST_INSERT(&ti->pool_lru_head, &item->by_lru);
ph->count++; ph->count++;
pool_cache_count++; pool_cache_count++;
pool_cache_bytes += pool->size; pool_cache_bytes += pool->size;
@ -429,7 +429,7 @@ void *pool_destroy(struct pool_head *pool)
return pool; return pool;
pool->users--; pool->users--;
if (!pool->users) { if (!pool->users) {
LIST_DEL(&pool->list); LIST_DELETE(&pool->list);
#ifndef CONFIG_HAP_LOCKLESS_POOLS #ifndef CONFIG_HAP_LOCKLESS_POOLS
HA_SPIN_DESTROY(&pool->lock); HA_SPIN_DESTROY(&pool->lock);
#endif #endif

View File

@ -36,7 +36,7 @@ __decl_spinlock(proto_lock);
void protocol_register(struct protocol *proto) void protocol_register(struct protocol *proto)
{ {
HA_SPIN_LOCK(PROTO_LOCK, &proto_lock); HA_SPIN_LOCK(PROTO_LOCK, &proto_lock);
LIST_ADDQ(&protocols, &proto->list); LIST_APPEND(&protocols, &proto->list);
if (proto->fam->sock_domain >= 0 && proto->fam->sock_domain < AF_CUST_MAX) if (proto->fam->sock_domain >= 0 && proto->fam->sock_domain < AF_CUST_MAX)
__protocol_by_family[proto->fam->sock_domain] __protocol_by_family[proto->fam->sock_domain]
[proto->sock_type == SOCK_DGRAM] [proto->sock_type == SOCK_DGRAM]
@ -50,7 +50,7 @@ void protocol_register(struct protocol *proto)
void protocol_unregister(struct protocol *proto) void protocol_unregister(struct protocol *proto)
{ {
HA_SPIN_LOCK(PROTO_LOCK, &proto_lock); HA_SPIN_LOCK(PROTO_LOCK, &proto_lock);
LIST_DEL(&proto->list); LIST_DELETE(&proto->list);
LIST_INIT(&proto->list); LIST_INIT(&proto->list);
HA_SPIN_UNLOCK(PROTO_LOCK, &proto_lock); HA_SPIN_UNLOCK(PROTO_LOCK, &proto_lock);
} }

View File

@ -121,7 +121,7 @@ static void free_stick_rules(struct list *rules)
struct sticking_rule *rule, *ruleb; struct sticking_rule *rule, *ruleb;
list_for_each_entry_safe(rule, ruleb, rules, list) { list_for_each_entry_safe(rule, ruleb, rules, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
free_acl_cond(rule->cond); free_acl_cond(rule->cond);
release_sample_expr(rule->expr); release_sample_expr(rule->expr);
free(rule); free(rule);
@ -176,7 +176,7 @@ void free_proxy(struct proxy *p)
free(p->conf.lfsd_file); free(p->conf.lfsd_file);
list_for_each_entry_safe(cond, condb, &p->mon_fail_cond, list) { list_for_each_entry_safe(cond, condb, &p->mon_fail_cond, list) {
LIST_DEL(&cond->list); LIST_DELETE(&cond->list);
prune_acl_cond(cond); prune_acl_cond(cond);
free(cond); free(cond);
} }
@ -185,16 +185,16 @@ void free_proxy(struct proxy *p)
EXTRA_COUNTERS_FREE(p->extra_counters_be); EXTRA_COUNTERS_FREE(p->extra_counters_be);
list_for_each_entry_safe(acl, aclb, &p->acl, list) { list_for_each_entry_safe(acl, aclb, &p->acl, list) {
LIST_DEL(&acl->list); LIST_DELETE(&acl->list);
prune_acl(acl); prune_acl(acl);
free(acl); free(acl);
} }
list_for_each_entry_safe(srule, sruleb, &p->server_rules, list) { list_for_each_entry_safe(srule, sruleb, &p->server_rules, list) {
LIST_DEL(&srule->list); LIST_DELETE(&srule->list);
prune_acl_cond(srule->cond); prune_acl_cond(srule->cond);
list_for_each_entry_safe(lf, lfb, &srule->expr, list) { list_for_each_entry_safe(lf, lfb, &srule->expr, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -205,7 +205,7 @@ void free_proxy(struct proxy *p)
} }
list_for_each_entry_safe(rule, ruleb, &p->switching_rules, list) { list_for_each_entry_safe(rule, ruleb, &p->switching_rules, list) {
LIST_DEL(&rule->list); LIST_DELETE(&rule->list);
if (rule->cond) { if (rule->cond) {
prune_acl_cond(rule->cond); prune_acl_cond(rule->cond);
free(rule->cond); free(rule->cond);
@ -215,40 +215,40 @@ void free_proxy(struct proxy *p)
} }
list_for_each_entry_safe(rdr, rdrb, &p->redirect_rules, list) { list_for_each_entry_safe(rdr, rdrb, &p->redirect_rules, list) {
LIST_DEL(&rdr->list); LIST_DELETE(&rdr->list);
if (rdr->cond) { if (rdr->cond) {
prune_acl_cond(rdr->cond); prune_acl_cond(rdr->cond);
free(rdr->cond); free(rdr->cond);
} }
free(rdr->rdr_str); free(rdr->rdr_str);
list_for_each_entry_safe(lf, lfb, &rdr->rdr_fmt, list) { list_for_each_entry_safe(lf, lfb, &rdr->rdr_fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
free(lf); free(lf);
} }
free(rdr); free(rdr);
} }
list_for_each_entry_safe(log, logb, &p->logsrvs, list) { list_for_each_entry_safe(log, logb, &p->logsrvs, list) {
LIST_DEL(&log->list); LIST_DELETE(&log->list);
free(log); free(log);
} }
list_for_each_entry_safe(lf, lfb, &p->logformat, list) { list_for_each_entry_safe(lf, lfb, &p->logformat, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
} }
list_for_each_entry_safe(lf, lfb, &p->logformat_sd, list) { list_for_each_entry_safe(lf, lfb, &p->logformat_sd, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
} }
list_for_each_entry_safe(lf, lfb, &p->format_unique_id, list) { list_for_each_entry_safe(lf, lfb, &p->format_unique_id, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -293,8 +293,8 @@ void free_proxy(struct proxy *p)
}/* end while(s) */ }/* end while(s) */
list_for_each_entry_safe(l, l_next, &p->conf.listeners, by_fe) { list_for_each_entry_safe(l, l_next, &p->conf.listeners, by_fe) {
LIST_DEL(&l->by_fe); LIST_DELETE(&l->by_fe);
LIST_DEL(&l->by_bind); LIST_DELETE(&l->by_bind);
free(l->name); free(l->name);
free(l->counters); free(l->counters);
@ -308,7 +308,7 @@ void free_proxy(struct proxy *p)
bind_conf->xprt->destroy_bind_conf(bind_conf); bind_conf->xprt->destroy_bind_conf(bind_conf);
free(bind_conf->file); free(bind_conf->file);
free(bind_conf->arg); free(bind_conf->arg);
LIST_DEL(&bind_conf->by_fe); LIST_DELETE(&bind_conf->by_fe);
free(bind_conf); free(bind_conf);
} }
@ -1684,7 +1684,7 @@ static int proxy_defproxy_cpy(struct proxy *curproxy, const struct proxy *defpro
memcpy(node, tmplogsrv, sizeof(struct logsrv)); memcpy(node, tmplogsrv, sizeof(struct logsrv));
node->ref = tmplogsrv->ref; node->ref = tmplogsrv->ref;
LIST_INIT(&node->list); LIST_INIT(&node->list);
LIST_ADDQ(&curproxy->logsrvs, &node->list); LIST_APPEND(&curproxy->logsrvs, &node->list);
} }
curproxy->conf.uniqueid_format_string = defproxy->conf.uniqueid_format_string; curproxy->conf.uniqueid_format_string = defproxy->conf.uniqueid_format_string;

View File

@ -151,7 +151,7 @@ struct connection *quic_sock_accept_conn(struct listener *l, int *status)
goto err; goto err;
qc = pkt->qc; qc = pkt->qc;
LIST_DEL(&pkt->rx_list); LIST_DELETE(&pkt->rx_list);
if (!new_quic_cli_conn(qc, l, &pkt->saddr)) if (!new_quic_cli_conn(qc, l, &pkt->saddr))
goto err; goto err;

View File

@ -210,7 +210,7 @@ struct resolv_srvrq *new_resolv_srvrq(struct server *srv, char *fqdn)
proxy_type_str(px), px->id, srv->id); proxy_type_str(px), px->id, srv->id);
goto err; goto err;
} }
LIST_ADDQ(&resolv_srvrq_list, &srvrq->list); LIST_APPEND(&resolv_srvrq_list, &srvrq->list);
return srvrq; return srvrq;
err: err:
@ -378,8 +378,8 @@ static int resolv_send_query(struct resolv_resolution *resolution)
} }
/* Push the resolution at the end of the active list */ /* Push the resolution at the end of the active list */
LIST_DEL(&resolution->list); LIST_DELETE(&resolution->list);
LIST_ADDQ(&resolvers->resolutions.curr, &resolution->list); LIST_APPEND(&resolvers->resolutions.curr, &resolution->list);
return 0; return 0;
} }
@ -617,7 +617,7 @@ static void resolv_check_response(struct resolv_resolution *res)
} }
rm_obselete_item: rm_obselete_item:
LIST_DEL(&item->list); LIST_DELETE(&item->list);
if (item->ar_item) { if (item->ar_item) {
pool_free(resolv_answer_item_pool, item->ar_item); pool_free(resolv_answer_item_pool, item->ar_item);
item->ar_item = NULL; item->ar_item = NULL;
@ -854,7 +854,7 @@ static int resolv_validate_dns_response(unsigned char *resp, unsigned char *bufe
if (query_record_id > DNS_MAX_QUERY_RECORDS) if (query_record_id > DNS_MAX_QUERY_RECORDS)
goto invalid_resp; goto invalid_resp;
query = &resolution->response_query_records[query_record_id]; query = &resolution->response_query_records[query_record_id];
LIST_ADDQ(&r_res->query_list, &query->list); LIST_APPEND(&r_res->query_list, &query->list);
/* Name is a NULL terminated string in our case, since we have /* Name is a NULL terminated string in our case, since we have
* one query per response and the first one can't be compressed * one query per response and the first one can't be compressed
@ -1103,7 +1103,7 @@ static int resolv_validate_dns_response(unsigned char *resp, unsigned char *bufe
else { else {
answer_record->last_seen = now_ms; answer_record->last_seen = now_ms;
answer_record->ar_item = NULL; answer_record->ar_item = NULL;
LIST_ADDQ(&r_res->answer_list, &answer_record->list); LIST_APPEND(&r_res->answer_list, &answer_record->list);
answer_record = NULL; answer_record = NULL;
} }
} /* for i 0 to ancount */ } /* for i 0 to ancount */
@ -1496,8 +1496,8 @@ int resolv_get_ip_from_response(struct resolv_response *r_res,
list_for_each_entry(record, &r_res->answer_list, list) { list_for_each_entry(record, &r_res->answer_list, list) {
/* Move the first record to the end of the list, for internal /* Move the first record to the end of the list, for internal
* round robin */ * round robin */
LIST_DEL(&record->list); LIST_DELETE(&record->list);
LIST_ADDQ(&r_res->answer_list, &record->list); LIST_APPEND(&r_res->answer_list, &record->list);
break; break;
} }
return RSLV_UPD_SRVIP_NOT_FOUND; return RSLV_UPD_SRVIP_NOT_FOUND;
@ -1678,7 +1678,7 @@ static struct resolv_resolution *resolv_pick_resolution(struct resolvers *resolv
++resolution_uuid; ++resolution_uuid;
/* Move the resolution to the resolvers wait queue */ /* Move the resolution to the resolvers wait queue */
LIST_ADDQ(&resolvers->resolutions.wait, &res->list); LIST_APPEND(&resolvers->resolutions.wait, &res->list);
} }
return res; return res;
} }
@ -1688,7 +1688,7 @@ void resolv_purge_resolution_answer_records(struct resolv_resolution *resolution
struct resolv_answer_item *item, *itemback; struct resolv_answer_item *item, *itemback;
list_for_each_entry_safe(item, itemback, &resolution->response.answer_list, list) { list_for_each_entry_safe(item, itemback, &resolution->response.answer_list, list) {
LIST_DEL(&item->list); LIST_DELETE(&item->list);
pool_free(resolv_answer_item_pool, item->ar_item); pool_free(resolv_answer_item_pool, item->ar_item);
pool_free(resolv_answer_item_pool, item); pool_free(resolv_answer_item_pool, item);
} }
@ -1705,11 +1705,11 @@ static void resolv_free_resolution(struct resolv_resolution *resolution)
resolution->hostname_dn_len = 0; resolution->hostname_dn_len = 0;
list_for_each_entry_safe(req, reqback, &resolution->requesters, list) { list_for_each_entry_safe(req, reqback, &resolution->requesters, list) {
LIST_DEL(&req->list); LIST_DELETE(&req->list);
req->resolution = NULL; req->resolution = NULL;
} }
resolv_purge_resolution_answer_records(resolution); resolv_purge_resolution_answer_records(resolution);
LIST_DEL(&resolution->list); LIST_DELETE(&resolution->list);
pool_free(resolv_resolution_pool, resolution); pool_free(resolv_resolution_pool, resolution);
} }
@ -1814,7 +1814,7 @@ int resolv_link_resolution(void *requester, int requester_type, int requester_lo
req->resolution = res; req->resolution = res;
LIST_ADDQ(&res->requesters, &req->list); LIST_APPEND(&res->requesters, &req->list);
return 0; return 0;
err: err:
@ -1838,7 +1838,7 @@ void resolv_unlink_resolution(struct resolv_requester *requester, int safe)
res = requester->resolution; res = requester->resolution;
/* Clean up the requester */ /* Clean up the requester */
LIST_DEL(&requester->list); LIST_DELETE(&requester->list);
requester->resolution = NULL; requester->resolution = NULL;
/* We need to find another requester linked on this resolution */ /* We need to find another requester linked on this resolution */
@ -2036,8 +2036,8 @@ static int resolv_process_responses(struct dns_nameserver *ns)
list_for_each_entry(req, &res->requesters, list) list_for_each_entry(req, &res->requesters, list)
req->requester_error_cb(req, dns_resp); req->requester_error_cb(req, dns_resp);
resolv_reset_resolution(res); resolv_reset_resolution(res);
LIST_DEL(&res->list); LIST_DELETE(&res->list);
LIST_ADDQ(&resolvers->resolutions.wait, &res->list); LIST_APPEND(&resolvers->resolutions.wait, &res->list);
continue; continue;
report_res_success: report_res_success:
@ -2056,8 +2056,8 @@ static int resolv_process_responses(struct dns_nameserver *ns)
} }
resolv_reset_resolution(res); resolv_reset_resolution(res);
LIST_DEL(&res->list); LIST_DELETE(&res->list);
LIST_ADDQ(&resolvers->resolutions.wait, &res->list); LIST_APPEND(&resolvers->resolutions.wait, &res->list);
continue; continue;
} }
resolv_update_resolvers_timeout(resolvers); resolv_update_resolvers_timeout(resolvers);
@ -2106,8 +2106,8 @@ static struct task *process_resolvers(struct task *t, void *context, unsigned in
/* Clean up resolution info and remove it from the /* Clean up resolution info and remove it from the
* current list */ * current list */
resolv_reset_resolution(res); resolv_reset_resolution(res);
LIST_DEL(&res->list); LIST_DELETE(&res->list);
LIST_ADDQ(&resolvers->resolutions.wait, &res->list); LIST_APPEND(&resolvers->resolutions.wait, &res->list);
} }
else { else {
/* Otherwise resend the DNS query and requeue the resolution */ /* Otherwise resend the DNS query and requeue the resolution */
@ -2144,8 +2144,8 @@ static struct task *process_resolvers(struct task *t, void *context, unsigned in
if (resolv_run_resolution(res) != 1) { if (resolv_run_resolution(res) != 1) {
res->last_resolution = now_ms; res->last_resolution = now_ms;
LIST_DEL(&res->list); LIST_DELETE(&res->list);
LIST_ADDQ(&resolvers->resolutions.wait, &res->list); LIST_APPEND(&resolvers->resolutions.wait, &res->list);
} }
} }
@ -2185,14 +2185,14 @@ static void resolvers_deinit(void)
task_destroy(ns->stream->task_rsp); task_destroy(ns->stream->task_rsp);
free(ns->stream); free(ns->stream);
} }
LIST_DEL(&ns->list); LIST_DELETE(&ns->list);
EXTRA_COUNTERS_FREE(ns->extra_counters); EXTRA_COUNTERS_FREE(ns->extra_counters);
free(ns); free(ns);
} }
list_for_each_entry_safe(res, resback, &resolvers->resolutions.curr, list) { list_for_each_entry_safe(res, resback, &resolvers->resolutions.curr, list) {
list_for_each_entry_safe(req, reqback, &res->requesters, list) { list_for_each_entry_safe(req, reqback, &res->requesters, list) {
LIST_DEL(&req->list); LIST_DELETE(&req->list);
pool_free(resolv_requester_pool, req); pool_free(resolv_requester_pool, req);
} }
resolv_free_resolution(res); resolv_free_resolution(res);
@ -2200,7 +2200,7 @@ static void resolvers_deinit(void)
list_for_each_entry_safe(res, resback, &resolvers->resolutions.wait, list) { list_for_each_entry_safe(res, resback, &resolvers->resolutions.wait, list) {
list_for_each_entry_safe(req, reqback, &res->requesters, list) { list_for_each_entry_safe(req, reqback, &res->requesters, list) {
LIST_DEL(&req->list); LIST_DELETE(&req->list);
pool_free(resolv_requester_pool, req); pool_free(resolv_requester_pool, req);
} }
resolv_free_resolution(res); resolv_free_resolution(res);
@ -2209,14 +2209,14 @@ static void resolvers_deinit(void)
free(resolvers->id); free(resolvers->id);
free((char *)resolvers->conf.file); free((char *)resolvers->conf.file);
task_destroy(resolvers->t); task_destroy(resolvers->t);
LIST_DEL(&resolvers->list); LIST_DELETE(&resolvers->list);
free(resolvers); free(resolvers);
} }
list_for_each_entry_safe(srvrq, srvrqback, &resolv_srvrq_list, list) { list_for_each_entry_safe(srvrq, srvrqback, &resolv_srvrq_list, list) {
free(srvrq->name); free(srvrq->name);
free(srvrq->hostname_dn); free(srvrq->hostname_dn);
LIST_DEL(&srvrq->list); LIST_DELETE(&srvrq->list);
free(srvrq); free(srvrq);
} }
} }
@ -2945,7 +2945,7 @@ int cfg_parse_resolvers(const char *file, int linenum, char **args, int kwm)
curr_resolvers->px = p; curr_resolvers->px = p;
/* default values */ /* default values */
LIST_ADDQ(&sec_resolvers, &curr_resolvers->list); LIST_APPEND(&sec_resolvers, &curr_resolvers->list);
curr_resolvers->conf.file = strdup(file); curr_resolvers->conf.file = strdup(file);
curr_resolvers->conf.line = linenum; curr_resolvers->conf.line = linenum;
curr_resolvers->id = strdup(args[1]); curr_resolvers->id = strdup(args[1]);
@ -3048,7 +3048,7 @@ int cfg_parse_resolvers(const char *file, int linenum, char **args, int kwm)
newnameserver->process_responses = resolv_process_responses; newnameserver->process_responses = resolv_process_responses;
newnameserver->conf.line = linenum; newnameserver->conf.line = linenum;
/* the nameservers are linked backward first */ /* the nameservers are linked backward first */
LIST_ADDQ(&curr_resolvers->nameservers, &newnameserver->list); LIST_APPEND(&curr_resolvers->nameservers, &newnameserver->list);
} }
else if (strcmp(args[0], "parse-resolv-conf") == 0) { else if (strcmp(args[0], "parse-resolv-conf") == 0) {
struct dns_nameserver *newnameserver = NULL; struct dns_nameserver *newnameserver = NULL;
@ -3163,7 +3163,7 @@ int cfg_parse_resolvers(const char *file, int linenum, char **args, int kwm)
newnameserver->parent = curr_resolvers; newnameserver->parent = curr_resolvers;
newnameserver->process_responses = resolv_process_responses; newnameserver->process_responses = resolv_process_responses;
newnameserver->conf.line = resolv_linenum; newnameserver->conf.line = resolv_linenum;
LIST_ADDQ(&curr_resolvers->nameservers, &newnameserver->list); LIST_APPEND(&curr_resolvers->nameservers, &newnameserver->list);
} }
resolv_out: resolv_out:

View File

@ -363,7 +363,7 @@ int cli_io_handler_show_ring(struct appctx *appctx)
if (!si_oc(si)->output && !(si_oc(si)->flags & CF_SHUTW)) { if (!si_oc(si)->output && !(si_oc(si)->flags & CF_SHUTW)) {
/* let's be woken up once new data arrive */ /* let's be woken up once new data arrive */
HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock); HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock);
LIST_ADDQ(&ring->waiters, &appctx->wait_entry); LIST_APPEND(&ring->waiters, &appctx->wait_entry);
HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock); HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock);
si_rx_endp_done(si); si_rx_endp_done(si);
ret = 0; ret = 0;

View File

@ -398,7 +398,7 @@ void sample_register_fetches(struct sample_fetch_kw_list *kwl)
if (sf->use & (1 << bit)) if (sf->use & (1 << bit))
sf->val |= fetch_cap[bit]; sf->val |= fetch_cap[bit];
} }
LIST_ADDQ(&sample_fetches.list, &kwl->list); LIST_APPEND(&sample_fetches.list, &kwl->list);
} }
/* /*
@ -407,7 +407,7 @@ void sample_register_fetches(struct sample_fetch_kw_list *kwl)
*/ */
void sample_register_convs(struct sample_conv_kw_list *pckl) void sample_register_convs(struct sample_conv_kw_list *pckl)
{ {
LIST_ADDQ(&sample_convs.list, &pckl->list); LIST_APPEND(&sample_convs.list, &pckl->list);
} }
/* /*
@ -1018,7 +1018,7 @@ struct sample_expr *sample_parse_expr(char **str, int *idx, const char *file, in
if (!conv_expr) if (!conv_expr)
goto out_error; goto out_error;
LIST_ADDQ(&(expr->conv_exprs), &(conv_expr->list)); LIST_APPEND(&(expr->conv_exprs), &(conv_expr->list));
conv_expr->conv = conv; conv_expr->conv = conv;
al->kw = expr->fetch->kw; al->kw = expr->fetch->kw;
@ -1372,7 +1372,7 @@ int smp_resolve_args(struct proxy *p, char **err)
} }
LIST_DEL(&cur->list); LIST_DELETE(&cur->list);
free(cur); free(cur);
} /* end of args processing */ } /* end of args processing */
@ -1455,7 +1455,7 @@ void release_sample_expr(struct sample_expr *expr)
return; return;
list_for_each_entry_safe(conv_expr, conv_exprb, &expr->conv_exprs, list) { list_for_each_entry_safe(conv_expr, conv_exprb, &expr->conv_exprs, list) {
LIST_DEL(&conv_expr->list); LIST_DELETE(&conv_expr->list);
release_sample_arg(conv_expr->arg_p); release_sample_arg(conv_expr->arg_p);
free(conv_expr); free(conv_expr);
} }

View File

@ -233,7 +233,7 @@ static void srv_set_addr_desc(struct server *s)
*/ */
void srv_register_keywords(struct srv_kw_list *kwl) void srv_register_keywords(struct srv_kw_list *kwl)
{ {
LIST_ADDQ(&srv_keywords.list, &kwl->list); LIST_APPEND(&srv_keywords.list, &kwl->list);
} }
/* Return a pointer to the server keyword <kw>, or NULL if not found. If the /* Return a pointer to the server keyword <kw>, or NULL if not found. If the
@ -2151,7 +2151,7 @@ struct server *new_server(struct proxy *proxy)
srv->obj_type = OBJ_TYPE_SERVER; srv->obj_type = OBJ_TYPE_SERVER;
srv->proxy = proxy; srv->proxy = proxy;
srv->pendconns = EB_ROOT; srv->pendconns = EB_ROOT;
LIST_ADDQ(&servers_list, &srv->global_list); LIST_APPEND(&servers_list, &srv->global_list);
srv->next_state = SRV_ST_RUNNING; /* early server setup */ srv->next_state = SRV_ST_RUNNING; /* early server setup */
srv->last_change = now.tv_sec; srv->last_change = now.tv_sec;
@ -2204,7 +2204,7 @@ void free_server(struct server *srv)
} }
HA_SPIN_DESTROY(&srv->lock); HA_SPIN_DESTROY(&srv->lock);
LIST_DEL(&srv->global_list); LIST_DELETE(&srv->global_list);
EXTRA_COUNTERS_FREE(srv->extra_counters); EXTRA_COUNTERS_FREE(srv->extra_counters);
@ -2313,7 +2313,7 @@ static int _srv_parse_tmpl_init(struct server *srv, struct proxy *px)
#endif #endif
free_check(&newsrv->agent); free_check(&newsrv->agent);
free_check(&newsrv->check); free_check(&newsrv->check);
LIST_DEL(&newsrv->global_list); LIST_DELETE(&newsrv->global_list);
} }
free(newsrv); free(newsrv);
return i - srv->tmpl_info.nb_low; return i - srv->tmpl_info.nb_low;
@ -5045,7 +5045,7 @@ static int srv_migrate_conns_to_remove(struct eb_root *idle_tree, struct mt_list
hash_node = ebmb_entry(node, struct conn_hash_node, node); hash_node = ebmb_entry(node, struct conn_hash_node, node);
eb_delete(node); eb_delete(node);
MT_LIST_ADDQ(toremove_list, &hash_node->conn->toremove_list); MT_LIST_APPEND(toremove_list, &hash_node->conn->toremove_list);
i++; i++;
node = next; node = next;

View File

@ -371,7 +371,7 @@ int shctx_init(struct shared_context **orig_shctx, int maxblocks, int blocksize,
cur_block->len = 0; cur_block->len = 0;
cur_block->refcount = 0; cur_block->refcount = 0;
cur_block->block_count = 1; cur_block->block_count = 1;
LIST_ADDQ(&shctx->avail, &cur_block->list); LIST_APPEND(&shctx->avail, &cur_block->list);
shctx->nbav++; shctx->nbav++;
cur += sizeof(struct shared_block) + blocksize; cur += sizeof(struct shared_block) + blocksize;
} }

View File

@ -154,7 +154,7 @@ void deinit_signals()
if (sig != SIGPROF) if (sig != SIGPROF)
signal(sig, SIG_DFL); signal(sig, SIG_DFL);
list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) { list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
LIST_DEL(&sh->list); LIST_DELETE(&sh->list);
pool_free(pool_head_sig_handlers, sh); pool_free(pool_head_sig_handlers, sh);
} }
} }
@ -188,7 +188,7 @@ struct sig_handler *signal_register_fct(int sig, void (*fct)(struct sig_handler
sh->handler = fct; sh->handler = fct;
sh->arg = arg; sh->arg = arg;
sh->flags = SIG_F_TYPE_FCT; sh->flags = SIG_F_TYPE_FCT;
LIST_ADDQ(&signal_state[sig].handlers, &sh->list); LIST_APPEND(&signal_state[sig].handlers, &sh->list);
return sh; return sh;
} }
@ -220,7 +220,7 @@ struct sig_handler *signal_register_task(int sig, struct task *task, int reason)
sh->handler = task; sh->handler = task;
sh->arg = reason & ~TASK_WOKEN_ANY; sh->arg = reason & ~TASK_WOKEN_ANY;
sh->flags = SIG_F_TYPE_TASK; sh->flags = SIG_F_TYPE_TASK;
LIST_ADDQ(&signal_state[sig].handlers, &sh->list); LIST_APPEND(&signal_state[sig].handlers, &sh->list);
return sh; return sh;
} }
@ -229,7 +229,7 @@ struct sig_handler *signal_register_task(int sig, struct task *task, int reason)
*/ */
void signal_unregister_handler(struct sig_handler *handler) void signal_unregister_handler(struct sig_handler *handler)
{ {
LIST_DEL(&handler->list); LIST_DELETE(&handler->list);
pool_free(pool_head_sig_handlers, handler); pool_free(pool_head_sig_handlers, handler);
} }
@ -251,7 +251,7 @@ void signal_unregister_target(int sig, void *target)
list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) { list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
if (sh->handler == target) { if (sh->handler == target) {
LIST_DEL(&sh->list); LIST_DELETE(&sh->list);
pool_free(pool_head_sig_handlers, sh); pool_free(pool_head_sig_handlers, sh);
break; break;
} }
@ -271,7 +271,7 @@ void signal_unregister(int sig)
return; return;
list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) { list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
LIST_DEL(&sh->list); LIST_DELETE(&sh->list);
pool_free(pool_head_sig_handlers, sh); pool_free(pool_head_sig_handlers, sh);
} }

View File

@ -77,7 +77,7 @@ static struct sink *__sink_new(const char *name, const char *desc, int fmt)
sink->ctx.fd = -1; sink->ctx.fd = -1;
sink->ctx.dropped = 0; sink->ctx.dropped = 0;
HA_RWLOCK_INIT(&sink->ctx.lock); HA_RWLOCK_INIT(&sink->ctx.lock);
LIST_ADDQ(&sink_list, &sink->sink_list); LIST_APPEND(&sink_list, &sink->sink_list);
end: end:
return sink; return sink;
@ -139,7 +139,7 @@ struct sink *sink_new_buf(const char *name, const char *desc, enum log_fmt fmt,
sink->ctx.ring = ring_new(size); sink->ctx.ring = ring_new(size);
if (!sink->ctx.ring) { if (!sink->ctx.ring) {
LIST_DEL(&sink->sink_list); LIST_DELETE(&sink->sink_list);
free(sink->name); free(sink->name);
free(sink->desc); free(sink->desc);
free(sink); free(sink);
@ -410,7 +410,7 @@ static void sink_forward_io_handler(struct appctx *appctx)
if (ret) { if (ret) {
/* let's be woken up once new data arrive */ /* let's be woken up once new data arrive */
HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock); HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock);
LIST_ADDQ(&ring->waiters, &appctx->wait_entry); LIST_APPEND(&ring->waiters, &appctx->wait_entry);
HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock); HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock);
si_rx_endp_done(si); si_rx_endp_done(si);
} }
@ -554,7 +554,7 @@ static void sink_forward_oc_io_handler(struct appctx *appctx)
if (ret) { if (ret) {
/* let's be woken up once new data arrive */ /* let's be woken up once new data arrive */
HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock); HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock);
LIST_ADDQ(&ring->waiters, &appctx->wait_entry); LIST_APPEND(&ring->waiters, &appctx->wait_entry);
HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock); HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock);
si_rx_endp_done(si); si_rx_endp_done(si);
} }
@ -680,7 +680,7 @@ static struct appctx *sink_forward_session_create(struct sink *sink, struct sink
/* Error unrolling */ /* Error unrolling */
out_free_strm: out_free_strm:
LIST_DEL(&s->list); LIST_DELETE(&s->list);
pool_free(pool_head_stream, s); pool_free(pool_head_stream, s);
out_free_sess: out_free_sess:
session_free(sess); session_free(sess);
@ -1061,7 +1061,7 @@ error:
if (sink->ctx.ring) if (sink->ctx.ring)
ring_free(sink->ctx.ring); ring_free(sink->ctx.ring);
LIST_DEL(&sink->sink_list); LIST_DELETE(&sink->sink_list);
free(sink->name); free(sink->name);
free(sink->desc); free(sink->desc);
free(sink); free(sink);
@ -1256,7 +1256,7 @@ static void sink_deinit()
list_for_each_entry_safe(sink, sb, &sink_list, sink_list) { list_for_each_entry_safe(sink, sb, &sink_list, sink_list) {
if (sink->type == SINK_TYPE_BUFFER) if (sink->type == SINK_TYPE_BUFFER)
ring_free(sink->ctx.ring); ring_free(sink->ctx.ring);
LIST_DEL(&sink->sink_list); LIST_DELETE(&sink->sink_list);
free(sink->name); free(sink->name);
free(sink->desc); free(sink->desc);
free(sink); free(sink);

View File

@ -894,14 +894,14 @@ void ckch_inst_free(struct ckch_inst *inst)
list_for_each_entry_safe(sni, sni_s, &inst->sni_ctx, by_ckch_inst) { list_for_each_entry_safe(sni, sni_s, &inst->sni_ctx, by_ckch_inst) {
SSL_CTX_free(sni->ctx); SSL_CTX_free(sni->ctx);
LIST_DEL(&sni->by_ckch_inst); LIST_DELETE(&sni->by_ckch_inst);
ebmb_delete(&sni->name); ebmb_delete(&sni->name);
free(sni); free(sni);
} }
SSL_CTX_free(inst->ctx); SSL_CTX_free(inst->ctx);
inst->ctx = NULL; inst->ctx = NULL;
LIST_DEL(&inst->by_ckchs); LIST_DELETE(&inst->by_ckchs);
LIST_DEL(&inst->by_crtlist_entry); LIST_DELETE(&inst->by_crtlist_entry);
free(inst); free(inst);
} }
@ -1359,7 +1359,7 @@ static int cli_io_handler_commit_cert(struct appctx *appctx)
/* display one dot per new instance */ /* display one dot per new instance */
chunk_appendf(trash, "."); chunk_appendf(trash, ".");
/* link the new ckch_inst to the duplicate */ /* link the new ckch_inst to the duplicate */
LIST_ADDQ(&new_ckchs->ckch_inst, &new_inst->by_ckchs); LIST_APPEND(&new_ckchs->ckch_inst, &new_inst->by_ckchs);
y++; y++;
} }
appctx->st2 = SETCERT_ST_INSERT; appctx->st2 = SETCERT_ST_INSERT;
@ -1385,7 +1385,7 @@ static int cli_io_handler_commit_cert(struct appctx *appctx)
/* insert the new ckch_insts in the crtlist_entry */ /* insert the new ckch_insts in the crtlist_entry */
list_for_each_entry(ckchi, &new_ckchs->ckch_inst, by_ckchs) { list_for_each_entry(ckchi, &new_ckchs->ckch_inst, by_ckchs) {
if (ckchi->crtlist_entry) if (ckchi->crtlist_entry)
LIST_ADD(&ckchi->crtlist_entry->ckch_inst, &ckchi->by_crtlist_entry); LIST_INSERT(&ckchi->crtlist_entry->ckch_inst, &ckchi->by_crtlist_entry);
} }
/* First, we insert every new SNIs in the trees, also replace the default_ctx */ /* First, we insert every new SNIs in the trees, also replace the default_ctx */

View File

@ -177,8 +177,8 @@ void crtlist_entry_free(struct crtlist_entry *entry)
return; return;
ebpt_delete(&entry->node); ebpt_delete(&entry->node);
LIST_DEL(&entry->by_crtlist); LIST_DELETE(&entry->by_crtlist);
LIST_DEL(&entry->by_ckch_store); LIST_DELETE(&entry->by_ckch_store);
crtlist_free_filters(entry->filters); crtlist_free_filters(entry->filters);
ssl_sock_free_ssl_conf(entry->ssl_conf); ssl_sock_free_ssl_conf(entry->ssl_conf);
free(entry->ssl_conf); free(entry->ssl_conf);
@ -240,7 +240,7 @@ struct crtlist_entry *crtlist_entry_new()
LIST_INIT(&entry->ckch_inst); LIST_INIT(&entry->ckch_inst);
/* initialize the nodes so we can LIST_DEL in any cases */ /* initialize the nodes so we can LIST_DELETE in any cases */
LIST_INIT(&entry->by_crtlist); LIST_INIT(&entry->by_crtlist);
LIST_INIT(&entry->by_ckch_store); LIST_INIT(&entry->by_ckch_store);
@ -540,8 +540,8 @@ int crtlist_parse_file(char *file, struct bind_conf *bind_conf, struct proxy *cu
entry->node.key = ckchs; entry->node.key = ckchs;
entry->crtlist = newlist; entry->crtlist = newlist;
ebpt_insert(&newlist->entries, &entry->node); ebpt_insert(&newlist->entries, &entry->node);
LIST_ADDQ(&newlist->ord_entries, &entry->by_crtlist); LIST_APPEND(&newlist->ord_entries, &entry->by_crtlist);
LIST_ADDQ(&ckchs->crtlist_entry, &entry->by_ckch_store); LIST_APPEND(&ckchs->crtlist_entry, &entry->by_ckch_store);
} else if (global_ssl.extra_files & SSL_GF_BUNDLE) { } else if (global_ssl.extra_files & SSL_GF_BUNDLE) {
/* If we didn't find the file, this could be a /* If we didn't find the file, this could be a
@ -588,8 +588,8 @@ int crtlist_parse_file(char *file, struct bind_conf *bind_conf, struct proxy *cu
entry_dup->node.key = ckchs; entry_dup->node.key = ckchs;
entry_dup->crtlist = newlist; entry_dup->crtlist = newlist;
ebpt_insert(&newlist->entries, &entry_dup->node); ebpt_insert(&newlist->entries, &entry_dup->node);
LIST_ADDQ(&newlist->ord_entries, &entry_dup->by_crtlist); LIST_APPEND(&newlist->ord_entries, &entry_dup->by_crtlist);
LIST_ADDQ(&ckchs->crtlist_entry, &entry_dup->by_ckch_store); LIST_APPEND(&ckchs->crtlist_entry, &entry_dup->by_ckch_store);
entry_dup = NULL; /* the entry was used, we need a new one next round */ entry_dup = NULL; /* the entry was used, we need a new one next round */
} }
@ -611,8 +611,8 @@ int crtlist_parse_file(char *file, struct bind_conf *bind_conf, struct proxy *cu
entry->node.key = ckchs; entry->node.key = ckchs;
entry->crtlist = newlist; entry->crtlist = newlist;
ebpt_insert(&newlist->entries, &entry->node); ebpt_insert(&newlist->entries, &entry->node);
LIST_ADDQ(&newlist->ord_entries, &entry->by_crtlist); LIST_APPEND(&newlist->ord_entries, &entry->by_crtlist);
LIST_ADDQ(&ckchs->crtlist_entry, &entry->by_ckch_store); LIST_APPEND(&ckchs->crtlist_entry, &entry->by_ckch_store);
found++; found++;
} }
entry = NULL; entry = NULL;
@ -706,8 +706,8 @@ int crtlist_load_cert_dir(char *path, struct bind_conf *bind_conf, struct crtlis
} }
entry->node.key = ckchs; entry->node.key = ckchs;
entry->crtlist = dir; entry->crtlist = dir;
LIST_ADDQ(&ckchs->crtlist_entry, &entry->by_ckch_store); LIST_APPEND(&ckchs->crtlist_entry, &entry->by_ckch_store);
LIST_ADDQ(&dir->ord_entries, &entry->by_crtlist); LIST_APPEND(&dir->ord_entries, &entry->by_crtlist);
ebpt_insert(&dir->entries, &entry->node); ebpt_insert(&dir->entries, &entry->node);
ignore_entry: ignore_entry:
@ -1016,8 +1016,8 @@ static void cli_release_add_crtlist(struct appctx *appctx)
struct ckch_inst *inst, *inst_s; struct ckch_inst *inst, *inst_s;
/* upon error free the ckch_inst and everything inside */ /* upon error free the ckch_inst and everything inside */
ebpt_delete(&entry->node); ebpt_delete(&entry->node);
LIST_DEL(&entry->by_crtlist); LIST_DELETE(&entry->by_crtlist);
LIST_DEL(&entry->by_ckch_store); LIST_DELETE(&entry->by_ckch_store);
list_for_each_entry_safe(inst, inst_s, &entry->ckch_inst, by_ckchs) { list_for_each_entry_safe(inst, inst_s, &entry->ckch_inst, by_ckchs) {
ckch_inst_free(inst); ckch_inst_free(inst);
@ -1102,8 +1102,8 @@ static int cli_io_handler_add_crtlist(struct appctx *appctx)
/* display one dot for each new instance */ /* display one dot for each new instance */
chunk_appendf(trash, "."); chunk_appendf(trash, ".");
i++; i++;
LIST_ADDQ(&store->ckch_inst, &new_inst->by_ckchs); LIST_APPEND(&store->ckch_inst, &new_inst->by_ckchs);
LIST_ADDQ(&entry->ckch_inst, &new_inst->by_crtlist_entry); LIST_APPEND(&entry->ckch_inst, &new_inst->by_crtlist_entry);
new_inst->crtlist_entry = entry; new_inst->crtlist_entry = entry;
} }
appctx->st2 = SETCERT_ST_INSERT; appctx->st2 = SETCERT_ST_INSERT;
@ -1272,9 +1272,9 @@ static int cli_parse_add_crtlist(char **args, char *payload, struct appctx *appc
goto error; goto error;
} }
LIST_ADDQ(&crtlist->ord_entries, &entry->by_crtlist); LIST_APPEND(&crtlist->ord_entries, &entry->by_crtlist);
entry->crtlist = crtlist; entry->crtlist = crtlist;
LIST_ADDQ(&store->crtlist_entry, &entry->by_ckch_store); LIST_APPEND(&store->crtlist_entry, &entry->by_ckch_store);
appctx->st2 = SETCERT_ST_INIT; appctx->st2 = SETCERT_ST_INIT;
appctx->ctx.cli.p0 = crtlist; appctx->ctx.cli.p0 = crtlist;
@ -1402,8 +1402,8 @@ static int cli_parse_del_crtlist(char **args, char *payload, struct appctx *appc
/* upon error free the ckch_inst and everything inside */ /* upon error free the ckch_inst and everything inside */
ebpt_delete(&entry->node); ebpt_delete(&entry->node);
LIST_DEL(&entry->by_crtlist); LIST_DELETE(&entry->by_crtlist);
LIST_DEL(&entry->by_ckch_store); LIST_DELETE(&entry->by_ckch_store);
list_for_each_entry_safe(inst, inst_s, &entry->ckch_inst, by_crtlist_entry) { list_for_each_entry_safe(inst, inst_s, &entry->ckch_inst, by_crtlist_entry) {
struct sni_ctx *sni, *sni_s; struct sni_ctx *sni, *sni_s;
@ -1411,12 +1411,12 @@ static int cli_parse_del_crtlist(char **args, char *payload, struct appctx *appc
HA_RWLOCK_WRLOCK(SNI_LOCK, &inst->bind_conf->sni_lock); HA_RWLOCK_WRLOCK(SNI_LOCK, &inst->bind_conf->sni_lock);
list_for_each_entry_safe(sni, sni_s, &inst->sni_ctx, by_ckch_inst) { list_for_each_entry_safe(sni, sni_s, &inst->sni_ctx, by_ckch_inst) {
ebmb_delete(&sni->name); ebmb_delete(&sni->name);
LIST_DEL(&sni->by_ckch_inst); LIST_DELETE(&sni->by_ckch_inst);
SSL_CTX_free(sni->ctx); SSL_CTX_free(sni->ctx);
free(sni); free(sni);
} }
HA_RWLOCK_WRUNLOCK(SNI_LOCK, &inst->bind_conf->sni_lock); HA_RWLOCK_WRUNLOCK(SNI_LOCK, &inst->bind_conf->sni_lock);
LIST_DEL(&inst->by_ckchs); LIST_DELETE(&inst->by_ckchs);
free(inst); free(inst);
} }

View File

@ -590,7 +590,7 @@ int ssl_sock_register_msg_callback(ssl_sock_msg_callback_func func)
cbk->func = func; cbk->func = func;
LIST_ADDQ(&ssl_sock_msg_callbacks, &cbk->list); LIST_APPEND(&ssl_sock_msg_callbacks, &cbk->list);
return 1; return 1;
} }
@ -625,7 +625,7 @@ static void ssl_sock_unregister_msg_callbacks(void)
struct ssl_sock_msg_callback *cbk, *cbkback; struct ssl_sock_msg_callback *cbk, *cbkback;
list_for_each_entry_safe(cbk, cbkback, &ssl_sock_msg_callbacks, list) { list_for_each_entry_safe(cbk, cbkback, &ssl_sock_msg_callbacks, list) {
LIST_DEL(&cbk->list); LIST_DELETE(&cbk->list);
free(cbk); free(cbk);
} }
} }
@ -686,7 +686,7 @@ int ssl_init_single_engine(const char *engine_id, const char *def_algorithms)
el = calloc(1, sizeof(*el)); el = calloc(1, sizeof(*el));
el->e = engine; el->e = engine;
LIST_ADD(&openssl_engines, &el->list); LIST_INSERT(&openssl_engines, &el->list);
nb_engines++; nb_engines++;
if (global_ssl.async) if (global_ssl.async)
global.ssl_used_async_engines = nb_engines; global.ssl_used_async_engines = nb_engines;
@ -1233,20 +1233,20 @@ static int tlskeys_finalize_config(void)
/* This sort the reference list by id. */ /* This sort the reference list by id. */
list_for_each_entry_safe(ref, ref2, &tlskeys_reference, list) { list_for_each_entry_safe(ref, ref2, &tlskeys_reference, list) {
LIST_DEL(&ref->list); LIST_DELETE(&ref->list);
list_for_each_entry(ref3, &tkr, list) { list_for_each_entry(ref3, &tkr, list) {
if (ref->unique_id < ref3->unique_id) { if (ref->unique_id < ref3->unique_id) {
LIST_ADDQ(&ref3->list, &ref->list); LIST_APPEND(&ref3->list, &ref->list);
break; break;
} }
} }
if (&ref3->list == &tkr) if (&ref3->list == &tkr)
LIST_ADDQ(&tkr, &ref->list); LIST_APPEND(&tkr, &ref->list);
} }
/* swap root */ /* swap root */
LIST_ADD(&tkr, &tlskeys_reference); LIST_INSERT(&tkr, &tlskeys_reference);
LIST_DEL(&tkr); LIST_DELETE(&tkr);
return ERR_NONE; return ERR_NONE;
} }
#endif /* SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB */ #endif /* SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB */
@ -2926,7 +2926,7 @@ static int ckch_inst_add_cert_sni(SSL_CTX *ctx, struct ckch_inst *ckch_inst,
sc->wild = wild; sc->wild = wild;
sc->name.node.leaf_p = NULL; sc->name.node.leaf_p = NULL;
sc->ckch_inst = ckch_inst; sc->ckch_inst = ckch_inst;
LIST_ADDQ(&ckch_inst->sni_ctx, &sc->by_ckch_inst); LIST_APPEND(&ckch_inst->sni_ctx, &sc->by_ckch_inst);
} }
return order; return order;
} }
@ -2960,7 +2960,7 @@ void ssl_sock_load_cert_sni(struct ckch_inst *ckch_inst, struct bind_conf *bind_
if (sc1->ctx == sc0->ctx && sc1->conf == sc0->conf if (sc1->ctx == sc0->ctx && sc1->conf == sc0->conf
&& sc1->neg == sc0->neg && sc1->wild == sc0->wild) { && sc1->neg == sc0->neg && sc1->wild == sc0->wild) {
/* it's a duplicate, we should remove and free it */ /* it's a duplicate, we should remove and free it */
LIST_DEL(&sc0->by_ckch_inst); LIST_DELETE(&sc0->by_ckch_inst);
SSL_CTX_free(sc0->ctx); SSL_CTX_free(sc0->ctx);
ha_free(&sc0); ha_free(&sc0);
break; break;
@ -3526,7 +3526,7 @@ static int ssl_sock_load_ckchs(const char *path, struct ckch_store *ckchs,
ssl_sock_load_cert_sni(*ckch_inst, bind_conf); ssl_sock_load_cert_sni(*ckch_inst, bind_conf);
/* succeed, add the instance to the ckch_store's list of instance */ /* succeed, add the instance to the ckch_store's list of instance */
LIST_ADDQ(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs)); LIST_APPEND(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs));
return errcode; return errcode;
} }
@ -3550,7 +3550,7 @@ static int ssl_sock_load_srv_ckchs(const char *path, struct ckch_store *ckchs,
SSL_CTX_up_ref((*ckch_inst)->ctx); SSL_CTX_up_ref((*ckch_inst)->ctx);
server->ssl_ctx.ctx = (*ckch_inst)->ctx; server->ssl_ctx.ctx = (*ckch_inst)->ctx;
/* succeed, add the instance to the ckch_store's list of instance */ /* succeed, add the instance to the ckch_store's list of instance */
LIST_ADDQ(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs)); LIST_APPEND(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs));
return errcode; return errcode;
} }
@ -3634,7 +3634,7 @@ int ssl_sock_load_cert_list_file(char *file, int dir, struct bind_conf *bind_con
memprintf(err, "error processing line %d in file '%s' : %s", entry->linenum, file, *err); memprintf(err, "error processing line %d in file '%s' : %s", entry->linenum, file, *err);
goto error; goto error;
} }
LIST_ADDQ(&entry->ckch_inst, &ckch_inst->by_crtlist_entry); LIST_APPEND(&entry->ckch_inst, &ckch_inst->by_crtlist_entry);
ckch_inst->crtlist_entry = entry; ckch_inst->crtlist_entry = entry;
} }
@ -5037,7 +5037,7 @@ void ssl_sock_free_all_ctx(struct bind_conf *bind_conf)
back = ebmb_next(node); back = ebmb_next(node);
ebmb_delete(node); ebmb_delete(node);
SSL_CTX_free(sni->ctx); SSL_CTX_free(sni->ctx);
LIST_DEL(&sni->by_ckch_inst); LIST_DELETE(&sni->by_ckch_inst);
free(sni); free(sni);
node = back; node = back;
} }
@ -5048,7 +5048,7 @@ void ssl_sock_free_all_ctx(struct bind_conf *bind_conf)
back = ebmb_next(node); back = ebmb_next(node);
ebmb_delete(node); ebmb_delete(node);
SSL_CTX_free(sni->ctx); SSL_CTX_free(sni->ctx);
LIST_DEL(&sni->by_ckch_inst); LIST_DELETE(&sni->by_ckch_inst);
free(sni); free(sni);
node = back; node = back;
} }
@ -5079,7 +5079,7 @@ void ssl_sock_destroy_bind_conf(struct bind_conf *bind_conf)
if (bind_conf->keys_ref && !--bind_conf->keys_ref->refcount) { if (bind_conf->keys_ref && !--bind_conf->keys_ref->refcount) {
free(bind_conf->keys_ref->filename); free(bind_conf->keys_ref->filename);
free(bind_conf->keys_ref->tlskeys); free(bind_conf->keys_ref->tlskeys);
LIST_DEL(&bind_conf->keys_ref->list); LIST_DELETE(&bind_conf->keys_ref->list);
free(bind_conf->keys_ref); free(bind_conf->keys_ref);
} }
bind_conf->keys_ref = NULL; bind_conf->keys_ref = NULL;
@ -7217,7 +7217,7 @@ void ssl_free_engines(void) {
list_for_each_entry_safe(wl, wlb, &openssl_engines, list) { list_for_each_entry_safe(wl, wlb, &openssl_engines, list) {
ENGINE_finish(wl->e); ENGINE_finish(wl->e);
ENGINE_free(wl->e); ENGINE_free(wl->e);
LIST_DEL(&wl->list); LIST_DELETE(&wl->list);
free(wl); free(wl);
} }
} }

View File

@ -4935,7 +4935,7 @@ void stats_register_module(struct stats_module *m)
{ {
const uint8_t domain = stats_get_domain(m->domain_flags); const uint8_t domain = stats_get_domain(m->domain_flags);
LIST_ADDQ(&stats_module_list[domain], &m->list); LIST_APPEND(&stats_module_list[domain], &m->list);
stat_count[domain] += m->stats_count; stat_count[domain] += m->stats_count;
} }

View File

@ -548,7 +548,7 @@ struct stream *stream_new(struct session *sess, enum obj_type *origin, struct bu
s->tunnel_timeout = TICK_ETERNITY; s->tunnel_timeout = TICK_ETERNITY;
LIST_ADDQ(&ti->streams, &s->list); LIST_APPEND(&ti->streams, &s->list);
if (flt_stream_init(s) < 0 || flt_stream_start(s) < 0) if (flt_stream_init(s) < 0 || flt_stream_start(s) < 0)
goto out_fail_accept; goto out_fail_accept;
@ -586,7 +586,7 @@ struct stream *stream_new(struct session *sess, enum obj_type *origin, struct bu
flt_stream_release(s, 0); flt_stream_release(s, 0);
task_destroy(t); task_destroy(t);
tasklet_free(s->si[1].wait_event.tasklet); tasklet_free(s->si[1].wait_event.tasklet);
LIST_DEL(&s->list); LIST_DELETE(&s->list);
out_fail_alloc_si1: out_fail_alloc_si1:
tasklet_free(s->si[0].wait_event.tasklet); tasklet_free(s->si[0].wait_event.tasklet);
out_fail_alloc: out_fail_alloc:
@ -641,7 +641,7 @@ static void stream_free(struct stream *s)
put_pipe(s->res.pipe); put_pipe(s->res.pipe);
/* We may still be present in the buffer wait queue */ /* We may still be present in the buffer wait queue */
if (LIST_ADDED(&s->buffer_wait.list)) if (LIST_INLIST(&s->buffer_wait.list))
LIST_DEL_INIT(&s->buffer_wait.list); LIST_DEL_INIT(&s->buffer_wait.list);
if (s->req.buf.size || s->res.buf.size) { if (s->req.buf.size || s->res.buf.size) {
@ -721,11 +721,11 @@ static void stream_free(struct stream *s)
*/ */
LIST_DEL_INIT(&bref->users); LIST_DEL_INIT(&bref->users);
if (s->list.n != &ti->streams) if (s->list.n != &ti->streams)
LIST_ADDQ(&LIST_ELEM(s->list.n, struct stream *, list)->back_refs, &bref->users); LIST_APPEND(&LIST_ELEM(s->list.n, struct stream *, list)->back_refs, &bref->users);
bref->ref = s->list.n; bref->ref = s->list.n;
__ha_barrier_store(); __ha_barrier_store();
} }
LIST_DEL(&s->list); LIST_DELETE(&s->list);
/* applets do not release session yet */ /* applets do not release session yet */
must_free_sess = objt_appctx(sess->origin) && sess->origin == s->si[0].end; must_free_sess = objt_appctx(sess->origin) && sess->origin == s->si[0].end;
@ -772,13 +772,13 @@ static void stream_free(struct stream *s)
*/ */
static int stream_alloc_work_buffer(struct stream *s) static int stream_alloc_work_buffer(struct stream *s)
{ {
if (LIST_ADDED(&s->buffer_wait.list)) if (LIST_INLIST(&s->buffer_wait.list))
LIST_DEL_INIT(&s->buffer_wait.list); LIST_DEL_INIT(&s->buffer_wait.list);
if (b_alloc(&s->res.buf)) if (b_alloc(&s->res.buf))
return 1; return 1;
LIST_ADDQ(&ti->buffer_wq, &s->buffer_wait.list); LIST_APPEND(&ti->buffer_wq, &s->buffer_wait.list);
return 0; return 0;
} }
@ -2988,7 +2988,7 @@ static enum act_parse_ret stream_parse_use_service(const char **args, int *cur_a
void service_keywords_register(struct action_kw_list *kw_list) void service_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&service_keywords, &kw_list->list); LIST_APPEND(&service_keywords, &kw_list->list);
} }
struct action_kw *service_find(const char *kw) struct action_kw *service_find(const char *kw)
@ -3074,7 +3074,7 @@ static int stats_dump_full_strm_to_buffer(struct stream_interface *si, struct st
chunk_appendf(&trash, chunk_appendf(&trash,
" flags=0x%x, conn_retries=%d, srv_conn=%p, pend_pos=%p waiting=%d epoch=%#x\n", " flags=0x%x, conn_retries=%d, srv_conn=%p, pend_pos=%p waiting=%d epoch=%#x\n",
strm->flags, strm->si[1].conn_retries, strm->srv_conn, strm->pend_pos, strm->flags, strm->si[1].conn_retries, strm->srv_conn, strm->pend_pos,
LIST_ADDED(&strm->buffer_wait.list), strm->stream_epoch); LIST_INLIST(&strm->buffer_wait.list), strm->stream_epoch);
chunk_appendf(&trash, chunk_appendf(&trash,
" frontend=%s (id=%u mode=%s), listener=%s (id=%u)", " frontend=%s (id=%u mode=%s), listener=%s (id=%u)",
@ -3398,7 +3398,7 @@ static int cli_io_handler_dump_sess(struct appctx *appctx)
*/ */
if (appctx->st2 == STAT_ST_LIST) { if (appctx->st2 == STAT_ST_LIST) {
if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) { if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) {
LIST_DEL(&appctx->ctx.sess.bref.users); LIST_DELETE(&appctx->ctx.sess.bref.users);
LIST_INIT(&appctx->ctx.sess.bref.users); LIST_INIT(&appctx->ctx.sess.bref.users);
} }
} }
@ -3424,7 +3424,7 @@ static int cli_io_handler_dump_sess(struct appctx *appctx)
case STAT_ST_LIST: case STAT_ST_LIST:
/* first, let's detach the back-ref from a possible previous stream */ /* first, let's detach the back-ref from a possible previous stream */
if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) { if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) {
LIST_DEL(&appctx->ctx.sess.bref.users); LIST_DELETE(&appctx->ctx.sess.bref.users);
LIST_INIT(&appctx->ctx.sess.bref.users); LIST_INIT(&appctx->ctx.sess.bref.users);
} }
@ -3455,13 +3455,13 @@ static int cli_io_handler_dump_sess(struct appctx *appctx)
if (appctx->ctx.sess.target != (void *)-1 && appctx->ctx.sess.target != curr_strm) if (appctx->ctx.sess.target != (void *)-1 && appctx->ctx.sess.target != curr_strm)
goto next_sess; goto next_sess;
LIST_ADDQ(&curr_strm->back_refs, &appctx->ctx.sess.bref.users); LIST_APPEND(&curr_strm->back_refs, &appctx->ctx.sess.bref.users);
/* call the proper dump() function and return if we're missing space */ /* call the proper dump() function and return if we're missing space */
if (!stats_dump_full_strm_to_buffer(si, curr_strm)) if (!stats_dump_full_strm_to_buffer(si, curr_strm))
goto full; goto full;
/* stream dump complete */ /* stream dump complete */
LIST_DEL(&appctx->ctx.sess.bref.users); LIST_DELETE(&appctx->ctx.sess.bref.users);
LIST_INIT(&appctx->ctx.sess.bref.users); LIST_INIT(&appctx->ctx.sess.bref.users);
if (appctx->ctx.sess.target != (void *)-1) { if (appctx->ctx.sess.target != (void *)-1) {
appctx->ctx.sess.target = NULL; appctx->ctx.sess.target = NULL;
@ -3583,7 +3583,7 @@ static int cli_io_handler_dump_sess(struct appctx *appctx)
/* let's try again later from this stream. We add ourselves into /* let's try again later from this stream. We add ourselves into
* this stream's users so that it can remove us upon termination. * this stream's users so that it can remove us upon termination.
*/ */
LIST_ADDQ(&curr_strm->back_refs, &appctx->ctx.sess.bref.users); LIST_APPEND(&curr_strm->back_refs, &appctx->ctx.sess.bref.users);
goto full; goto full;
} }
@ -3630,7 +3630,7 @@ static void cli_release_show_sess(struct appctx *appctx)
*/ */
thread_isolate(); thread_isolate();
if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users))
LIST_DEL(&appctx->ctx.sess.bref.users); LIST_DELETE(&appctx->ctx.sess.bref.users);
thread_release(); thread_release();
} }
} }

View File

@ -92,7 +92,7 @@ void task_kill(struct task *t)
thr = my_ffsl(t->thread_mask) - 1; thr = my_ffsl(t->thread_mask) - 1;
/* Beware: tasks that have never run don't have their ->list empty yet! */ /* Beware: tasks that have never run don't have their ->list empty yet! */
MT_LIST_ADDQ(&task_per_thread[thr].shared_tasklet_list, MT_LIST_APPEND(&task_per_thread[thr].shared_tasklet_list,
(struct mt_list *)&((struct tasklet *)t)->list); (struct mt_list *)&((struct tasklet *)t)->list);
_HA_ATOMIC_INC(&task_per_thread[thr].rq_total); _HA_ATOMIC_INC(&task_per_thread[thr].rq_total);
_HA_ATOMIC_INC(&task_per_thread[thr].tasks_in_list); _HA_ATOMIC_INC(&task_per_thread[thr].tasks_in_list);
@ -115,30 +115,30 @@ void __tasklet_wakeup_on(struct tasklet *tl, int thr)
if (likely(thr < 0)) { if (likely(thr < 0)) {
/* this tasklet runs on the caller thread */ /* this tasklet runs on the caller thread */
if (tl->state & TASK_HEAVY) { if (tl->state & TASK_HEAVY) {
LIST_ADDQ(&sched->tasklets[TL_HEAVY], &tl->list); LIST_APPEND(&sched->tasklets[TL_HEAVY], &tl->list);
sched->tl_class_mask |= 1 << TL_HEAVY; sched->tl_class_mask |= 1 << TL_HEAVY;
} }
else if (tl->state & TASK_SELF_WAKING) { else if (tl->state & TASK_SELF_WAKING) {
LIST_ADDQ(&sched->tasklets[TL_BULK], &tl->list); LIST_APPEND(&sched->tasklets[TL_BULK], &tl->list);
sched->tl_class_mask |= 1 << TL_BULK; sched->tl_class_mask |= 1 << TL_BULK;
} }
else if ((struct task *)tl == sched->current) { else if ((struct task *)tl == sched->current) {
_HA_ATOMIC_OR(&tl->state, TASK_SELF_WAKING); _HA_ATOMIC_OR(&tl->state, TASK_SELF_WAKING);
LIST_ADDQ(&sched->tasklets[TL_BULK], &tl->list); LIST_APPEND(&sched->tasklets[TL_BULK], &tl->list);
sched->tl_class_mask |= 1 << TL_BULK; sched->tl_class_mask |= 1 << TL_BULK;
} }
else if (sched->current_queue < 0) { else if (sched->current_queue < 0) {
LIST_ADDQ(&sched->tasklets[TL_URGENT], &tl->list); LIST_APPEND(&sched->tasklets[TL_URGENT], &tl->list);
sched->tl_class_mask |= 1 << TL_URGENT; sched->tl_class_mask |= 1 << TL_URGENT;
} }
else { else {
LIST_ADDQ(&sched->tasklets[sched->current_queue], &tl->list); LIST_APPEND(&sched->tasklets[sched->current_queue], &tl->list);
sched->tl_class_mask |= 1 << sched->current_queue; sched->tl_class_mask |= 1 << sched->current_queue;
} }
_HA_ATOMIC_INC(&sched->rq_total); _HA_ATOMIC_INC(&sched->rq_total);
} else { } else {
/* this tasklet runs on a specific thread. */ /* this tasklet runs on a specific thread. */
MT_LIST_ADDQ(&task_per_thread[thr].shared_tasklet_list, (struct mt_list *)&tl->list); MT_LIST_APPEND(&task_per_thread[thr].shared_tasklet_list, (struct mt_list *)&tl->list);
_HA_ATOMIC_INC(&task_per_thread[thr].rq_total); _HA_ATOMIC_INC(&task_per_thread[thr].rq_total);
if (sleeping_thread_mask & (1UL << thr)) { if (sleeping_thread_mask & (1UL << thr)) {
_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr)); _HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
@ -688,7 +688,7 @@ void process_runnable_tasks()
* 100% due to rounding, this is not a problem. Note that while in * 100% due to rounding, this is not a problem. Note that while in
* theory the sum cannot be NULL as we cannot get there without tasklets * theory the sum cannot be NULL as we cannot get there without tasklets
* to process, in practice it seldom happens when multiple writers * to process, in practice it seldom happens when multiple writers
* conflict and rollback on MT_LIST_TRY_ADDQ(shared_tasklet_list), causing * conflict and rollback on MT_LIST_TRY_APPEND(shared_tasklet_list), causing
* a first MT_LIST_ISEMPTY() to succeed for thread_has_task() and the * a first MT_LIST_ISEMPTY() to succeed for thread_has_task() and the
* one above to finally fail. This is extremely rare and not a problem. * one above to finally fail. This is extremely rare and not a problem.
*/ */
@ -766,7 +766,7 @@ void process_runnable_tasks()
_HA_ATOMIC_DEC(&niced_tasks); _HA_ATOMIC_DEC(&niced_tasks);
/* Add it to the local task list */ /* Add it to the local task list */
LIST_ADDQ(&tt->tasklets[TL_NORMAL], &((struct tasklet *)t)->list); LIST_APPEND(&tt->tasklets[TL_NORMAL], &((struct tasklet *)t)->list);
} }
/* release the rqueue lock */ /* release the rqueue lock */

View File

@ -45,22 +45,22 @@ struct list tcp_res_cont_keywords = LIST_HEAD_INIT(tcp_res_cont_keywords);
*/ */
void tcp_req_conn_keywords_register(struct action_kw_list *kw_list) void tcp_req_conn_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&tcp_req_conn_keywords, &kw_list->list); LIST_APPEND(&tcp_req_conn_keywords, &kw_list->list);
} }
void tcp_req_sess_keywords_register(struct action_kw_list *kw_list) void tcp_req_sess_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&tcp_req_sess_keywords, &kw_list->list); LIST_APPEND(&tcp_req_sess_keywords, &kw_list->list);
} }
void tcp_req_cont_keywords_register(struct action_kw_list *kw_list) void tcp_req_cont_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&tcp_req_cont_keywords, &kw_list->list); LIST_APPEND(&tcp_req_cont_keywords, &kw_list->list);
} }
void tcp_res_cont_keywords_register(struct action_kw_list *kw_list) void tcp_res_cont_keywords_register(struct action_kw_list *kw_list)
{ {
LIST_ADDQ(&tcp_res_cont_keywords, &kw_list->list); LIST_APPEND(&tcp_res_cont_keywords, &kw_list->list);
} }
/* /*
@ -1097,7 +1097,7 @@ static int tcp_parse_tcp_rep(char **args, int section_type, struct proxy *curpx,
warn++; warn++;
} }
LIST_ADDQ(&curpx->tcp_rep.inspect_rules, &rule->list); LIST_APPEND(&curpx->tcp_rep.inspect_rules, &rule->list);
} }
else { else {
memprintf(err, memprintf(err,
@ -1213,7 +1213,7 @@ static int tcp_parse_tcp_req(char **args, int section_type, struct proxy *curpx,
/* the following function directly emits the warning */ /* the following function directly emits the warning */
warnif_misplaced_tcp_cont(curpx, file, line, args[0]); warnif_misplaced_tcp_cont(curpx, file, line, args[0]);
LIST_ADDQ(&curpx->tcp_req.inspect_rules, &rule->list); LIST_APPEND(&curpx->tcp_req.inspect_rules, &rule->list);
} }
else if (strcmp(args[1], "connection") == 0) { else if (strcmp(args[1], "connection") == 0) {
arg++; arg++;
@ -1258,7 +1258,7 @@ static int tcp_parse_tcp_req(char **args, int section_type, struct proxy *curpx,
/* the following function directly emits the warning */ /* the following function directly emits the warning */
warnif_misplaced_tcp_conn(curpx, file, line, args[0]); warnif_misplaced_tcp_conn(curpx, file, line, args[0]);
LIST_ADDQ(&curpx->tcp_req.l4_rules, &rule->list); LIST_APPEND(&curpx->tcp_req.l4_rules, &rule->list);
} }
else if (strcmp(args[1], "session") == 0) { else if (strcmp(args[1], "session") == 0) {
arg++; arg++;
@ -1302,7 +1302,7 @@ static int tcp_parse_tcp_req(char **args, int section_type, struct proxy *curpx,
/* the following function directly emits the warning */ /* the following function directly emits the warning */
warnif_misplaced_tcp_sess(curpx, file, line, args[0]); warnif_misplaced_tcp_sess(curpx, file, line, args[0]);
LIST_ADDQ(&curpx->tcp_req.l5_rules, &rule->list); LIST_APPEND(&curpx->tcp_req.l5_rules, &rule->list);
} }
else { else {
if (curpx == defpx) if (curpx == defpx)

View File

@ -79,7 +79,7 @@ static void free_tcpcheck_fmt(struct list *fmt)
struct logformat_node *lf, *lfb; struct logformat_node *lf, *lfb;
list_for_each_entry_safe(lf, lfb, fmt, list) { list_for_each_entry_safe(lf, lfb, fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
release_sample_expr(lf->expr); release_sample_expr(lf->expr);
free(lf->arg); free(lf->arg);
free(lf); free(lf);
@ -105,7 +105,7 @@ static void free_tcpcheck_http_hdrs(struct list *hdrs)
struct tcpcheck_http_hdr *hdr, *bhdr; struct tcpcheck_http_hdr *hdr, *bhdr;
list_for_each_entry_safe(hdr, bhdr, hdrs, list) { list_for_each_entry_safe(hdr, bhdr, hdrs, list) {
LIST_DEL(&hdr->list); LIST_DELETE(&hdr->list);
free_tcpcheck_http_hdr(hdr); free_tcpcheck_http_hdr(hdr);
} }
} }
@ -251,7 +251,7 @@ void free_tcpcheck_vars(struct list *vars)
struct tcpcheck_var *var, *back; struct tcpcheck_var *var, *back;
list_for_each_entry_safe(var, back, vars, list) { list_for_each_entry_safe(var, back, vars, list) {
LIST_DEL(&var->list); LIST_DELETE(&var->list);
free_tcpcheck_var(var); free_tcpcheck_var(var);
} }
} }
@ -281,7 +281,7 @@ int dup_tcpcheck_vars(struct list *dst, const struct list *src)
} }
else else
new->data.u = var->data.u; new->data.u = var->data.u;
LIST_ADDQ(dst, &new->list); LIST_APPEND(dst, &new->list);
} }
return 1; return 1;
@ -337,7 +337,7 @@ void free_tcpcheck_ruleset(struct tcpcheck_ruleset *rs)
ebpt_delete(&rs->node); ebpt_delete(&rs->node);
free(rs->node.key); free(rs->node.key);
list_for_each_entry_safe(r, rb, &rs->rules, list) { list_for_each_entry_safe(r, rb, &rs->rules, list) {
LIST_DEL(&r->list); LIST_DELETE(&r->list);
free_tcpcheck(r, 0); free_tcpcheck(r, 0);
} }
free(rs); free(rs);
@ -2772,7 +2772,7 @@ struct tcpcheck_rule *parse_tcpcheck_send_http(char **args, int cur_arg, struct
ist0(hdrs[i].v); ist0(hdrs[i].v);
if (!parse_logformat_string(istptr(hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg)) if (!parse_logformat_string(istptr(hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
goto error; goto error;
LIST_ADDQ(&chk->send.http.hdrs, &hdr->list); LIST_APPEND(&chk->send.http.hdrs, &hdr->list);
hdr = NULL; hdr = NULL;
} }
@ -3470,8 +3470,8 @@ void tcpcheck_overwrite_send_http_rule(struct tcpcheck_rule *old, struct tcpchec
old->send.http.flags |= TCPCHK_SND_HTTP_FL_URI_FMT; old->send.http.flags |= TCPCHK_SND_HTTP_FL_URI_FMT;
LIST_INIT(&old->send.http.uri_fmt); LIST_INIT(&old->send.http.uri_fmt);
list_for_each_entry_safe(lf, lfb, &new->send.http.uri_fmt, list) { list_for_each_entry_safe(lf, lfb, &new->send.http.uri_fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
LIST_ADDQ(&old->send.http.uri_fmt, &lf->list); LIST_APPEND(&old->send.http.uri_fmt, &lf->list);
} }
} }
@ -3483,8 +3483,8 @@ void tcpcheck_overwrite_send_http_rule(struct tcpcheck_rule *old, struct tcpchec
free_tcpcheck_http_hdrs(&old->send.http.hdrs); free_tcpcheck_http_hdrs(&old->send.http.hdrs);
list_for_each_entry_safe(hdr, bhdr, &new->send.http.hdrs, list) { list_for_each_entry_safe(hdr, bhdr, &new->send.http.hdrs, list) {
LIST_DEL(&hdr->list); LIST_DELETE(&hdr->list);
LIST_ADDQ(&old->send.http.hdrs, &hdr->list); LIST_APPEND(&old->send.http.hdrs, &hdr->list);
} }
if (!(new->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT) && isttest(new->send.http.body)) { if (!(new->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT) && isttest(new->send.http.body)) {
@ -3504,8 +3504,8 @@ void tcpcheck_overwrite_send_http_rule(struct tcpcheck_rule *old, struct tcpchec
old->send.http.flags |= TCPCHK_SND_HTTP_FL_BODY_FMT; old->send.http.flags |= TCPCHK_SND_HTTP_FL_BODY_FMT;
LIST_INIT(&old->send.http.body_fmt); LIST_INIT(&old->send.http.body_fmt);
list_for_each_entry_safe(lf, lfb, &new->send.http.body_fmt, list) { list_for_each_entry_safe(lf, lfb, &new->send.http.body_fmt, list) {
LIST_DEL(&lf->list); LIST_DELETE(&lf->list);
LIST_ADDQ(&old->send.http.body_fmt, &lf->list); LIST_APPEND(&old->send.http.body_fmt, &lf->list);
} }
} }
} }
@ -3546,11 +3546,11 @@ int tcpcheck_add_http_rule(struct tcpcheck_rule *chk, struct tcpcheck_rules *rul
if (r && r->action == TCPCHK_ACT_CONNECT) if (r && r->action == TCPCHK_ACT_CONNECT)
r = get_next_tcpcheck_rule(rules, r); r = get_next_tcpcheck_rule(rules, r);
if (!r || r->action != TCPCHK_ACT_SEND) if (!r || r->action != TCPCHK_ACT_SEND)
LIST_ADD(rules->list, &chk->list); LIST_INSERT(rules->list, &chk->list);
else if (r->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT) { else if (r->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT) {
LIST_DEL(&r->list); LIST_DELETE(&r->list);
free_tcpcheck(r, 0); free_tcpcheck(r, 0);
LIST_ADD(rules->list, &chk->list); LIST_INSERT(rules->list, &chk->list);
} }
else { else {
tcpcheck_overwrite_send_http_rule(r, chk); tcpcheck_overwrite_send_http_rule(r, chk);
@ -3588,12 +3588,12 @@ int tcpcheck_add_http_rule(struct tcpcheck_rule *chk, struct tcpcheck_rules *rul
if (r && r->action == TCPCHK_ACT_SEND && (r->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT)) { if (r && r->action == TCPCHK_ACT_SEND && (r->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT)) {
tcpcheck_overwrite_send_http_rule(r, chk); tcpcheck_overwrite_send_http_rule(r, chk);
free_tcpcheck(chk, 0); free_tcpcheck(chk, 0);
LIST_DEL(&r->list); LIST_DELETE(&r->list);
r->send.http.flags &= ~TCPCHK_SND_HTTP_FROM_OPT; r->send.http.flags &= ~TCPCHK_SND_HTTP_FROM_OPT;
chk = r; chk = r;
} }
} }
LIST_ADDQ(rules->list, &chk->list); LIST_APPEND(rules->list, &chk->list);
} }
return 1; return 1;
} }
@ -3632,8 +3632,8 @@ static int check_proxy_tcpcheck(struct proxy *px)
if (chk && chk->action == TCPCHK_ACT_SEND && (chk->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT)) { if (chk && chk->action == TCPCHK_ACT_SEND && (chk->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT)) {
next = get_next_tcpcheck_rule(&px->tcpcheck_rules, chk); next = get_next_tcpcheck_rule(&px->tcpcheck_rules, chk);
if (next && next->action == TCPCHK_ACT_CONNECT) { if (next && next->action == TCPCHK_ACT_CONNECT) {
LIST_DEL(&chk->list); LIST_DELETE(&chk->list);
LIST_ADD(&next->list, &chk->list); LIST_INSERT(&next->list, &chk->list);
chk->index = next->index; chk->index = next->index;
} }
} }
@ -3654,7 +3654,7 @@ static int check_proxy_tcpcheck(struct proxy *px)
ret |= ERR_ALERT | ERR_FATAL; ret |= ERR_ALERT | ERR_FATAL;
goto out; goto out;
} }
LIST_ADDQ(px->tcpcheck_rules.list, &next->list); LIST_APPEND(px->tcpcheck_rules.list, &next->list);
next->index = chk->index; next->index = chk->index;
} }
} }
@ -3675,7 +3675,7 @@ static int check_proxy_tcpcheck(struct proxy *px)
} }
chk->action = TCPCHK_ACT_CONNECT; chk->action = TCPCHK_ACT_CONNECT;
chk->connect.options = (TCPCHK_OPT_DEFAULT_CONNECT|TCPCHK_OPT_IMPLICIT); chk->connect.options = (TCPCHK_OPT_DEFAULT_CONNECT|TCPCHK_OPT_IMPLICIT);
LIST_ADD(px->tcpcheck_rules.list, &chk->list); LIST_INSERT(px->tcpcheck_rules.list, &chk->list);
} }
/* Remove all comment rules. To do so, when a such rule is found, the /* Remove all comment rules. To do so, when a such rule is found, the
@ -3690,7 +3690,7 @@ static int check_proxy_tcpcheck(struct proxy *px)
case TCPCHK_ACT_COMMENT: case TCPCHK_ACT_COMMENT:
free(comment); free(comment);
comment = chk->comment; comment = chk->comment;
LIST_DEL(&chk->list); LIST_DELETE(&chk->list);
free(chk); free(chk);
break; break;
case TCPCHK_ACT_CONNECT: case TCPCHK_ACT_CONNECT:
@ -3733,7 +3733,7 @@ static void deinit_tcpchecks()
free(node->key); free(node->key);
rs = container_of(node, typeof(*rs), node); rs = container_of(node, typeof(*rs), node);
list_for_each_entry_safe(r, rb, &rs->rules, list) { list_for_each_entry_safe(r, rb, &rs->rules, list) {
LIST_DEL(&r->list); LIST_DELETE(&r->list);
free_tcpcheck(r, 0); free_tcpcheck(r, 0);
} }
free(rs); free(rs);
@ -3776,7 +3776,7 @@ int add_tcpcheck_expect_str(struct tcpcheck_rules *rules, const char *str)
if (prev_check->action != TCPCHK_ACT_COMMENT && prev_check->action != TCPCHK_ACT_ACTION_KW) if (prev_check->action != TCPCHK_ACT_COMMENT && prev_check->action != TCPCHK_ACT_ACTION_KW)
break; break;
} }
LIST_ADDQ(rules->list, &tcpcheck->list); LIST_APPEND(rules->list, &tcpcheck->list);
return 1; return 1;
} }
@ -3809,7 +3809,7 @@ int add_tcpcheck_send_strs(struct tcpcheck_rules *rules, const char * const *str
for (in = strs[i]; (*dst = *in++); dst++); for (in = strs[i]; (*dst = *in++); dst++);
*dst = 0; *dst = 0;
LIST_ADDQ(rules->list, &tcpcheck->list); LIST_APPEND(rules->list, &tcpcheck->list);
return 1; return 1;
} }
@ -3877,7 +3877,7 @@ static int proxy_parse_tcpcheck(char **args, int section, struct proxy *curpx,
/* No error: add the tcp-check rule in the list */ /* No error: add the tcp-check rule in the list */
chk->index = index; chk->index = index;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
if ((curpx->options2 & PR_O2_CHK_ANY) == PR_O2_TCPCHK_CHK && if ((curpx->options2 & PR_O2_CHK_ANY) == PR_O2_TCPCHK_CHK &&
(curpx->tcpcheck_rules.flags & TCPCHK_RULES_PROTO_CHK) == TCPCHK_RULES_TCP_CHK) { (curpx->tcpcheck_rules.flags & TCPCHK_RULES_PROTO_CHK) == TCPCHK_RULES_TCP_CHK) {
@ -3991,7 +3991,7 @@ static int proxy_parse_httpcheck(char **args, int section, struct proxy *curpx,
else { else {
/* mark this ruleset as unused for now */ /* mark this ruleset as unused for now */
curpx->tcpcheck_rules.flags |= TCPCHK_RULES_UNUSED_HTTP_RS; curpx->tcpcheck_rules.flags |= TCPCHK_RULES_UNUSED_HTTP_RS;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
} }
out: out:
@ -4046,7 +4046,7 @@ int proxy_parse_redis_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "string", redis_res, chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "string", redis_res,
"error-status", "L7STS", "error-status", "L7STS",
@ -4059,7 +4059,7 @@ int proxy_parse_redis_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -4147,7 +4147,7 @@ int proxy_parse_ssl_hello_chk_opt(char **args, int cur_arg, struct proxy *curpx,
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^1[56]", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^1[56]",
"min-recv", "5", "ok-status", "L6OK", "min-recv", "5", "ok-status", "L6OK",
@ -4159,7 +4159,7 @@ int proxy_parse_ssl_hello_chk_opt(char **args, int cur_arg, struct proxy *curpx,
goto error; goto error;
} }
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -4225,7 +4225,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, const
var->data.u.str.area = cmd; var->data.u.str.area = cmd;
var->data.u.str.data = strlen(cmd); var->data.u.str.data = strlen(cmd);
LIST_INIT(&var->list); LIST_INIT(&var->list);
LIST_ADDQ(&rules->preset_vars, &var->list); LIST_APPEND(&rules->preset_vars, &var->list);
cmd = NULL; cmd = NULL;
var = NULL; var = NULL;
@ -4246,7 +4246,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, const
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^[0-9]{3}[ \r]", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^[0-9]{3}[ \r]",
"min-recv", "4", "min-recv", "4",
@ -4259,7 +4259,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, const
goto error; goto error;
} }
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^2[0-9]{2}[ \r]", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^2[0-9]{2}[ \r]",
"min-recv", "4", "min-recv", "4",
@ -4273,7 +4273,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, const
goto error; goto error;
} }
chk->index = 2; chk->index = 2;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-lf", smtp_req, ""}, chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-lf", smtp_req, ""},
1, curpx, &rs->rules, file, line, &errmsg); 1, curpx, &rs->rules, file, line, &errmsg);
@ -4282,7 +4282,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, const
goto error; goto error;
} }
chk->index = 3; chk->index = 3;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^2[0-9]{2}[- \r]", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^2[0-9]{2}[- \r]",
"min-recv", "4", "min-recv", "4",
@ -4297,7 +4297,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, const
goto error; goto error;
} }
chk->index = 4; chk->index = 4;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -4369,7 +4369,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
var->data.u.str.area = user; var->data.u.str.area = user;
var->data.u.str.data = strlen(user); var->data.u.str.data = strlen(user);
LIST_INIT(&var->list); LIST_INIT(&var->list);
LIST_ADDQ(&rules->preset_vars, &var->list); LIST_APPEND(&rules->preset_vars, &var->list);
user = NULL; user = NULL;
var = NULL; var = NULL;
@ -4381,7 +4381,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
var->data.type = SMP_T_SINT; var->data.type = SMP_T_SINT;
var->data.u.sint = packetlen; var->data.u.sint = packetlen;
LIST_INIT(&var->list); LIST_INIT(&var->list);
LIST_ADDQ(&rules->preset_vars, &var->list); LIST_APPEND(&rules->preset_vars, &var->list);
var = NULL; var = NULL;
} }
else { else {
@ -4407,7 +4407,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-binary-lf", pgsql_req, ""}, chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-binary-lf", pgsql_req, ""},
1, curpx, &rs->rules, file, line, &errmsg); 1, curpx, &rs->rules, file, line, &errmsg);
@ -4416,7 +4416,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "!rstring", "^E", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "!rstring", "^E",
"min-recv", "5", "min-recv", "5",
@ -4429,7 +4429,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = 2; chk->index = 2;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^52000000(08|0A|0C)000000(00|02|03|04|05|06)", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^52000000(08|0A|0C)000000(00|02|03|04|05|06)",
"min-recv", "9", "min-recv", "9",
@ -4443,7 +4443,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = 3; chk->index = 3;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -4599,7 +4599,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
var->data.u.str.area = hdr; var->data.u.str.area = hdr;
var->data.u.str.data = 4; var->data.u.str.data = 4;
LIST_INIT(&var->list); LIST_INIT(&var->list);
LIST_ADDQ(&rules->preset_vars, &var->list); LIST_APPEND(&rules->preset_vars, &var->list);
hdr = NULL; hdr = NULL;
var = NULL; var = NULL;
@ -4612,7 +4612,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
var->data.u.str.area = user; var->data.u.str.area = user;
var->data.u.str.data = strlen(user); var->data.u.str.data = strlen(user);
LIST_INIT(&var->list); LIST_INIT(&var->list);
LIST_ADDQ(&rules->preset_vars, &var->list); LIST_APPEND(&rules->preset_vars, &var->list);
user = NULL; user = NULL;
var = NULL; var = NULL;
} }
@ -4634,7 +4634,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = index++; chk->index = index++;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
if (mysql_req) { if (mysql_req) {
chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-binary-lf", mysql_req, ""}, chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-binary-lf", mysql_req, ""},
@ -4644,7 +4644,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
goto error; goto error;
} }
chk->index = index++; chk->index = index++;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
} }
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""}, chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
@ -4655,7 +4655,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
} }
chk->expect.custom = tcpcheck_mysql_expect_iniths; chk->expect.custom = tcpcheck_mysql_expect_iniths;
chk->index = index++; chk->index = index++;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
if (mysql_req) { if (mysql_req) {
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""}, chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
@ -4666,7 +4666,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, c
} }
chk->expect.custom = tcpcheck_mysql_expect_ok; chk->expect.custom = tcpcheck_mysql_expect_ok;
chk->index = index++; chk->index = index++;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
} }
ruleset_found: ruleset_found:
@ -4729,7 +4729,7 @@ int proxy_parse_ldap_check_opt(char **args, int cur_arg, struct proxy *curpx, co
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^30", chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^30",
"min-recv", "14", "min-recv", "14",
@ -4741,7 +4741,7 @@ int proxy_parse_ldap_check_opt(char **args, int cur_arg, struct proxy *curpx, co
goto error; goto error;
} }
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""}, chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
1, curpx, &rs->rules, TCPCHK_RULES_LDAP_CHK, file, line, &errmsg); 1, curpx, &rs->rules, TCPCHK_RULES_LDAP_CHK, file, line, &errmsg);
@ -4751,7 +4751,7 @@ int proxy_parse_ldap_check_opt(char **args, int cur_arg, struct proxy *curpx, co
} }
chk->expect.custom = tcpcheck_ldap_expect_bindrsp; chk->expect.custom = tcpcheck_ldap_expect_bindrsp;
chk->index = 2; chk->index = 2;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -4817,7 +4817,7 @@ int proxy_parse_spop_check_opt(char **args, int cur_arg, struct proxy *curpx, co
goto error; goto error;
} }
chk->index = 0; chk->index = 0;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", "min-recv", "4", ""}, chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", "min-recv", "4", ""},
1, curpx, &rs->rules, TCPCHK_RULES_SPOP_CHK, file, line, &errmsg); 1, curpx, &rs->rules, TCPCHK_RULES_SPOP_CHK, file, line, &errmsg);
@ -4827,7 +4827,7 @@ int proxy_parse_spop_check_opt(char **args, int cur_arg, struct proxy *curpx, co
} }
chk->expect.custom = tcpcheck_spop_expect_agenthello; chk->expect.custom = tcpcheck_spop_expect_agenthello;
chk->index = 1; chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list); LIST_APPEND(&rs->rules, &chk->list);
ruleset_found: ruleset_found:
rules->list = &rs->rules; rules->list = &rs->rules;
@ -4951,7 +4951,7 @@ static struct tcpcheck_rule *proxy_parse_httpchk_req(char **args, int cur_arg, s
ist0(tmp_hdrs[i].v); ist0(tmp_hdrs[i].v);
if (!parse_logformat_string(istptr(tmp_hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg)) if (!parse_logformat_string(istptr(tmp_hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
goto error; goto error;
LIST_ADDQ(&chk->send.http.hdrs, &hdr->list); LIST_APPEND(&chk->send.http.hdrs, &hdr->list);
} }
} }

View File

@ -4427,7 +4427,7 @@ int list_append_word(struct list *li, const char *str, char **err)
goto fail_wl_s; goto fail_wl_s;
} }
LIST_ADDQ(li, &wl->list); LIST_APPEND(li, &wl->list);
return 1; return 1;

View File

@ -150,7 +150,7 @@ unsigned int var_clear(struct var *var)
ha_free(&var->data.u.meth.str.area); ha_free(&var->data.u.meth.str.area);
size += var->data.u.meth.str.data; size += var->data.u.meth.str.data;
} }
LIST_DEL(&var->l); LIST_DELETE(&var->l);
pool_free(var_pool, var); pool_free(var_pool, var);
size += sizeof(struct var); size += sizeof(struct var);
return size; return size;
@ -373,7 +373,7 @@ static int sample_store(struct vars *vars, const char *name, struct sample *smp)
var = pool_alloc(var_pool); var = pool_alloc(var_pool);
if (!var) if (!var)
return 0; return 0;
LIST_ADDQ(&vars->head, &var->l); LIST_APPEND(&vars->head, &var->l);
var->name = name; var->name = name;
} }

View File

@ -855,7 +855,7 @@ static int quic_crypto_data_cpy(struct quic_enc_level *qel,
frm->type = QUIC_FT_CRYPTO; frm->type = QUIC_FT_CRYPTO;
frm->crypto.offset = cf_offset; frm->crypto.offset = cf_offset;
frm->crypto.len = cf_len; frm->crypto.len = cf_len;
LIST_ADDQ(&qel->pktns->tx.frms, &frm->list); LIST_APPEND(&qel->pktns->tx.frms, &frm->list);
} }
return len == 0; return len == 0;
@ -1156,7 +1156,7 @@ static inline void qc_treat_acked_tx_frm(struct quic_tx_frm *frm,
struct quic_conn_ctx *ctx) struct quic_conn_ctx *ctx)
{ {
TRACE_PROTO("Removing frame", QUIC_EV_CONN_PRSAFRM, ctx->conn, frm); TRACE_PROTO("Removing frame", QUIC_EV_CONN_PRSAFRM, ctx->conn, frm);
LIST_DEL(&frm->list); LIST_DELETE(&frm->list);
pool_free(pool_head_quic_tx_frm, frm); pool_free(pool_head_quic_tx_frm, frm);
} }
@ -1188,7 +1188,7 @@ static inline struct eb64_node *qc_ackrng_pkts(struct eb_root *pkts, unsigned in
pkt = eb64_entry(&node->node, struct quic_tx_packet, pn_node); pkt = eb64_entry(&node->node, struct quic_tx_packet, pn_node);
*pkt_flags |= pkt->flags; *pkt_flags |= pkt->flags;
LIST_ADD(newly_acked_pkts, &pkt->list); LIST_INSERT(newly_acked_pkts, &pkt->list);
TRACE_PROTO("Removing packet #", QUIC_EV_CONN_PRSAFRM, ctx->conn,, &pkt->pn_node.key); TRACE_PROTO("Removing packet #", QUIC_EV_CONN_PRSAFRM, ctx->conn,, &pkt->pn_node.key);
list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) list_for_each_entry_safe(frm, frmbak, &pkt->frms, list)
qc_treat_acked_tx_frm(frm, ctx); qc_treat_acked_tx_frm(frm, ctx);
@ -1207,8 +1207,8 @@ static inline void qc_treat_nacked_tx_frm(struct quic_tx_frm *frm,
struct quic_conn_ctx *ctx) struct quic_conn_ctx *ctx)
{ {
TRACE_PROTO("to resend frame", QUIC_EV_CONN_PRSAFRM, ctx->conn, frm); TRACE_PROTO("to resend frame", QUIC_EV_CONN_PRSAFRM, ctx->conn, frm);
LIST_DEL(&frm->list); LIST_DELETE(&frm->list);
LIST_ADD(&pktns->tx.frms, &frm->list); LIST_INSERT(&pktns->tx.frms, &frm->list);
} }
@ -1218,7 +1218,7 @@ static inline void free_quic_tx_pkts(struct list *pkts)
struct quic_tx_packet *pkt, *tmp; struct quic_tx_packet *pkt, *tmp;
list_for_each_entry_safe(pkt, tmp, pkts, list) { list_for_each_entry_safe(pkt, tmp, pkts, list) {
LIST_DEL(&pkt->list); LIST_DELETE(&pkt->list);
eb64_delete(&pkt->pn_node); eb64_delete(&pkt->pn_node);
pool_free(pool_head_quic_tx_packet, pkt); pool_free(pool_head_quic_tx_packet, pkt);
} }
@ -1267,7 +1267,7 @@ static inline void qc_treat_newly_acked_pkts(struct quic_conn_ctx *ctx,
ev.ack.acked = pkt->in_flight_len; ev.ack.acked = pkt->in_flight_len;
ev.ack.time_sent = pkt->time_sent; ev.ack.time_sent = pkt->time_sent;
quic_cc_event(&qc->path->cc, &ev); quic_cc_event(&qc->path->cc, &ev);
LIST_DEL(&pkt->list); LIST_DELETE(&pkt->list);
eb64_delete(&pkt->pn_node); eb64_delete(&pkt->pn_node);
pool_free(pool_head_quic_tx_packet, pkt); pool_free(pool_head_quic_tx_packet, pkt);
} }
@ -1302,7 +1302,7 @@ static inline void qc_release_lost_pkts(struct quic_pktns *pktns,
/* Treat the frames of this lost packet. */ /* Treat the frames of this lost packet. */
list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) list_for_each_entry_safe(frm, frmbak, &pkt->frms, list)
qc_treat_nacked_tx_frm(frm, pktns, ctx); qc_treat_nacked_tx_frm(frm, pktns, ctx);
LIST_DEL(&pkt->list); LIST_DELETE(&pkt->list);
if (!oldest_lost) { if (!oldest_lost) {
oldest_lost = newest_lost = pkt; oldest_lost = newest_lost = pkt;
} }
@ -1368,7 +1368,7 @@ static void qc_packet_loss_lookup(struct quic_pktns *pktns,
if (tick_is_le(time_sent, now_ms) || if (tick_is_le(time_sent, now_ms) ||
(int64_t)largest_acked_pn >= pkt->pn_node.key + QUIC_LOSS_PACKET_THRESHOLD) { (int64_t)largest_acked_pn >= pkt->pn_node.key + QUIC_LOSS_PACKET_THRESHOLD) {
eb64_delete(&pkt->pn_node); eb64_delete(&pkt->pn_node);
LIST_ADDQ(lost_pkts, &pkt->list); LIST_APPEND(lost_pkts, &pkt->list);
} }
else { else {
pktns->tx.loss_time = tick_first(pktns->tx.loss_time, loss_time_limit); pktns->tx.loss_time = tick_first(pktns->tx.loss_time, loss_time_limit);
@ -1851,7 +1851,7 @@ int qc_send_ppkts(struct quic_conn_ctx *ctx)
if (p->in_flight_len) if (p->in_flight_len)
qc_set_timer(ctx); qc_set_timer(ctx);
TRACE_PROTO("sent pkt", QUIC_EV_CONN_SPPKTS, ctx->conn, p); TRACE_PROTO("sent pkt", QUIC_EV_CONN_SPPKTS, ctx->conn, p);
LIST_DEL(&p->list); LIST_DELETE(&p->list);
} }
} }
@ -1875,7 +1875,7 @@ static int quic_build_post_handshake_frames(struct quic_conn *conn)
return 0; return 0;
frm->type = QUIC_FT_HANDSHAKE_DONE; frm->type = QUIC_FT_HANDSHAKE_DONE;
LIST_ADDQ(&conn->tx.frms_to_send, &frm->list); LIST_APPEND(&conn->tx.frms_to_send, &frm->list);
} }
for (i = 1; i < conn->rx_tps.active_connection_id_limit; i++) { for (i = 1; i < conn->rx_tps.active_connection_id_limit; i++) {
@ -1887,7 +1887,7 @@ static int quic_build_post_handshake_frames(struct quic_conn *conn)
goto err; goto err;
quic_connection_id_to_frm_cpy(frm, cid); quic_connection_id_to_frm_cpy(frm, cid);
LIST_ADDQ(&conn->tx.frms_to_send, &frm->list); LIST_APPEND(&conn->tx.frms_to_send, &frm->list);
} }
return 1; return 1;
@ -2982,7 +2982,7 @@ static ssize_t qc_lstnr_pkt_rcv(unsigned char **buf, const unsigned char *end,
*/ */
pkt->odcid_len = dcid_len; pkt->odcid_len = dcid_len;
/* Enqueue this packet. */ /* Enqueue this packet. */
LIST_ADDQ(&l->rx.qpkts, &pkt->rx_list); LIST_APPEND(&l->rx.qpkts, &pkt->rx_list);
/* Try to accept a new connection. */ /* Try to accept a new connection. */
listener_accept(l); listener_accept(l);
if (!qc->conn) { if (!qc->conn) {
@ -3276,8 +3276,8 @@ static inline int qc_build_cfrms(struct quic_tx_packet *pkt,
room -= cflen; room -= cflen;
if (dlen == cf->crypto.len) { if (dlen == cf->crypto.len) {
/* <cf> CRYPTO data have been consumed. */ /* <cf> CRYPTO data have been consumed. */
LIST_DEL(&cf->list); LIST_DELETE(&cf->list);
LIST_ADDQ(&pkt->frms, &cf->list); LIST_APPEND(&pkt->frms, &cf->list);
} }
else { else {
struct quic_tx_frm *new_cf; struct quic_tx_frm *new_cf;
@ -3291,7 +3291,7 @@ static inline int qc_build_cfrms(struct quic_tx_packet *pkt,
new_cf->type = QUIC_FT_CRYPTO; new_cf->type = QUIC_FT_CRYPTO;
new_cf->crypto.len = dlen; new_cf->crypto.len = dlen;
new_cf->crypto.offset = cf->crypto.offset; new_cf->crypto.offset = cf->crypto.offset;
LIST_ADDQ(&pkt->frms, &new_cf->list); LIST_APPEND(&pkt->frms, &new_cf->list);
/* Consume <dlen> bytes of the current frame. */ /* Consume <dlen> bytes of the current frame. */
cf->crypto.len -= dlen; cf->crypto.len -= dlen;
cf->crypto.offset += dlen; cf->crypto.offset += dlen;
@ -3516,7 +3516,7 @@ static inline void free_quic_tx_packet(struct quic_tx_packet *pkt)
struct quic_tx_frm *frm, *frmbak; struct quic_tx_frm *frm, *frmbak;
list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) { list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) {
LIST_DEL(&frm->list); LIST_DELETE(&frm->list);
pool_free(pool_head_quic_tx_frm, frm); pool_free(pool_head_quic_tx_frm, frm);
} }
pool_free(pool_head_quic_tx_packet, pkt); pool_free(pool_head_quic_tx_packet, pkt);
@ -3594,7 +3594,7 @@ static ssize_t qc_build_hdshk_pkt(struct q_buf *buf, struct quic_conn *qc, int p
/* Increment the number of bytes in <buf> buffer by the length of this packet. */ /* Increment the number of bytes in <buf> buffer by the length of this packet. */
buf->data += pkt_len; buf->data += pkt_len;
/* Attach this packet to <buf>. */ /* Attach this packet to <buf>. */
LIST_ADDQ(&buf->pkts, &pkt->list); LIST_APPEND(&buf->pkts, &pkt->list);
TRACE_LEAVE(QUIC_EV_CONN_HPKT, qc->conn, pkt); TRACE_LEAVE(QUIC_EV_CONN_HPKT, qc->conn, pkt);
return pkt_len; return pkt_len;
@ -3712,8 +3712,8 @@ static ssize_t qc_do_build_phdshk_apkt(struct q_buf *wbuf,
break; break;
} }
LIST_DEL(&frm->list); LIST_DELETE(&frm->list);
LIST_ADDQ(&pkt->frms, &frm->list); LIST_APPEND(&pkt->frms, &frm->list);
pos = ppos; pos = ppos;
} }
@ -3792,7 +3792,7 @@ static ssize_t qc_build_phdshk_apkt(struct q_buf *wbuf, struct quic_conn *qc)
/* Increment the number of bytes in <buf> buffer by the length of this packet. */ /* Increment the number of bytes in <buf> buffer by the length of this packet. */
wbuf->data += pkt_len; wbuf->data += pkt_len;
/* Attach this packet to <buf>. */ /* Attach this packet to <buf>. */
LIST_ADDQ(&wbuf->pkts, &pkt->list); LIST_APPEND(&wbuf->pkts, &pkt->list);
TRACE_LEAVE(QUIC_EV_CONN_PAPKT, qc->conn, pkt); TRACE_LEAVE(QUIC_EV_CONN_PAPKT, qc->conn, pkt);

View File

@ -33,12 +33,12 @@ void *thread(void *pouet)
case 0: case 0:
lol = malloc(sizeof(*lol)); lol = malloc(sizeof(*lol));
MT_LIST_INIT(&lol->list_elt); MT_LIST_INIT(&lol->list_elt);
MT_LIST_TRY_ADD(&pouet_list, &lol->list_elt); MT_LIST_TRY_INSERT(&pouet_list, &lol->list_elt);
break; break;
case 1: case 1:
lol = malloc(sizeof(*lol)); lol = malloc(sizeof(*lol));
MT_LIST_INIT(&lol->list_elt); MT_LIST_INIT(&lol->list_elt);
MT_LIST_TRY_ADDQ(&pouet_list, &lol->list_elt); MT_LIST_TRY_APPEND(&pouet_list, &lol->list_elt);
break; break;
case 2: case 2:
@ -52,7 +52,7 @@ void *thread(void *pouet)
{ {
if (random() % 2) { if (random() % 2) {
MT_LIST_DEL_SAFE(elt1); MT_LIST_DELETE_SAFE(elt1);
free(lol); free(lol);
} }
if (random() % 2) { if (random() % 2) {