From 0dea3f96f8951dcaf6c6f1bf567204fdebf87ba3 Mon Sep 17 00:00:00 2001 From: Stanislav Bohm <stanislav.bohm@vsb.cz> Date: Sat, 8 Oct 2016 11:23:35 +0200 Subject: [PATCH] FIX: Disposing raw data fixed --- src/libloom/data/rawdata.cpp | 17 ++++++----------- src/libloom/interconnect.cpp | 2 +- src/libloom/utils.cpp | 8 +++++++- src/libloom/utils.h | 2 ++ src/libloom/worker.cpp | 2 +- tests/client/loomenv.py | 5 +++-- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/libloom/data/rawdata.cpp b/src/libloom/data/rawdata.cpp index 1b89b49..9ea0a42 100644 --- a/src/libloom/data/rawdata.cpp +++ b/src/libloom/data/rawdata.cpp @@ -23,12 +23,12 @@ RawData::RawData() RawData::~RawData() { - llog->debug("Disposing raw data filename={}", filename); + llog->debug("Disposing raw data filename={} size={}", filename, size); if (filename.empty()) { assert(data == nullptr); } else { - if (munmap(data, size)) { + if (size > 0 && munmap(data, size)) { log_errno_abort("munmap"); } if (unlink(filename.c_str())) { @@ -42,15 +42,6 @@ std::string RawData::get_type_name() const return RawDataUnpacker::get_type_name(); } -/*char* RawData::init_memonly(size_t size) -{ - assert(data == nullptr); - assert(file_id == 0); - this->size = size; - data = new char[size]; - return data; -}*/ - char* RawData::init_empty(Worker &worker, size_t size) { assert(data == nullptr); @@ -125,6 +116,10 @@ void RawData::map(int fd, bool write) assert(!filename.empty()); assert(fd >= 0); + if (size == 0) { + return; + } + int flags = PROT_READ; if (write) { flags |= PROT_WRITE; diff --git a/src/libloom/interconnect.cpp b/src/libloom/interconnect.cpp index d418dff..3fb594e 100644 --- a/src/libloom/interconnect.cpp +++ b/src/libloom/interconnect.cpp @@ -21,7 +21,7 @@ InterConnection::~InterConnection() void InterConnection::on_connection() { - llog->debug("Connected"); + llog->info("Connected to {}", get_address()); connection.start_read(); loomcomm::Announce msg; msg.set_port(worker.get_listen_port()); diff --git a/src/libloom/utils.cpp b/src/libloom/utils.cpp index b06bc2b..774ecc5 100644 --- a/src/libloom/utils.cpp +++ b/src/libloom/utils.cpp @@ -72,5 +72,11 @@ int loom::make_path(const char *path, mode_t mode) void loom::log_errno_abort(const char *tmp) { llog->critical("{}: {}", tmp, strerror(errno)); - exit(1); + abort(); +} + +void loom::log_errno_abort(const char *tmp, const char *tmp2) +{ + llog->critical("{}: {} ({})", tmp, strerror(errno), tmp2); + abort(); } diff --git a/src/libloom/utils.h b/src/libloom/utils.h index 5261518..009faad 100644 --- a/src/libloom/utils.h +++ b/src/libloom/utils.h @@ -17,6 +17,8 @@ namespace loom { void report_uv_error(int error_code, int line_number, const char *filename) __attribute__ ((noreturn)); void log_errno_abort(const char *tmp) __attribute__ ((noreturn)); +void log_errno_abort(const char *tmp, const char *tmp2) __attribute__ ((noreturn)); + int make_path(const char *path, mode_t mode); size_t file_size(const char *path); diff --git a/src/libloom/worker.cpp b/src/libloom/worker.cpp index 13414b7..09e025c 100644 --- a/src/libloom/worker.cpp +++ b/src/libloom/worker.cpp @@ -476,7 +476,7 @@ void ServerConnection::on_message(const char *data, size_t size) if (address.size() > 2 && address[0] == '!' && address[1] == ':') { msg.set_address(worker.get_server_address() + ":" + address.substr(2, std::string::npos)); } - llog->debug("Sending data {} to {}", msg.id(), msg.address()); + llog->debug("Sending data id={} to {}", msg.id(), msg.address()); bool with_size = msg.has_with_size() && msg.with_size(); assert(worker.send_data(msg.address(), msg.id(), with_size)); break; diff --git a/tests/client/loomenv.py b/tests/client/loomenv.py index ca5676b..ef83841 100644 --- a/tests/client/loomenv.py +++ b/tests/client/loomenv.py @@ -58,8 +58,9 @@ class LoomEnv(Env): server_args = (LOOM_SERVER_BIN, "--debug", "--port=" + str(self.PORT)) + valgrind_args = ("valgrind", "--num-callers=40") if VALGRIND: - server_args = ("valgrind",) + server_args + server_args = valgrind_args + server_args server = self.start_process("server", server_args) time.sleep(0.1) assert not server.poll() @@ -71,7 +72,7 @@ class LoomEnv(Env): "localhost", str(self.PORT)) if VALGRIND: time.sleep(2) - worker_args = ("valgrind",) + worker_args + worker_args = valgrind_args + worker_args for i in xrange(workers_count): w = self.start_process("worker{}".format(i), worker_args) workers.append(w) -- GitLab