fd38203a2a
So far we tried to use epoll directly wherever we needed an event loop. However, that has various shortcomings, such as the inability to handle larger amounts of timers (since each timerfd costs one fd, which is a very limited resource, usually bounded to 1024), and inability to do priorisation between multiple queued events. Let's add a minimal event loop API around epoll that is suitable for implementation of our own daemons and maybe one day can become public API for those who desire it. This loop is part of libsystemd-bus, but may be used independently of it.
43 lines
1.3 KiB
C
43 lines
1.3 KiB
C
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
|
|
#pragma once
|
|
|
|
/***
|
|
This file is part of systemd.
|
|
|
|
Copyright 2013 Lennart Poettering
|
|
|
|
systemd is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version.
|
|
|
|
systemd is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
***/
|
|
|
|
#include "hashmap.h"
|
|
|
|
typedef struct Prioq Prioq;
|
|
|
|
#define PRIOQ_IDX_NULL ((unsigned) -1)
|
|
|
|
Prioq *prioq_new(compare_func_t compare);
|
|
void prioq_free(Prioq *q);
|
|
int prioq_ensure_allocated(Prioq **q, compare_func_t compare_func);
|
|
|
|
int prioq_put(Prioq *q, void *data, unsigned *idx);
|
|
int prioq_remove(Prioq *q, void *data, unsigned *idx);
|
|
int prioq_reshuffle(Prioq *q, void *data, unsigned *idx);
|
|
|
|
void *prioq_peek(Prioq *q) _pure_;
|
|
void *prioq_pop(Prioq *q);
|
|
|
|
unsigned prioq_size(Prioq *q) _pure_;
|
|
bool prioq_isempty(Prioq *q) _pure_;
|