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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file event/fdqueue.h
19 * @brief fd queue declarations
21 * @addtogroup APACHE_MPM_EVENT
32 #include <apr_thread_mutex.h>
33 #include <apr_thread_cond.h>
34 #include <sys/types.h>
35 #if APR_HAVE_SYS_SOCKET_H
36 #include <sys/socket.h>
38 #include <apr_errno.h>
42 typedef struct fd_queue_info_t fd_queue_info_t
;
44 apr_status_t
ap_queue_info_create(fd_queue_info_t
** queue_info
,
45 apr_pool_t
* pool
, int max_idlers
);
46 apr_status_t
ap_queue_info_set_idle(fd_queue_info_t
* queue_info
,
47 apr_pool_t
* pool_to_recycle
);
48 apr_status_t
ap_queue_info_wait_for_idler(fd_queue_info_t
* queue_info
);
49 apr_status_t
ap_queue_info_term(fd_queue_info_t
* queue_info
);
51 struct fd_queue_elem_t
57 typedef struct fd_queue_elem_t fd_queue_elem_t
;
59 typedef struct timer_event_t timer_event_t
;
61 struct timer_event_t
{
62 APR_RING_ENTRY(timer_event_t
) link
;
64 ap_mpm_callback_fn_t
*cbfunc
;
71 APR_RING_HEAD(timers_t
, timer_event_t
) timers
;
72 fd_queue_elem_t
*data
;
75 apr_thread_mutex_t
*one_big_mutex
;
76 apr_thread_cond_t
*not_empty
;
79 typedef struct fd_queue_t fd_queue_t
;
81 void ap_pop_pool(apr_pool_t
** recycled_pool
, fd_queue_info_t
* queue_info
);
82 void ap_push_pool(fd_queue_info_t
* queue_info
,
83 apr_pool_t
* pool_to_recycle
);
85 apr_status_t
ap_queue_init(fd_queue_t
* queue
, int queue_capacity
,
87 apr_status_t
ap_queue_push(fd_queue_t
* queue
, apr_socket_t
* sd
,
88 conn_state_t
* cs
, apr_pool_t
* p
);
89 apr_status_t
ap_queue_push_timer(fd_queue_t
*queue
, timer_event_t
*te
);
90 apr_status_t
ap_queue_pop_something(fd_queue_t
* queue
, apr_socket_t
** sd
,
91 conn_state_t
** cs
, apr_pool_t
** p
,
93 apr_status_t
ap_queue_interrupt_all(fd_queue_t
* queue
);
94 apr_status_t
ap_queue_term(fd_queue_t
* queue
);
96 #endif /* FDQUEUE_H */