]> git.sesse.net Git - cubemap/blobdiff - httpinput.cpp
Fix some memory leaks that are probably irrelevant in practice.
[cubemap] / httpinput.cpp
index 3a6b3c8af561afba6ca00a23bcb5d621ed79cb17..a972fa2ca9eb7d4b8783bc72fb5b2cda647bcd85 100644 (file)
@@ -80,7 +80,7 @@ HTTPInput::HTTPInput(const InputProto &serialized)
 {
        // Set back the close-on-exec flag for the socket.
        // (This can't leak into a child, since we haven't been started yet.)
-       fcntl(sock, F_SETFD, 1);
+       fcntl(sock, F_SETFD, O_CLOEXEC);
 
        pending_data.resize(serialized.pending_data().size());
        memcpy(&pending_data[0], serialized.pending_data().data(), serialized.pending_data().size());
@@ -167,6 +167,7 @@ int HTTPInput::lookup_and_connect(const string &host, const string &port)
                        log(WARNING, "[%s] Lookup of '%s' failed (%s).",
                                url.c_str(), host.c_str(), gai_strerror(err));
                }
+               freeaddrinfo(ai);
                return -1;
        }
 
@@ -198,6 +199,7 @@ int HTTPInput::lookup_and_connect(const string &host, const string &port)
                        bool complete = wait_for_activity(sock, POLLIN | POLLOUT, nullptr);
                        if (should_stop()) {
                                safe_close(sock);
+                               freeaddrinfo(base_ai);
                                return -1;
                        }
                        if (complete) {
@@ -276,6 +278,7 @@ int HTTPInput::open_child_process(const string &cmdline)
        free(argv[0]);
        free(argv[1]);
        free(argv[2]);
+       close(devnullfd);
        close(pipefd[1]);
 
        if (err == 0) {