# HG changeset patch # User Nathan Phillip Brink # Date 2010-09-13 20:22:56 # Node ID 0f9242c3fef668bf252e1585e64e9fc7227b3b59 # Parent 7d6ab92dff304f112ba51a691fd3939b401e2bca Properly allocate and manipulate the outputExt variable for simpleslave, fixes a segfault. diff --git a/src/server/simpleslave.c b/src/server/simpleslave.c --- a/src/server/simpleslave.c +++ b/src/server/simpleslave.c @@ -186,6 +186,8 @@ if(updateConf){ int benchmarkTime = 0; int renderPower = 0; + outputExt = NULL; + // @TODO: create _web function to force recalc if !isset($render_power) on server if(runBenchmark) { @@ -212,7 +214,7 @@ if(updateConf){ // request work if(DEBUG) fprintf(stderr,"Requesting work from %s...\n", hostname); - haveWork = _web_getwork(slavekey, password, &jobnum, &framenum, &xres, &yres, outputExt); + haveWork = _web_getwork(slavekey, password, &jobnum, &framenum, &xres, &yres, &outputExt); /* If we got a frame */ if(haveWork) @@ -326,10 +328,11 @@ if(updateConf){ // except for ones that couldn't be uploaded delete_jobdata(jobnum, datadir); } + + free(outputExt); } free(my_cfg); - free(outputExt); free(datadir); free(urltoTar); free(pathtoTar); diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -672,7 +672,8 @@ void _web_startframe(int slavekey, char } /** @TODO: Needs to get xres, yres, outpuext */ -int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum, int *xres, int *yres, char *outputext){ +int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum, int *xres, int *yres, char **outputext) +{ char *url; _distren_asprintf(&url,"http://distren.org/slave/act.php?mode=getwork&slavekey=%d&slavepass=%s", slavekey, slavepass); struct _web_memorystruct data = _web_getrequest(url); @@ -724,7 +725,7 @@ int _web_getwork(int slavekey, char *sla tmp = strtok (NULL, ","); if(tmp == NULL) return 0; // no work - outputext = tmp; + *outputext = strdup(tmp); if(DEBUG) fprintf(stderr,"GETWORK Debug output - Job: %d | Frame: %d | Xres: %d | Yres: %d | Outformat: %s\n", *jobnum, *framenum, *xres, *yres, outputext); diff --git a/src/server/slavefuncs.h b/src/server/slavefuncs.h --- a/src/server/slavefuncs.h +++ b/src/server/slavefuncs.h @@ -73,7 +73,7 @@ struct _web_memorystruct _web_getrequest void _web_finishframe(int slavekey, char *slavepass, int jobnum, int framenum); void _web_startframe(int slavekey, char *slavepass, int jobnum, int framenum); void _web_resetframe(int slavekey, char *slavepass, int jobnum, int framenum); -int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum, int *xres, int *yres, char *outputext); +int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum, int *xres, int *yres, char **outputext); void _web_setrenderpower(int slavekey, char *slavepass, int renderpower); int slaveBenchmark(char *datadir, int *benchmarkTime, int *renderPower);