]> git.sur5r.net Git - i3/i3/blob - include/shmlog.h
0216c8d66555e47f93166b8e2290dafef0273f10
[i3/i3] / include / shmlog.h
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 <stdint.h>
14 #if !defined(__OpenBSD__)
15 #include <pthread.h>
16 #endif
17
18 /* Default shmlog size if not set by user. */
19 extern const int default_shmlog_size;
20
21 /*
22  * Header of the shmlog file. Used by i3/src/log.c and i3/i3-dump-log/main.c.
23  *
24  */
25 typedef struct i3_shmlog_header {
26     /* Byte offset where the next line will be written to. */
27     uint32_t offset_next_write;
28
29     /* Byte offset where the last wrap occurred. */
30     uint32_t offset_last_wrap;
31
32     /* The size of the logfile in bytes. Since the size is limited to 25 MiB
33      * an uint32_t is sufficient. */
34     uint32_t size;
35
36     /* wrap counter. We need it to reliably signal to clients that we just
37      * wrapped (clients cannot use offset_last_wrap because that might
38      * coincidentally be exactly the same as previously). Overflows can happen
39      * and don’t matter — clients use an equality check (==). */
40     uint32_t wrap_count;
41
42 #if !defined(__OpenBSD__)
43     /* pthread condvar which will be broadcasted whenever there is a new
44      * message in the log. i3-dump-log uses this to implement -f (follow, like
45      * tail -f) in an efficient way. */
46     pthread_cond_t condvar;
47 #endif
48 } i3_shmlog_header;