]> git.sesse.net Git - nageru/blobdiff - main.cpp
Lock everything in system memory for better realtime behavior.
[nageru] / main.cpp
index 6cf1ddec055275855fd30bcd8824cfd4e0bd1aaf..75ae9a7f7cbfa6354d7c7553dfa28070d89cfab7 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <sys/mman.h>
 #include <epoxy/gl.h>
 
 #include <QApplication>
@@ -14,6 +15,7 @@ extern "C" {
 
 #include "context.h"
 #include "flags.h"
+#include "image_input.h"
 #include "mainwindow.h"
 #include "mixer.h"
 
@@ -51,9 +53,21 @@ int main(int argc, char *argv[])
 
        app.installEventFilter(&mainWindow);  // For white balance color picking.
 
+       // Even on an otherwise unloaded system, it would seem writing the recording
+       // to disk (potentially terabytes of data as time goes by) causes Nageru
+       // to be pushed out of RAM. If we have the right privileges, simply lock us
+       // into memory for better realtime behavior.
+       if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) {
+               perror("mlockall()");
+               fprintf(stderr, "Failed to lock Nageru into RAM. You probably want to\n");
+               fprintf(stderr, "increase \"memlock\" for your user in limits.conf\n");
+               fprintf(stderr, "for better realtime behavior.\n");
+       }
+
        int rc = app.exec();
        global_mixer->quit();
        mainWindow.mixer_shutting_down();
        delete global_mixer;
+       ImageInput::shutdown_updaters();
        return rc;
 }