Commit: 93d711ce552959a733b27d6fce4ee30e4a2e9ec8 Author: Sergey Sharybin Date: Wed Oct 11 12:48:19 2017 +0500 Branches: blender-v2.79a-release https://developer.blender.org/rB93d711ce552959a733b27d6fce4ee30e4a2e9ec8
Cycles: Fix possible race condition when initializing devices list =================================================================== M intern/cycles/device/device.cpp M intern/cycles/device/device.h =================================================================== diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp index 0674d860e97..05e65d5f64d 100644 --- a/intern/cycles/device/device.cpp +++ b/intern/cycles/device/device.cpp @@ -34,6 +34,7 @@ CCL_NAMESPACE_BEGIN bool Device::need_types_update = true; bool Device::need_devices_update = true; +thread_mutex Device::device_mutex; vector<DeviceType> Device::types; vector<DeviceInfo> Device::devices; @@ -296,54 +297,49 @@ string Device::string_from_type(DeviceType type) vector<DeviceType>& Device::available_types() { + thread_scoped_lock lock(device_mutex); if(need_types_update) { types.clear(); types.push_back(DEVICE_CPU); - #ifdef WITH_CUDA - if(device_cuda_init()) + if(device_cuda_init()) { types.push_back(DEVICE_CUDA); + } #endif - #ifdef WITH_OPENCL - if(device_opencl_init()) + if(device_opencl_init()) { types.push_back(DEVICE_OPENCL); + } #endif - #ifdef WITH_NETWORK types.push_back(DEVICE_NETWORK); #endif - need_types_update = false; } - return types; } vector<DeviceInfo>& Device::available_devices() { + thread_scoped_lock lock(device_mutex); if(need_devices_update) { devices.clear(); - #ifdef WITH_OPENCL - if(device_opencl_init()) + if(device_opencl_init()) { device_opencl_info(devices); + } #endif - #ifdef WITH_CUDA - if(device_cuda_init()) + if(device_cuda_init()) { device_cuda_info(devices); + } #endif - device_cpu_info(devices); - #ifdef WITH_NETWORK device_network_info(devices); #endif - need_devices_update = false; } - return devices; } diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index b3b693c630c..a70f6923803 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -351,6 +351,7 @@ public: private: /* Indicted whether device types and devices lists were initialized. */ static bool need_types_update, need_devices_update; + static thread_mutex device_mutex; static vector<DeviceType> types; static vector<DeviceInfo> devices; }; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs