--- ray/src/common/bsdf.c 2015/02/08 22:14:50 2.50 +++ ray/src/common/bsdf.c 2017/02/02 04:46:38 2.53 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: bsdf.c,v 2.50 2015/02/08 22:14:50 greg Exp $"; +static const char RCSid[] = "$Id: bsdf.c,v 2.53 2017/02/02 04:46:38 greg Exp $"; #endif /* * bsdf.c @@ -422,6 +422,7 @@ SDcacheFile(const char *fname) if (fname == NULL || !*fname) return NULL; SDerrorDetail[0] = '\0'; + /* PLACE MUTEX LOCK HERE FOR THREAD-SAFE */ if ((sd = SDgetCache(fname)) == NULL) { SDreportError(SDEmemory, stderr); return NULL; @@ -429,8 +430,9 @@ SDcacheFile(const char *fname) if (!SDisLoaded(sd) && (ec = SDloadFile(sd, fname))) { SDreportError(ec, stderr); SDfreeCache(sd); - return NULL; + sd = NULL; } + /* END MUTEX LOCK */ return sd; } @@ -494,7 +496,7 @@ SDsampComponent(SDValue *sv, FVECT ioVec, double randX sv->cieY = cd->cTotal; if (sv->cieY <= 1e-6) { /* nothing to sample? */ sv->spec = c_dfcolor; - memset(ioVec, 0, 3*sizeof(double)); + memset(ioVec, 0, sizeof(FVECT)); return SDEnone; } /* compute sample direction */ @@ -595,11 +597,12 @@ SDsizeBSDF(double *projSA, const FVECT v1, const RREAL rdf = sd->rb; tdf = (sd->tb != NULL) ? sd->tb : sd->tf; } - if (v2 != NULL) /* bidirectional? */ + if (v2 != NULL) { /* bidirectional? */ if (v1[2] > 0 ^ v2[2] > 0) rdf = NULL; else tdf = NULL; + } ec = SDEdata; /* run through components */ for (i = (rdf==NULL) ? 0 : rdf->ncomp; i--; ) { ec = (*rdf->comp[i].func->queryProjSA)(projSA, v1, v2, @@ -767,7 +770,7 @@ SDsampBSDF(SDValue *sv, FVECT ioVec, double randX, int } if (sv->cieY <= 1e-6) { /* anything to sample? */ sv->cieY = .0; - memset(ioVec, 0, 3*sizeof(double)); + memset(ioVec, 0, sizeof(FVECT)); return SDEnone; } /* scale random variable */