Lines 94-103
Link Here
|
94 |
sizeof(*new_recycle)); |
94 |
sizeof(*new_recycle)); |
95 |
new_recycle->pool = pool_to_recycle; |
95 |
new_recycle->pool = pool_to_recycle; |
96 |
for (;;) { |
96 |
for (;;) { |
97 |
new_recycle->next = queue_info->recycled_pools; |
97 |
/* Save the queue_info->recycled_pool->next in local variable next |
|
|
98 |
* because new_recycle->next can be changed after call of |
99 |
* apr_atomic_casptr. |
100 |
*/ |
101 |
struct recycled_pool *next = queue_info->recycled_pools; |
102 |
new_recycle->next = next; |
98 |
if (apr_atomic_casptr((volatile void**)&(queue_info->recycled_pools), |
103 |
if (apr_atomic_casptr((volatile void**)&(queue_info->recycled_pools), |
99 |
new_recycle, new_recycle->next) == |
104 |
new_recycle, new_recycle->next) == next) { |
100 |
new_recycle->next) { |
|
|
101 |
break; |
105 |
break; |
102 |
} |
106 |
} |
103 |
} |
107 |
} |