diff --git a/components/rgbd-sources/src/net.cpp b/components/rgbd-sources/src/net.cpp
index 0ce3b1fa2e99396c734dc9838d161d2c8c1d5f64..39e03985407212561a702d6a8d002846ba774254 100644
--- a/components/rgbd-sources/src/net.cpp
+++ b/components/rgbd-sources/src/net.cpp
@@ -62,13 +62,17 @@ NetSource::~NetSource() {
 }
 
 void NetSource::_recv(const vector<unsigned char> &jpg, const vector<unsigned char> &d) {
-	unique_lock<shared_mutex> lk(host_->mutex());
+	cv::Mat tmp_rgb, tmp_depth;
 
 	auto start = std::chrono::high_resolution_clock::now();
-	cv::imdecode(jpg, cv::IMREAD_COLOR, &rgb_);
+	cv::imdecode(jpg, cv::IMREAD_COLOR, &tmp_rgb);
 	//Mat(rgb_.size(), CV_16UC1);
-	cv::imdecode(d, cv::IMREAD_UNCHANGED, &depth_);
-	depth_.convertTo(depth_, CV_32FC1, 1.0f/(16.0f*100.0f));
+	cv::imdecode(d, cv::IMREAD_UNCHANGED, &tmp_depth);
+
+	unique_lock<shared_mutex> lk(host_->mutex());
+	rgb_ = tmp_rgb;
+	tmp_depth.convertTo(depth_, CV_32FC1, 1.0f/(16.0f*100.0f));
+	lk.unlock();
 
 	std::chrono::duration<double> elapsed =
 		std::chrono::high_resolution_clock::now() - start;