Browse Source

AK+ProtocolServer: Properly close download stream fd's

This makes the issue of running out of openable pipes in the
ProtocolServer process much less likely (but still possible).
AnotherTest 4 years ago
parent
commit
6422a04cda
2 changed files with 5 additions and 2 deletions
  1. 2 1
      AK/FileStream.h
  2. 3 1
      Services/ProtocolServer/ClientConnection.cpp

+ 2 - 1
AK/FileStream.h

@@ -54,8 +54,9 @@ public:
     ~InputFileStream()
     {
         if (m_file) {
+            fflush(m_file);
             if (m_owned)
-                fflush(m_file);
+                fclose(m_file);
         }
     }
 

+ 3 - 1
Services/ProtocolServer/ClientConnection.cpp

@@ -72,7 +72,9 @@ OwnPtr<Messages::ProtocolServer::StartDownloadResponse> ClientConnection::handle
     auto id = download->id();
     auto fd = download->download_fd();
     m_downloads.set(id, move(download));
-    return make<Messages::ProtocolServer::StartDownloadResponse>(id, fd);
+    auto response = make<Messages::ProtocolServer::StartDownloadResponse>(id, fd);
+    response->on_destruction = [fd] { close(fd); };
+    return response;
 }
 
 OwnPtr<Messages::ProtocolServer::StopDownloadResponse> ClientConnection::handle(const Messages::ProtocolServer::StopDownload& message)