diff --git a/projects/clr/opencl/api/opencl/khronos/icd/icd.c b/projects/clr/opencl/api/opencl/khronos/icd/icd.c index fdeff798fc..fbb3120363 100644 --- a/projects/clr/opencl/api/opencl/khronos/icd/icd.c +++ b/projects/clr/opencl/api/opencl/khronos/icd/icd.c @@ -187,12 +187,23 @@ void khrIcdVendorAdd(const char *libraryName) // add this vendor to the list of vendors at the tail { KHRicdVendor **prevNextPointer = NULL; - for (prevNextPointer = &khrIcdVendors; *prevNextPointer; prevNextPointer = &( (*prevNextPointer)->next) ); - *prevNextPointer = vendor; + for (prevNextPointer = &khrIcdVendors; *prevNextPointer; prevNextPointer = &( (*prevNextPointer)->next) ) + { + if (!strcmp(vendor->suffix, (*prevNextPointer)->suffix)) { + free(suffix); + free(vendor); + vendor = NULL; + KHR_ICD_TRACE("already loaded vendor with suffix %s, nothing to do here\n", suffix); + break; + } + } + if (vendor) + { + *prevNextPointer = vendor; + KHR_ICD_TRACE("successfully added vendor %s with suffix %s\n", libraryName, suffix); + } } - KHR_ICD_TRACE("successfully added vendor %s with suffix %s\n", libraryName, suffix); - } Done: