X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=blobdiff_plain;f=include%2Fshmlog.h;h=dc8081f1329c8e6a24d2646c19428127efe594ce;hp=c513babf698e3e931ecabb011e024dde2a95cba3;hb=HEAD;hpb=d4523de6c8f7d930d52ce69d94ff186a29c5e803 diff --git a/include/shmlog.h b/include/shmlog.h index c513babf..dc8081f1 100644 --- a/include/shmlog.h +++ b/include/shmlog.h @@ -2,21 +2,49 @@ * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager - * © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE) + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) * * The format of the shmlog data structure which i3 development versions use by * default (ringbuffer for storing the debug log). * */ -#ifndef _I3_SHMLOG_H -#define _I3_SHMLOG_H +#pragma once + +#include #include +#if !defined(__OpenBSD__) +#include +#endif + +/* Default shmlog size if not set by user. */ +extern const int default_shmlog_size; +/** + * Header of the shmlog file. Used by i3/src/log.c and i3/i3-dump-log/main.c. + * + */ typedef struct i3_shmlog_header { + /* Byte offset where the next line will be written to. */ uint32_t offset_next_write; + + /* Byte offset where the last wrap occurred. */ uint32_t offset_last_wrap; + + /* The size of the logfile in bytes. Since the size is limited to 25 MiB + * an uint32_t is sufficient. */ uint32_t size; -} i3_shmlog_header; + /* wrap counter. We need it to reliably signal to clients that we just + * wrapped (clients cannot use offset_last_wrap because that might + * coincidentally be exactly the same as previously). Overflows can happen + * and don’t matter — clients use an equality check (==). */ + uint32_t wrap_count; + +#if !defined(__OpenBSD__) + /* pthread condvar which will be broadcasted whenever there is a new + * message in the log. i3-dump-log uses this to implement -f (follow, like + * tail -f) in an efficient way. */ + pthread_cond_t condvar; #endif +} i3_shmlog_header;