github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/include/apr_queue.h (about) 1 /* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef APR_QUEUE_H 18 #define APR_QUEUE_H 19 20 /** 21 * @file apr_queue.h 22 * @brief Thread Safe FIFO bounded queue 23 * @note Since most implementations of the queue are backed by a condition 24 * variable implementation, it isn't available on systems without threads. 25 * Although condition variables are sometimes available without threads. 26 */ 27 28 #include "apu.h" 29 #include "apr_errno.h" 30 #include "apr_pools.h" 31 32 #if APR_HAS_THREADS 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif /* __cplusplus */ 37 38 /** 39 * @defgroup APR_Util_FIFO Thread Safe FIFO bounded queue 40 * @ingroup APR_Util 41 * @{ 42 */ 43 44 /** 45 * opaque structure 46 */ 47 typedef struct apr_queue_t apr_queue_t; 48 49 /** 50 * create a FIFO queue 51 * @param queue The new queue 52 * @param queue_capacity maximum size of the queue 53 * @param a pool to allocate queue from 54 */ 55 APU_DECLARE(apr_status_t) apr_queue_create(apr_queue_t **queue, 56 unsigned int queue_capacity, 57 apr_pool_t *a); 58 59 /** 60 * push/add an object to the queue, blocking if the queue is already full 61 * 62 * @param queue the queue 63 * @param data the data 64 * @returns APR_EINTR the blocking was interrupted (try again) 65 * @returns APR_EOF the queue has been terminated 66 * @returns APR_SUCCESS on a successful push 67 */ 68 APU_DECLARE(apr_status_t) apr_queue_push(apr_queue_t *queue, void *data); 69 70 /** 71 * pop/get an object from the queue, blocking if the queue is already empty 72 * 73 * @param queue the queue 74 * @param data the data 75 * @returns APR_EINTR the blocking was interrupted (try again) 76 * @returns APR_EOF if the queue has been terminated 77 * @returns APR_SUCCESS on a successful pop 78 */ 79 APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data); 80 81 /** 82 * push/add an object to the queue, returning immediately if the queue is full 83 * 84 * @param queue the queue 85 * @param data the data 86 * @returns APR_EINTR the blocking operation was interrupted (try again) 87 * @returns APR_EAGAIN the queue is full 88 * @returns APR_EOF the queue has been terminated 89 * @returns APR_SUCCESS on a successful push 90 */ 91 APU_DECLARE(apr_status_t) apr_queue_trypush(apr_queue_t *queue, void *data); 92 93 /** 94 * pop/get an object to the queue, returning immediately if the queue is empty 95 * 96 * @param queue the queue 97 * @param data the data 98 * @returns APR_EINTR the blocking operation was interrupted (try again) 99 * @returns APR_EAGAIN the queue is empty 100 * @returns APR_EOF the queue has been terminated 101 * @returns APR_SUCCESS on a successful pop 102 */ 103 APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data); 104 105 /** 106 * returns the size of the queue. 107 * 108 * @warning this is not threadsafe, and is intended for reporting/monitoring 109 * of the queue. 110 * @param queue the queue 111 * @returns the size of the queue 112 */ 113 APU_DECLARE(unsigned int) apr_queue_size(apr_queue_t *queue); 114 115 /** 116 * interrupt all the threads blocking on this queue. 117 * 118 * @param queue the queue 119 */ 120 APU_DECLARE(apr_status_t) apr_queue_interrupt_all(apr_queue_t *queue); 121 122 /** 123 * terminate the queue, sending an interrupt to all the 124 * blocking threads 125 * 126 * @param queue the queue 127 */ 128 APU_DECLARE(apr_status_t) apr_queue_term(apr_queue_t *queue); 129 130 #ifdef __cplusplus 131 } 132 #endif 133 134 /** @} */ 135 136 #endif /* APR_HAS_THREADS */ 137 138 #endif /* APRQUEUE_H */