diff --git a/src/server/simpleslave.c b/src/server/simpleslave.c --- a/src/server/simpleslave.c +++ b/src/server/simpleslave.c @@ -112,6 +112,7 @@ int main(int argc, char *argv[]) char *urltoOutput; /* Full URL where output is posted */ char *pathtoOutput; /* Full path to the output (rendered) file */ + char *pathtoOutdir; /* Full path to output directory */ char *pathtoJob; /* Path to job data folder */ char *pathtoJobfile; /* Full path to the job's main file */ @@ -139,7 +140,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "Preparing to render frame %d in job %d\n", framenum, jobnum); - prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput); + prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput, &pathtoOutdir); // free(outputExt); int dlret = downloadTar(urltoTar, pathtoTar); if(dlret == 0) @@ -151,13 +152,16 @@ int main(int argc, char *argv[]) unpackJob(pathtoJob, pathtoTar); - /* Execute blender */ - fprintf(stderr,"Executing blender on file %s", pathtoJobfile); + /* ignore return because directory may exist already */ + fprintf(stderr,"Creating output directory %s\n", pathtoOutdir); + mkdir(pathtoOutdir, 0700); + fprintf(stderr,"Marking frame started on server... "); + _web_startframe(slavekey, password, jobnum, framenum); - /* ignore return because directory may exist already */ - mkdir(pathtoOutput, 0700); + /* Execute blender */ + fprintf(stderr,"Executing blender on file %s\n", pathtoJobfile); + fprintf(stderr,"Directing output to file %s\n", pathtoOutput); - _web_startframe(slavekey, password, jobnum, framenum); if(exec_blender(pathtoJobfile, pathtoOutput, framenum)) { fprintf(stderr,"Error running Blender. Check your installation and/or your PATH.\n"); @@ -165,15 +169,23 @@ int main(int argc, char *argv[]) } free(pathtoJobfile); - /* Post-execution */ - fprintf(stderr, "Finished frame %d in job %d, uploading...\n", framenum, jobnum); - uploadOutput(pathtoOutput, urltoOutput, jobnum, framenum, slavekey); // @TODO: Handle return value + struct stat buffer; + int fstatus = stat(pathtoOutput, &buffer); + if(fstatus == -1){ + fprintf(stderr,"Frame was not rendered correctly! Scene may not have camera, or your blender installation is not working.\n"); + return 1; + } + else{ + /* Post-execution */ + fprintf(stderr, "Finished frame %d in job %d, uploading...\n", framenum, jobnum); + uploadOutput(pathtoOutput, urltoOutput, jobnum, framenum, slavekey); // @TODO: Handle return value - free(urltoOutput); - free(pathtoOutput); + free(urltoOutput); + free(pathtoOutput); - // Tell the server that rendering and upload are complete - _web_finishframe(slavekey, password, jobnum, framenum); + // Tell the server that rendering and upload are complete + _web_finishframe(slavekey, password, jobnum, framenum); + } } else fprintf(stderr,"Nothing to do. Idling...\n");