Fix control_tools.cpp mixed allocations - use pmem_free for pshm_read results

This commit is contained in:
Levi Neely 2026-03-08 21:38:48 +01:00
parent b555251a96
commit 1d52a4cb8c
1 changed files with 12 additions and 5 deletions

View File

@ -48,6 +48,13 @@
#include "pclsync/pfs.h" #include "pclsync/pfs.h"
#include "rpcclient.h" #include "rpcclient.h"
// Forward declare pmem_free for cleaning up pshm_read() results
extern "C" {
void pmem_free(int subsystem, void *ptr);
}
#define PMEM_SUBSYS_OTHER 0
#include "CLI11.hpp" #include "CLI11.hpp"
namespace cc = console_client; namespace cc = console_client;
@ -138,13 +145,13 @@ void setup_app(CLI::App *app) {
std::getline(std::cin, response); std::getline(std::cin, response);
if (response != "y" && response != "Y") { if (response != "y" && response != "Y") {
std::cout << "Finalize cancelled" << std::endl; std::cout << "Finalize cancelled" << std::endl;
free(pending); pmem_free(PMEM_SUBSYS_OTHER, pending);
if (errm) { free(errm); } if (errm) { free(errm); }
delete rpc; delete rpc;
return; return;
} }
} }
free(pending); pmem_free(PMEM_SUBSYS_OTHER, pending);
} }
} }
if (errm) { free(errm); errm = NULL; } if (errm) { free(errm); errm = NULL; }
@ -219,7 +226,7 @@ void setup_app(CLI::App *app) {
char *status_str = nullptr; char *status_str = nullptr;
if (pshm_read((void**)&status_str, nullptr) && status_str) { if (pshm_read((void**)&status_str, nullptr) && status_str) {
std::cout << status_str << std::endl; std::cout << status_str << std::endl;
free(status_str); pmem_free(PMEM_SUBSYS_OTHER, status_str);
} else { } else {
std::cerr << "Failed to read status from daemon." << std::endl; std::cerr << "Failed to read status from daemon." << std::endl;
if (errm) { free(errm); } if (errm) { free(errm); }
@ -312,10 +319,10 @@ void setup_app(CLI::App *app) {
} else { } else {
std::cerr << "No synchronized folders found." << std::endl; std::cerr << "No synchronized folders found." << std::endl;
} }
if(flist) { free(flist); } if(flist) { pmem_free(PMEM_SUBSYS_OTHER, flist); }
} else { } else {
std::cerr << "failed to read folder list from shm" << std::endl; std::cerr << "failed to read folder list from shm" << std::endl;
if(flist) { free(flist); } if(flist) { pmem_free(PMEM_SUBSYS_OTHER, flist); }
return -1; return -1;
} }
if(errm) { free(errm); } if(errm) { free(errm); }