|
|
@@ -206,11 +206,14 @@ struct _device_claim {
|
|
|
struct device_drv *bfg_claim_any(struct device_drv * const api, const char *verbose, const char * const devpath)
|
|
|
{
|
|
|
static struct _device_claim *claims = NULL;
|
|
|
+ static pthread_mutex_t claims_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
|
struct _device_claim *c;
|
|
|
|
|
|
+ mutex_lock(&claims_lock);
|
|
|
HASH_FIND_STR(claims, devpath, c);
|
|
|
if (c)
|
|
|
{
|
|
|
+ mutex_unlock(&claims_lock);
|
|
|
if (verbose && opt_debug)
|
|
|
{
|
|
|
char logbuf[LOGBUFSIZ];
|
|
|
@@ -231,12 +234,16 @@ struct device_drv *bfg_claim_any(struct device_drv * const api, const char *verb
|
|
|
}
|
|
|
|
|
|
if (!api)
|
|
|
+ {
|
|
|
+ mutex_unlock(&claims_lock);
|
|
|
return NULL;
|
|
|
+ }
|
|
|
|
|
|
c = malloc(sizeof(*c));
|
|
|
c->devpath = strdup(devpath);
|
|
|
c->drv = api;
|
|
|
HASH_ADD_KEYPTR(hh, claims, c->devpath, strlen(devpath), c);
|
|
|
+ mutex_unlock(&claims_lock);
|
|
|
return NULL;
|
|
|
}
|
|
|
|