diff --git a/src/proto_http.c b/src/proto_http.c index e68b0e2f5..695ff7e33 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -1750,12 +1750,14 @@ resume_execution: value->area[value->data] = '\0'; /* perform update */ + HA_SPIN_LOCK(PATREF_LOCK, &ref->lock); if (pat_ref_find_elt(ref, key->area) != NULL) /* update entry if it exists */ pat_ref_set(ref, key->area, value->area, NULL); else /* insert a new entry */ pat_ref_add(ref, key->area, value->area, NULL); + HA_SPIN_UNLOCK(PATREF_LOCK, &ref->lock); free_trash_chunk(key); free_trash_chunk(value); @@ -2058,8 +2060,10 @@ resume_execution: /* perform update */ /* check if the entry already exists */ + HA_SPIN_LOCK(PATREF_LOCK, &ref->lock); if (pat_ref_find_elt(ref, key->area) == NULL) pat_ref_add(ref, key->area, NULL, NULL); + HA_SPIN_UNLOCK(PATREF_LOCK, &ref->lock); free_trash_chunk(key); break; diff --git a/src/proto_htx.c b/src/proto_htx.c index 5643c625a..d2c03e180 100644 --- a/src/proto_htx.c +++ b/src/proto_htx.c @@ -2977,13 +2977,14 @@ static enum rule_result htx_req_get_intercept_rule(struct proxy *px, struct list value->area[value->data] = '\0'; /* perform update */ + HA_SPIN_LOCK(PATREF_LOCK, &ref->lock); if (pat_ref_find_elt(ref, key->area) != NULL) /* update entry if it exists */ pat_ref_set(ref, key->area, value->area, NULL); else /* insert a new entry */ pat_ref_add(ref, key->area, value->area, NULL); - + HA_SPIN_UNLOCK(PATREF_LOCK, &ref->lock); free_trash_chunk(key); free_trash_chunk(value); break; @@ -3272,9 +3273,10 @@ resume_execution: /* perform update */ /* check if the entry already exists */ + HA_SPIN_LOCK(PATREF_LOCK, &ref->lock); if (pat_ref_find_elt(ref, key->area) == NULL) pat_ref_add(ref, key->area, NULL, NULL); - + HA_SPIN_UNLOCK(PATREF_LOCK, &ref->lock); free_trash_chunk(key); break; }