]> git.sesse.net Git - cubemap/blobdiff - stream.h
Add Metacube headers in add_data_deferred(), not add_data().
[cubemap] / stream.h
index 7e20aef2f02c6147e952c3804c55f705d39f0363..97451f0c8afe7fe08dc57b7c44c18e64de4a0615 100644 (file)
--- a/stream.h
+++ b/stream.h
@@ -69,21 +69,28 @@ struct Stream {
        // What pool to fetch marks from, or NULL.
        MarkPool *mark_pool;
 
+       // Queued data, if any. Protected by the owning Server's <queued_data_mutex>.
+       std::string queued_data;
+
        // Put client to sleep, since there is no more data for it; we will on
        // longer listen on POLLOUT until we get more data. Also, it will be put
        // in the list of clients to wake up when we do.
        void put_client_to_sleep(Client *client);
 
-       // Add more input data to the stream. You should probably call wake_up_all_clients()
-       // after that.
-       void add_data(const char *data, ssize_t bytes);
+       // Add more data to <queued_data>, adding Metacube headers if needed.
+       // You should hold the owning Server's <queued_data_mutex>.
+       void add_data_deferred(const char *data, size_t bytes);
 
-       // We have more data, so mark all clients that are sleeping as ready to go.
-       void wake_up_all_clients();
+       // Add queued data to the stream, if any.
+       // You should hold the owning Server's <mutex> _and_ <queued_data_mutex>.
+       void process_queued_data();
 
 private:
        Stream(const Stream& other);
 
+       // Adds data directly to the stream file descriptor, without adding headers or
+       // going through <queued_data>. You should hold the owning Server's
+       // <mutex>.
        void add_data_raw(const char *data, ssize_t bytes);
 };