forked from lei.chen/myxce
fix memory leak
This commit is contained in:
parent
cf1dbdc07a
commit
e001d4955c
3 changed files with 48 additions and 68 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue