]> git.sesse.net Git - cubemap/blobdiff - server.cpp
Fix so clients would actually be woken up from the worker thread, not the input threa...
[cubemap] / server.cpp
index eeab64bb64fbf7bb790d89b14150e4eb97f42251..d41e3c70730b896e44a9362bf150ae534ee9f892 100644 (file)
@@ -162,7 +162,7 @@ void Server::do_work()
                if (should_stop) {
                        return;
                }
-       
+
                for (int i = 0; i < nfds; ++i) {
                        int fd = events[i].data.fd;
                        assert(clients.count(fd) != 0);
@@ -175,6 +175,11 @@ void Server::do_work()
 
                        process_client(client);
                }
+
+               for (unsigned i = 0; i < to_process.size(); ++i) {
+                       process_client(to_process[i]);
+               }
+               to_process.clear();
        }
 }
 
@@ -579,10 +584,11 @@ void Server::put_client_to_sleep(Client *client)
 
 void Server::wake_up_all_clients()
 {
-       vector<Client *> to_process;
-       swap(sleeping_clients, to_process);
-       for (unsigned i = 0; i < to_process.size(); ++i) {
-               process_client(to_process[i]);
+       if (to_process.empty()) {
+               swap(sleeping_clients, to_process);
+       } else {
+               to_process.insert(to_process.end(), sleeping_clients.begin(), sleeping_clients.end());
+               sleeping_clients.clear();
        }
 }