// 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.
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 {