Commit 54f6969e authored by Ramon Nou's avatar Ramon Nou
Browse files

Free array

parent 0ade4da6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -214,6 +214,10 @@ if(GKFS_ENABLE_EC)
    find_package(Jerasure REQUIRED)
endif()

if(GKFS_ENABLE_READ_ERRORS)
    add_compile_definitions(GKFS_ENABLE_READ_ERRORS)
endif()

### Other stuff that can be found out using find_package:

# determine the thread library of the system
+9 −2
Original line number Diff line number Diff line
@@ -941,13 +941,13 @@ gkfs_ecc_write(std::shared_ptr<gkfs::filemap::OpenFile> file, size_t count,

            // We have all the data to process a EC

            auto matrix = reed_sol_vandermonde_coding_matrix(
            int* matrix = reed_sol_vandermonde_coding_matrix(
                    data_servers, CTX->get_replicas(), 8);
            jerasure_matrix_encode(data_servers, CTX->get_replicas(), 8, matrix,
                                   data, coding, gkfs::config::rpc::chunksize);

            LOG(DEBUG, "EC computation finished");

            free(matrix);
            // Write erasure
            std::string ecc_path = file->path() + "_ecc_" + to_string(i) + "_" +
                                   to_string(i + data_servers - 1);
@@ -963,6 +963,13 @@ gkfs_ecc_write(std::shared_ptr<gkfs::filemap::OpenFile> file, size_t count,
                }
            }
        }
        for(unsigned int i = 0; i < data_servers; ++i) {
            free(data[i]);
        }
        for(auto i = 0; i < CTX->get_replicas(); ++i) {
            free(coding[i]);
        }

        free(coding);
        free(data);
    } else {
+8 −2
Original line number Diff line number Diff line
@@ -649,18 +649,24 @@ gkfs_ecc_recover(const std::string& path, void* buffer_recover,
    int res = 0;

    // We have all the data to recover the buffer
    auto matrix = reed_sol_vandermonde_coding_matrix(data_servers,
    int* matrix = reed_sol_vandermonde_coding_matrix(data_servers,
                                                     CTX->get_replicas(), 8);

    res = jerasure_matrix_decode(data_servers, CTX->get_replicas(), 8, matrix,
                                 0, erased.data(), data, coding,
                                 gkfs::config::rpc::chunksize);

    free(matrix);
    LOG(DEBUG, "EC recovered {}, with result {}", failed_server, res);
    memcpy(buffer_recover, data[failed_server], gkfs::config::rpc::chunksize);

    LOG(DEBUG, "EC computation finished");

    for(unsigned int i = 0; i < data_servers; ++i) {
        free(data[i]);
    }
    for(auto i = 0; i < CTX->get_replicas(); ++i) {
        free(coding[i]);
    }
    free(data);
    free(coding);
    return true;