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 */