From 0bec0fa594486876ff63d02e98ab454515e9c0d8 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 3 Dec 2018 19:57:34 -0500 Subject: [PATCH] Remove leaks from snapshot_creator --- .travis.yml | 14 ++++++++------ libdeno/snapshot_creator.cc | 8 +++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc9f674b35..29ead4aad4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -93,18 +93,20 @@ script: ./tools/test_format.py - |- - # LSAN build of test_cc. We are in the process of getting a - # completely clean LSAN build, but it will take some work. So for now - # we just run a single test that passes under LSAN. + # LSAN build. We are in the process of getting a completely clean LSAN build, + # but it will take some work. So for now we just run a subset of the tests. echo is_asan=true >> target/debug/args.gn echo is_lsan=true >> target/debug/args.gn - DENO_BUILD_MODE=debug ./tools/build.py -j2 test_cc - ASAN_OPTIONS=detect_leaks=1 ./target/debug/test_cc + # We want to detect leaks during the build process as well as when executing + # the tests. So set the ASAN_OPTIONS env var before build.py is run. + export ASAN_OPTIONS=detect_leaks=1 + ./tools/build.py -C target/debug -j2 + ./target/debug/test_cc - |- # Release build and test bash -c "sleep 2100; pkill ninja; pkill cargo" & - DENO_BUILD_MODE=release ./tools/build.py -j2 + ./tools/build.py -C target/release -j2 DENO_BUILD_MODE=release ./tools/test.py - |- diff --git a/libdeno/snapshot_creator.cc b/libdeno/snapshot_creator.cc index adad025dbc..3f9b85d37b 100644 --- a/libdeno/snapshot_creator.cc +++ b/libdeno/snapshot_creator.cc @@ -34,11 +34,13 @@ int main(int argc, char** argv) { source_map_fn != nullptr ? source_map.c_str() : nullptr); auto snapshot = deno_get_snapshot(d); - std::string snapshot_str(reinterpret_cast(snapshot.data_ptr), - snapshot.data_len); std::ofstream file_(snapshot_out_bin, std::ios::binary); - file_ << snapshot_str; + file_.write(reinterpret_cast(snapshot.data_ptr), snapshot.data_len); file_.close(); + + delete[] snapshot.data_ptr; + deno_delete(d); + return file_.bad(); }