0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-11-14 07:08:42 +00:00
bird/sysdep/unix/io-loop.h
Maria Matejka bb63e99d78 Page allocator moved from pools to IO loops.
The resource pool system is highly hierarchical and keeping spare pages
in pools leads to unnecessarily complex memory management.

Loops have a flat hiearchy, at least for now, and it is therefore much
easier to keep care of pages, especially in cases of excessive virtual memory
fragmentation.
2021-12-01 13:00:54 +01:00

60 lines
1.1 KiB
C

/*
* BIRD -- I/O and event loop
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#ifndef _BIRD_SYSDEP_UNIX_IO_LOOP_H_
#define _BIRD_SYSDEP_UNIX_IO_LOOP_H_
#include "nest/bird.h"
#include "lib/lists.h"
#include "lib/event.h"
#include "lib/timer.h"
struct free_pages
{
list list; /* List of empty pages */
event *cleanup; /* Event to call when number of pages is outside bounds */
u16 min, max; /* Minimal and maximal number of free pages kept */
uint cnt; /* Number of empty pages */
};
struct birdloop
{
resource r;
pool *pool;
pool *parent;
struct timeloop time;
event_list event_list;
list sock_list;
uint sock_num;
BUFFER(sock *) poll_sk;
BUFFER(struct pollfd) poll_fd;
u8 poll_changed;
u8 close_scheduled;
_Atomic u32 ping_sent;
int wakeup_fds[2];
uint links;
struct free_pages pages;
void (*stopped)(void *data);
void *stop_data;
struct birdloop *prev_loop;
};
extern _Thread_local struct birdloop *birdloop_current;
void init_pages(struct birdloop *loop);
void flush_pages(struct birdloop *loop);
#endif