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