]> git.sesse.net Git - cubemap/blobdiff - main.cpp
Revert "Rewrite the entire internal signal handling/wakeup."
[cubemap] / main.cpp
index b45713db99ccd307442165f69150fa6492c3c9ea..46eddaf834ce7aacfa3c3e518d70618747731246 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -16,8 +16,8 @@
 #include <utility>
 #include <vector>
 
-#include "accesslog.h"
 #include "acceptor.h"
+#include "accesslog.h"
 #include "config.h"
 #include "input.h"
 #include "log.h"
@@ -25,6 +25,7 @@
 #include "serverpool.h"
 #include "state.pb.h"
 #include "stats.h"
+#include "stream.h"
 #include "util.h"
 #include "version.h"
 
@@ -341,8 +342,21 @@ start:
 
                // Deserialize the streams.
                for (int i = 0; i < loaded_state.streams_size(); ++i) {
-                       servers->add_stream_from_serialized(loaded_state.streams(i));
-                       deserialized_stream_ids.insert(loaded_state.streams(i).stream_id());
+                       const StreamProto &stream = loaded_state.streams(i);
+
+                       vector<int> data_fds;
+                       for (int j = 0; j < stream.data_fds_size(); ++j) {
+                               data_fds.push_back(stream.data_fds(j));
+                       }
+
+                       // Older versions stored the data once in the protobuf instead of
+                       // sending around file descriptors.
+                       if (data_fds.empty() && stream.has_data()) {
+                               data_fds.push_back(make_tempfile(stream.data()));
+                       }
+
+                       servers->add_stream_from_serialized(stream, data_fds);
+                       deserialized_stream_ids.insert(stream.stream_id());
                }
 
                // Deserialize the inputs. Note that we don't actually add them to any stream yet.
@@ -385,6 +399,7 @@ start:
                if (input_it->second.refcount == 0) {
                        log(WARNING, "Input '%s' no longer in use, closing.",
                            input_it->first.c_str());
+                       input_it->second.input->close_socket();
                        delete input_it->second.input;
                        inputs.erase(input_it++);
                } else {