i3
shmlog.h
Go to the documentation of this file.
1/*
2 * vim:ts=4:sw=4:expandtab
3 *
4 * i3 - an improved dynamic tiling window manager
5 * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
6 *
7 * The format of the shmlog data structure which i3 development versions use by
8 * default (ringbuffer for storing the debug log).
9 *
10 */
11#pragma once
12
13#include <config.h>
14
15#include <stdint.h>
16#if !defined(__OpenBSD__)
17#include <pthread.h>
18#endif
19
20/* Default shmlog size if not set by user. */
21extern const int default_shmlog_size;
22
27typedef struct i3_shmlog_header {
28 /* Byte offset where the next line will be written to. */
30
31 /* Byte offset where the last wrap occurred. */
33
34 /* The size of the logfile in bytes. Since the size is limited to 25 MiB
35 * an uint32_t is sufficient. */
36 uint32_t size;
37
38 /* wrap counter. We need it to reliably signal to clients that we just
39 * wrapped (clients cannot use offset_last_wrap because that might
40 * coincidentally be exactly the same as previously). Overflows can happen
41 * and don’t matter — clients use an equality check (==). */
42 uint32_t wrap_count;
43
44#if !defined(__OpenBSD__)
45 /* pthread condvar which will be broadcasted whenever there is a new
46 * message in the log. i3-dump-log uses this to implement -f (follow, like
47 * tail -f) in an efficient way. */
48 pthread_cond_t condvar;
49#endif
const int default_shmlog_size
Definition: main.c:71
Header of the shmlog file.
Definition: shmlog.h:27
uint32_t offset_last_wrap
Definition: shmlog.h:32
uint32_t offset_next_write
Definition: shmlog.h:29
uint32_t wrap_count
Definition: shmlog.h:42
pthread_cond_t condvar
Definition: shmlog.h:48
uint32_t size
Definition: shmlog.h:36