Program Listing for File main_free_cmem.cpp
↰ Return to documentation for file (main_free_cmem.cpp
)
#include <stdlib.h>
#include "felixtag.h"
#include "log.hpp"
#include "cmem_rcc/cmem_rcc.h"
void cmem_unlock_and_free_by_handle(int handle) {
int ret = CMEM_OpenNopage();
if (ret != 0) {
LOG_ERR("Failed to open CMEM");
rcc_error_print(stdout, ret);
exit(1);
}
ret = CMEM_SegmentUnlock(handle);
if (ret) {
LOG_ERR("Failed to unlock segment %d", handle);
rcc_error_print(stdout, ret);
exit(1);
}
ret = CMEM_GFPBPASegmentFree(handle);
if (ret) {
LOG_ERR("Failed to free segment %d", handle);
rcc_error_print(stdout, ret);
exit(1);
}
ret = CMEM_Close();
if (ret) {
LOG_ERR("Failed to close CMEM");
rcc_error_print(stdout, ret);
exit(1);
}
}
void cmem_unlock_and_free_by_name(char* cmem_name) {
int ret = CMEM_OpenNopage();
if (ret != 0) {
LOG_ERR("Failed to open CMEM");
rcc_error_print(stdout, ret);
exit(1);
}
ret = CMEM_SegmentUnlockAndFree(cmem_name);
if (ret) {
LOG_ERR("Failed to unlock and free segment %s", cmem_name);
rcc_error_print(stdout, ret);
exit(1);
}
ret = CMEM_Close();
if (ret) {
LOG_ERR("Failed to close CMEM");
rcc_error_print(stdout, ret);
exit(1);
}
LOG_INFO("Unlocked and freed segment %s", cmem_name);
}
int main(int argc, char** argv)
{
if(argc != 2) {
LOG_ERR("Usage: %s <handle/name>", argv[0]);
LOG_INFO("Version: %s\n", FELIX_TAG);
return 1;
}
char* name = argv[1];
char* end;
int handle = strtol(name, &end, 0);
if (*end == '\0') {
cmem_unlock_and_free_by_handle(handle);
} else {
cmem_unlock_and_free_by_name(name);
}
}