422 |
|
if (fname == NULL || !*fname) |
423 |
|
return NULL; |
424 |
|
SDerrorDetail[0] = '\0'; |
425 |
+ |
/* PLACE MUTEX LOCK HERE FOR THREAD-SAFE */ |
426 |
|
if ((sd = SDgetCache(fname)) == NULL) { |
427 |
|
SDreportError(SDEmemory, stderr); |
428 |
|
return NULL; |
430 |
|
if (!SDisLoaded(sd) && (ec = SDloadFile(sd, fname))) { |
431 |
|
SDreportError(ec, stderr); |
432 |
|
SDfreeCache(sd); |
433 |
< |
return NULL; |
433 |
> |
sd = NULL; |
434 |
|
} |
435 |
+ |
/* END MUTEX LOCK */ |
436 |
|
return sd; |
437 |
|
} |
438 |
|
|
597 |
|
rdf = sd->rb; |
598 |
|
tdf = (sd->tb != NULL) ? sd->tb : sd->tf; |
599 |
|
} |
600 |
< |
if (v2 != NULL) /* bidirectional? */ |
600 |
> |
if (v2 != NULL) { /* bidirectional? */ |
601 |
|
if (v1[2] > 0 ^ v2[2] > 0) |
602 |
|
rdf = NULL; |
603 |
|
else |
604 |
|
tdf = NULL; |
605 |
+ |
} |
606 |
|
ec = SDEdata; /* run through components */ |
607 |
|
for (i = (rdf==NULL) ? 0 : rdf->ncomp; i--; ) { |
608 |
|
ec = (*rdf->comp[i].func->queryProjSA)(projSA, v1, v2, |