Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mx_util: Simplify signature of mx_vasprintf_forever
mx_vasprintf_forever and mx_asprintf_forever can't fail, so don't return
an (always zero) status but the allocated string instead.
  • Loading branch information
donald committed May 5, 2022
1 parent e6edbd5 commit 421dc0c
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 43 deletions.
6 changes: 2 additions & 4 deletions mx_proc.c
Expand Up @@ -10,8 +10,7 @@
#include "mx_proc.h"

static long long int get_rss_anon(pid_t pid) {
_mx_cleanup_free_ char *fname;
mx_asprintf_forever(&fname, "/proc/%d/status", pid);
_mx_cleanup_free_ char *fname = mx_asprintf_forever("/proc/%d/status", pid);
_mx_cleanup_fclose_ FILE *file = fopen(fname, "r");
if (file == NULL)
return -errno;
Expand Down Expand Up @@ -131,15 +130,14 @@ int mx_proc_pid_stat(struct mx_proc_pid_stat **pps, pid_t pid)

int mx_proc_pid_stat_read(struct mx_proc_pid_stat *pps, char *fmt, ...)
{
_mx_cleanup_free_ char *fname = NULL;
_mx_cleanup_free_ char *line = NULL;
va_list ap;
int res;

assert(pps);

va_start(ap, fmt);
mx_vasprintf_forever(&fname, fmt, ap);
_mx_cleanup_free_ char *fname = fname = mx_vasprintf_forever(fmt, ap);
va_end(ap);

res = mx_read_first_line_from_file(fname, &line);
Expand Down
21 changes: 10 additions & 11 deletions mx_util.c
Expand Up @@ -580,28 +580,28 @@ char *mx_strdup_forever(char *str)
return dup;
}

int mx_vasprintf_forever(char **strp, const char *fmt, va_list ap)
char *mx_vasprintf_forever(const char *fmt, va_list ap)
{
int len;
char *strp;

do {
len = vasprintf(strp, fmt, ap);
len = vasprintf(&strp, fmt, ap);
} while (len < 0);

return len;
return strp;
}


int mx_asprintf_forever(char **strp, const char *fmt, ...)
char *mx_asprintf_forever(const char *fmt, ...)
{
va_list ap;
int len;

va_start(ap, fmt);
len = mx_vasprintf_forever(strp, fmt, ap);
char *strp = mx_vasprintf_forever(fmt, ap);
va_end(ap);

return len;
return strp;
}

char *mx_hostname(void)
Expand Down Expand Up @@ -721,11 +721,10 @@ int mx_setenvf_forever(const char *name, char *fmt, ...)
assert(fmt);

va_list ap;
char *value = NULL;
int res;

va_start(ap, fmt);
mx_vasprintf_forever(&value, fmt, ap);
char *value = mx_vasprintf_forever(fmt, ap);
va_end(ap);

res = mx_setenv_forever(name, value);
Expand Down Expand Up @@ -1217,9 +1216,9 @@ char *mx_cpuset_to_str(cpu_set_t* cpuset_ptr)
}
cpu_high=cpu-1;
if (cpu_low==cpu_high) {
mx_asprintf_forever(&str,"%d",cpu_low);
str = mx_asprintf_forever("%d", cpu_low);
} else {
mx_asprintf_forever(&str,"%d-%d",cpu_low,cpu_high);
str = mx_asprintf_forever("%d-%d", cpu_low, cpu_high);
}
res=mx_strvec_push_str(&strvec,str);
if (!res) {
Expand Down
4 changes: 2 additions & 2 deletions mx_util.h
Expand Up @@ -125,8 +125,8 @@ int mx_strtoi64(char *str, int64_t *to);

void *mx_malloc_forever(size_t size);
char *mx_strdup_forever(char *str);
int mx_vasprintf_forever(char **strp, const char *fmt, va_list ap);
int mx_asprintf_forever(char **strp, const char *fmt, ...) __attribute__ ((format(printf, 2, 3)));
char *mx_vasprintf_forever(const char *fmt, va_list ap);
char *mx_asprintf_forever(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));

char *mx_hostname(void);
char *mx_dirname(char *path);
Expand Down
7 changes: 3 additions & 4 deletions mxq_job.c
Expand Up @@ -426,7 +426,6 @@ int mxq_unassign_jobs_of_server(struct mx_mysql *mysql, struct mxq_daemon *daemo
static int mxq_set_job_status_loaded_on_server(struct mx_mysql *mysql, struct mxq_job *job)
{
struct mx_mysql_bind param = {0};
char *host_id;
int res;
int idx;

Expand All @@ -435,7 +434,7 @@ static int mxq_set_job_status_loaded_on_server(struct mx_mysql *mysql, struct mx
assert(job->job_id);
assert(job->daemon_id);

mx_asprintf_forever(&host_id, "%u", job->daemon_id);
char *host_id = mx_asprintf_forever("%u", job->daemon_id);

char *query =
"UPDATE"
Expand Down Expand Up @@ -655,7 +654,7 @@ int mxq_job_set_tmpfilenames(struct mxq_group *g, struct mxq_job *j)

dir = mx_dirname_forever(j->job_stdout);

mx_asprintf_forever(&j->tmp_stdout, "%s/mxq.%u.%lu.%lu.%s.%s.%d.stdout.tmp",
j->tmp_stdout = mx_asprintf_forever("%s/mxq.%u.%lu.%lu.%s.%s.%d.stdout.tmp",
dir, g->user_uid, g->group_id, j->job_id, j->host_hostname,
j->daemon_name, j->host_pid);
}
Expand All @@ -669,7 +668,7 @@ int mxq_job_set_tmpfilenames(struct mxq_group *g, struct mxq_job *j)
}
dir = mx_dirname_forever(j->job_stderr);

mx_asprintf_forever(&j->tmp_stderr, "%s/mxq.%u.%lu.%lu.%s.%s.%d.stderr.tmp",
j->tmp_stderr = mx_asprintf_forever("%s/mxq.%u.%lu.%lu.%s.%s.%d.stderr.tmp",
dir, g->user_uid, g->group_id, j->job_id, j->host_hostname,
j->daemon_name, j->host_pid);
}
Expand Down
36 changes: 14 additions & 22 deletions mxqd.c
Expand Up @@ -666,7 +666,7 @@ static int server_init(struct mxq_server *server, int argc, char *argv[])
return -EX_UNAVAILABLE;
}

mx_asprintf_forever(&server->finished_jobsdir,"%s/%s",MXQ_FINISHED_JOBSDIR,server->daemon_name);
server->finished_jobsdir = mx_asprintf_forever("%s/%s", MXQ_FINISHED_JOBSDIR, server->daemon_name);
res=mx_mkdir_p(server->finished_jobsdir,0700);
if (res<0) {
mx_log_err("MAIN: mkdir %s failed: %m. Exiting.",MXQ_FINISHED_JOBSDIR);
Expand Down Expand Up @@ -746,7 +746,7 @@ static int server_init(struct mxq_server *server, int argc, char *argv[])
server->starttime = pps->starttime;
mx_proc_pid_stat_free_content(pps);

mx_asprintf_forever(&server->host_id, "%s-%llx-%x", server->boot_id, server->starttime, getpid());
server->host_id = mx_asprintf_forever("%s-%llx-%x", server->boot_id, server->starttime, getpid());
mx_setenv_forever("MXQ_HOSTID", server->host_id);

server->slots = arg_threads_total;
Expand Down Expand Up @@ -895,17 +895,14 @@ static int init_child_process(struct mxq_group_list *glist, struct mxq_job *job)
if (group->job_tmpdir_size == 0) {
mx_setenv_forever("TMPDIR", server->initial_tmpdir);
} else {
char *mxq_job_tmpdir;
mx_asprintf_forever(&mxq_job_tmpdir, "%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job->job_id);
char *mxq_job_tmpdir = mx_asprintf_forever("%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job->job_id);
mx_setenv_forever("MXQ_JOB_TMPDIR", mxq_job_tmpdir);
mx_setenv_forever("TMPDIR", mxq_job_tmpdir);
free(mxq_job_tmpdir);
}
if (group->job_gpu) {
char *pid;
char *uid;
mx_asprintf_forever(&pid, "%d", job->host_pid);
mx_asprintf_forever(&uid, "%u", group->user_uid);
char *pid = mx_asprintf_forever("%d", job->host_pid);
char *uid = mx_asprintf_forever("%u", group->user_uid);
char *gpu_uuid = mx_call_external(gpu_setup_script, "job-init", pid, uid, NULL);
if (!gpu_uuid) {
mx_log_err("gpu-setup job-init: %m");
Expand Down Expand Up @@ -1231,8 +1228,8 @@ static int reaper_process(struct mxq_server *server,struct mxq_group_list *glist
return(res);
}

mx_asprintf_forever(&finished_job_filename, "%s/%lu.stat", server->finished_jobsdir, job->job_id);
mx_asprintf_forever(&finished_job_tmpfilename, "%s.tmp", finished_job_filename);
finished_job_filename = mx_asprintf_forever("%s/%lu.stat", server->finished_jobsdir, job->job_id);
finished_job_tmpfilename = mx_asprintf_forever("%s.tmp", finished_job_filename);

out=fopen(finished_job_tmpfilename,"w");
if (!out) {
Expand Down Expand Up @@ -1312,9 +1309,9 @@ static unsigned long start_job(struct mxq_group_list *glist)
char *envp[4];
argv[0] = create_job_tmpdir_script,
argv[1] = NULL;
mx_asprintf_forever(&envp[0], "MXQ_JOBID=%lu", job->job_id);
mx_asprintf_forever(&envp[1], "MXQ_SIZE=%u", group->job_tmpdir_size);
mx_asprintf_forever(&envp[2], "MXQ_UID=%d", group->user_uid);
envp[0] = mx_asprintf_forever("MXQ_JOBID=%lu", job->job_id);
envp[1] = mx_asprintf_forever("MXQ_SIZE=%u", group->job_tmpdir_size);
envp[2] = mx_asprintf_forever("MXQ_UID=%d", group->user_uid);
envp[3] = NULL;
execve(create_job_tmpdir_script,argv,envp);
mx_log_fatal("exec %s : %m",create_job_tmpdir_script);
Expand Down Expand Up @@ -2022,9 +2019,7 @@ static void rename_outfiles(struct mxq_server *server, struct mxq_group *group,
}

static char *job_tmpdir_path(unsigned long job_id) {
char *pathname;
mx_asprintf_forever(&pathname, "%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job_id);
return pathname;
return mx_asprintf_forever("%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job_id);
}

static int unmount_and_remove(char *pathname) {
Expand All @@ -2050,8 +2045,7 @@ static void unmount_job_tmpdir(unsigned long job_id) {

static void release_gpu(struct mxq_server *server, struct mxq_group *group, struct mxq_job *job) {
if (group->job_gpu) {
char *pid;
mx_asprintf_forever(&pid, "%d", job->host_pid);
char *pid = mx_asprintf_forever("%d", job->host_pid);
char *gpu_uuid = mx_call_external(gpu_setup_script, "job-release", pid, NULL);
free(pid);
if (!gpu_uuid) {
Expand Down Expand Up @@ -2111,9 +2105,7 @@ static int job_is_lost(struct mxq_server *server,struct mxq_group *group, struct

static char *fspool_get_filename (struct mxq_server *server,long unsigned int job_id)
{
char *fspool_filename;
mx_asprintf_forever(&fspool_filename,"%s/%lu.stat",server->finished_jobsdir,job_id);
return fspool_filename;
return mx_asprintf_forever("%s/%lu.stat", server->finished_jobsdir, job_id);
}

static int fspool_process_file(struct mxq_server *server,char *filename, uint64_t job_id) {
Expand Down Expand Up @@ -2244,7 +2236,7 @@ static int fspool_scan(struct mxq_server *server) {
}

for (i=0;i<entries;i++) {
mx_asprintf_forever(&filename,"%s/%s",server->finished_jobsdir,namelist[i]->d_name);
filename = mx_asprintf_forever("%s/%s", server->finished_jobsdir, namelist[i]->d_name);
if (fspool_is_valid_name_parse(namelist[i]->d_name,&job_id)) {
res=fspool_process_file(server,filename,job_id);
if (res>0) {
Expand Down

0 comments on commit 421dc0c

Please sign in to comment.