Commit 7da0cff3 authored by Manuel Wudka-Robles's avatar Manuel Wudka-Robles
Browse files

Fix memory leaks in delete/write nonblocking examples

parent 98be36c7
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ private:
};

int main(int argc, char* argv[]) {
    google::InitGoogleLogging(argv[0]);

    if (argc != 3) {
        printf("%s: <host> <kinetic key>\n", argv[0]);
@@ -64,20 +65,19 @@ int main(int argc, char* argv[]) {
        return 1;
    }


    KineticRecord* record;
    if(!connection->blocking().Get(kinetic_key, &record).ok()) {
        printf("Unable to get metadata\n");
        return 1;
    }


    long long file_size = std::stoll(record->value());
    delete record;
    printf("Deleting file of size %llu\n", file_size);

    char key_buffer[100];
    int remaining = 0;
    DeleteCallback callback(&remaining);
    for (int64_t i = 0; i < file_size; i += 1024*1024) {
        unsigned int block_length = 1024*1024;
        if (i + block_length > file_size) {
@@ -86,13 +86,12 @@ int main(int argc, char* argv[]) {

        sprintf(key_buffer, "%s-%10" PRId64, kinetic_key, i);
        remaining++;
        DeleteCallback* callback = new DeleteCallback(&remaining);
        std::string key(key_buffer);
        connection->nonblocking().Delete(key, "", true, callback);
        connection->nonblocking().Delete(key, "", true, &callback);
    }

    remaining++;
    connection->nonblocking().Delete(kinetic_key, "", true, new DeleteCallback(&remaining));
    connection->nonblocking().Delete(kinetic_key, "", true, &callback);


    fd_set read_fds, write_fds;
@@ -105,6 +104,9 @@ int main(int argc, char* argv[]) {
    printf("\nDone!\n");

    delete connection;
    google::protobuf::ShutdownProtobufLibrary();
    google::ShutdownGoogleLogging();
    google::ShutDownCommandLineFlags();

    return 0;
}
+12 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ private:


int main(int argc, char* argv[]) {
    google::InitGoogleLogging(argv[0]);

    if (argc != 4) {
        printf("Usage: %s <host> <kinetic key> <input file name>\n", argv[0]);
@@ -74,6 +75,9 @@ int main(int argc, char* argv[]) {
    int remaining = 0;
    fd_set read_fds, write_fds;
    int num_fds = 0;

    PutCallback callback(&remaining);

    for (int64_t i = 0; i < inputfile_stat.st_size; i += 1024*1024) {
        int value_size = 1024*1024;
        if (i + value_size > inputfile_stat.st_size) {
@@ -87,14 +91,15 @@ int main(int argc, char* argv[]) {

        KineticRecord record(value, "", "", Message_Algorithm_SHA1);
        remaining++;
        connection->nonblocking().Put(key, "", true, record, new PutCallback(&remaining));
        connection->nonblocking().Put(key, "", true, record, &callback);
        connection->nonblocking().Run(&read_fds, &write_fds, &num_fds);

    }

    KineticRecord record(std::to_string(inputfile_stat.st_size), "", "", Message_Algorithm_SHA1);
    remaining++;
    connection->nonblocking().Put(kinetic_key, "", true, record, new PutCallback(&remaining));

    connection->nonblocking().Put(kinetic_key, "", true, record, &callback);

    connection->nonblocking().Run(&read_fds, &write_fds, &num_fds);
    while (remaining > 0) {
@@ -107,6 +112,11 @@ int main(int argc, char* argv[]) {
        return 1;
    }

    delete connection;
    google::protobuf::ShutdownProtobufLibrary();
    google::ShutdownGoogleLogging();
    google::ShutDownCommandLineFlags();

    printf("Done!\n");

    return 0;