2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or (at
5 * your option) any later version.
7 * This program is distributed in the hope that it will be useful, but
8 * WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 * Copyright © 2007 Pierre Habouzit
19 * Copyright © 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua>
22 #include <lib-sys/evtloop.h>
26 typedef struct pop_data_t {
32 DO_INIT(pop_data_t, pop_data);
33 DO_WIPE(pop_data_t, pop_data);
34 static void pop_data_delete(pop_data_t **tp);
35 DO_ARRAY_TYPE(pop_data_t, pop_data);
36 DO_ARRAY_FUNCS(pop_data_t, pop_data, pop_data_delete);
38 /****************************************************************************/
40 /****************************************************************************/
42 static pop_data_array conns;
44 static inline pop_data_t *pop_data_new(void) {
45 pop_data_t *res = pop_data_init(p_new(pop_data_t, 1));
47 pop_data_array_append(&conns, res);
50 static inline pop_data_t *pop_data_dup(pop_data_t *t) {
54 static void pop_data_delete(pop_data_t **tp) {
57 if (--(*tp)->refcnt > 0) {
60 for (int i = 0; i < conns.len; i++) {
61 if (conns.arr[i] == *tp) {
62 pop_data_array_take(&conns, i);
71 static __init void pop_initialize(void)
73 pop_data_array_init(&conns);
75 static __fini void pop_shutdown(void)
77 pop_data_array_wipe(&conns);
80 /****************************************************************************/
82 /****************************************************************************/
84 static int pop_setup(job_t *w, void *cfg)
87 /* FIXME */ return el_job_release(w, EL_ERROR);
91 static void pop_finalize(job_t *w, el_status reason)
93 pop_data_delete((pop_data_t **)(void *)&w->ptr);
96 static machine_t const pop_machine = {
99 .finalize = &pop_finalize,
102 /****************************************************************************/
104 /****************************************************************************/
106 mx_t const pop_mx_ng = {