diff options
author | iAndrew5 <abyzhynar@luxoft.com> | 2015-12-17 13:11:06 +0200 |
---|---|---|
committer | iAndrew5 <abyzhynar@luxoft.com> | 2015-12-17 15:13:11 +0200 |
commit | 20bec5aeb327497d54e72db407fc42f4e575559b (patch) | |
tree | fe37d48ac1ba460dc9f5cac6f2626990f49899f7 | |
parent | 793bd165214cf4d6283cd72a2ba04dad076be9de (diff) | |
download | smartdevicelink-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.cc | 11 |
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_); |