]> git.sur5r.net Git - i3/i3/commitdiff
log.c: use posix_fallocate() instead of ftruncate() (Thanks don)
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 31 Jul 2013 22:42:24 +0000 (00:42 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 31 Jul 2013 22:42:24 +0000 (00:42 +0200)
The effect is that the error handling is much better. posix_fallocate()
will allocate all the requested space, whereas ftruncate() does not.

Before this commit, in case the /dev/shm filesystem is too small to hold
the _contents_ of the log file, i3 will SIGBUS when writing to the shm
logfile. With this commit, it will print an error message on startup,
but continue to run without logging.

src/log.c

index e0679e15133e902f1ec82ccbc38094e74f2641b8..34e345322e994e57a07b70e2b0e084c6337b9803 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -129,10 +129,11 @@ void open_logbuffer(void) {
             return;
         }
 
-        if (ftruncate(logbuffer_shm, logbuffer_size) == -1) {
+        int ret;
+        if ((ret = posix_fallocate(logbuffer_shm, 0, logbuffer_size)) != 0) {
             close(logbuffer_shm);
             shm_unlink(shmlogname);
-            fprintf(stderr, "Could not ftruncate SHM segment for the i3 log: %s\n", strerror(errno));
+            fprintf(stderr, "Could not ftruncate SHM segment for the i3 log: %s\n", strerror(ret));
             return;
         }