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-2012 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 #ifndef _I3_SHMLOG_H
12 #define _I3_SHMLOG_H
13 
14 #include <stdint.h>
15 #include <pthread.h>
16 
17 /*
18  * Header of the shmlog file. Used by i3/src/log.c and i3/i3-dump-log/main.c.
19  *
20  */
21 typedef struct i3_shmlog_header {
22  /* Byte offset where the next line will be written to. */
24 
25  /* Byte offset where the last wrap occured. */
26  uint32_t offset_last_wrap;
27 
28  /* The size of the logfile in bytes. Since the size is limited to 25 MiB
29  * an uint32_t is sufficient. */
30  uint32_t size;
31 
32  /* wrap counter. We need it to reliably signal to clients that we just
33  * wrapped (clients cannot use offset_last_wrap because that might
34  * coincidentally be exactly the same as previously). Overflows can happen
35  * and don’t matter — clients use an equality check (==). */
36  uint32_t wrap_count;
37 
38  /* pthread condvar which will be broadcasted whenever there is a new
39  * message in the log. i3-dump-log uses this to implement -f (follow, like
40  * tail -f) in an efficient way. */
41  pthread_cond_t condvar;
43 
44 #endif