fix memory leak

This commit is contained in:
Rongsong Shen 2025-12-10 15:25:05 +08:00
parent cf1dbdc07a
commit e001d4955c
3 changed files with 48 additions and 68 deletions

View file

@ -13,6 +13,7 @@
#include <readline/readline.h>
#include <cjson/cJSON.h>
#include <cjson/s2j.h>
#include "client.h"
#include "controller.capnp.h"
@ -60,11 +61,25 @@ typedef struct {
int ntasks;
} host_task_t;
typedef struct {
char* PATH;
} sub_envs_t;
typedef struct {
sub_envs_t sub_env_vars;
} exdata_t;
#define MAX_RUN_JOBS (20)
#define MAX_TASK_HOSTS (5)
#define MAX_RUN_TASKS (50)
#define RUSAGE_UPDATE_INTERVAL (60)
#define S2J_JSON_SET_var_string_ELEMENT(to_json, from_struct, _element) \
if (((from_struct) != NULL) && (((from_struct)->_element) != NULL)) { \
cJSON_AddStringToObject((to_json), #_element, \
(from_struct)->_element); \
}
static run_job_t run_jobs[MAX_RUN_JOBS];
static run_task_t run_tasks[MAX_RUN_TASKS];
@ -767,41 +782,16 @@ int cmd_jobrun(int argc, char* argv[])
static int build_job_envs(xce_job_submit_t* submit)
{
char* names[] = { "PATH", "LSAN_OPTIONS", NULL };
int i;
cJSON* top;
cJSON* envars;
char* exdata;
exdata_t exdata = { .sub_env_vars = { .PATH = getenv("PATH") } };
top = cJSON_CreateObject();
if (top == NULL) {
return -1;
}
s2j_create_json_obj(json_exdata);
s2j_create_json_obj(json_envs);
s2j_json_set_basic_element(json_envs, &(exdata.sub_env_vars), var_string,
PATH);
cJSON_AddItemToObject(json_exdata, "sub_env_vars", json_envs);
envars = cJSON_CreateObject();
if (envars == NULL) {
return -1;
}
cJSON_AddItemToObject(top, "sub_env_vars", envars);
for (i = 0; names[i] != NULL; i++) {
cJSON* val;
char* s = getenv(names[i]);
if (s == NULL) {
s = "";
}
val = cJSON_CreateString(s);
cJSON_AddItemToObject(envars, names[i], val);
}
exdata = cJSON_Print(top);
submit->submit->start_info->exdata = exdata;
cJSON_Delete(top);
submit->submit->start_info->exdata = cJSON_Print(json_exdata);
cJSON_Delete(json_exdata);
return 0;
}