Apache Portable Runtime
Toggle main menu visibility
Loading...
Searching...
No Matches
apr_queue.h
Go to the documentation of this file.
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 */
apr_errno.h
APR Error Codes.
apr_pools.h
APR memory allocation.
apr_queue_trypop
apr_status_t apr_queue_trypop(apr_queue_t *queue, void **data)
apr_queue_push
apr_status_t apr_queue_push(apr_queue_t *queue, void *data)
apr_queue_pop
apr_status_t apr_queue_pop(apr_queue_t *queue, void **data)
apr_queue_interrupt_all
apr_status_t apr_queue_interrupt_all(apr_queue_t *queue)
apr_queue_t
struct apr_queue_t apr_queue_t
Definition
apr_queue.h:47
apr_queue_create
apr_status_t apr_queue_create(apr_queue_t **queue, unsigned int queue_capacity, apr_pool_t *a)
apr_queue_trypush
apr_status_t apr_queue_trypush(apr_queue_t *queue, void *data)
apr_queue_term
apr_status_t apr_queue_term(apr_queue_t *queue)
apr_queue_size
unsigned int apr_queue_size(apr_queue_t *queue)
apr_status_t
int apr_status_t
Definition
apr_errno.h:44
apr_pool_t
struct apr_pool_t apr_pool_t
Definition
apr_pools.h:60
usr
include
apr-1
apr_queue.h
Generated by
1.17.0