summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriAndrew5 <abyzhynar@luxoft.com>2015-12-17 13:11:06 +0200
committeriAndrew5 <abyzhynar@luxoft.com>2015-12-17 15:13:11 +0200
commit20bec5aeb327497d54e72db407fc42f4e575559b (patch)
treefe37d48ac1ba460dc9f5cac6f2626990f49899f7
parent793bd165214cf4d6283cd72a2ba04dad076be9de (diff)
downloadsmartdevicelink-20bec5aeb327497d54e72db407fc42f4e575559b.tar.gz
hotfix/Data_race_in_ThreadedSocketConnection_Transmit
Added one more protection with mutex for usage of variable "frames_to_send_" Relates: APPLINK-19408
-rw-r--r--src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
index eddf8b27c..cc476c745 100644
--- a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
+++ b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
@@ -190,8 +190,16 @@ void ThreadedSocketConnection::Transmit() {
const nfds_t kPollFdsSize = 2;
pollfd poll_fds[kPollFdsSize];
poll_fds[0].fd = socket_;
+
+ bool is_queue_empty = true;
+ {
+ // Check Frames queue is empty or not
+ sync_primitives::AutoLock auto_lock(frames_to_send_mutex_);
+ is_queue_empty = frames_to_send_.empty();
+ }
+
poll_fds[0].events = POLLIN | POLLPRI
- | (frames_to_send_.empty() ? 0 : POLLOUT);
+ | (is_queue_empty ? 0 : POLLOUT);
poll_fds[1].fd = read_fd_;
poll_fds[1].events = POLLIN | POLLPRI;
@@ -232,7 +240,6 @@ void ThreadedSocketConnection::Transmit() {
return;
}
- bool is_queue_empty = true;
{
// Check Frames queue is empty or not
sync_primitives::AutoLock auto_lock(frames_to_send_mutex_);