Skip to content

Commit

Permalink
Merge pull request #1569 from LitvinenkoIra/fix/crushes_with_DCHECK_s…
Browse files Browse the repository at this point in the history
…et_sizes_equal

Make Size() function thread safe to avoid core dump
  • Loading branch information
ShobhitAd authored Oct 11, 2018
2 parents 8da2a76 + 5e5c429 commit c969797
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,7 @@ class RequestInfoSet {
TimeSortedRequestInfoSet time_sorted_pending_requests_;
HashSortedRequestInfoSet hash_sorted_pending_requests_;

// the lock caled this_lock_, since the class represent collection by itself.
sync_primitives::Lock this_lock_;
sync_primitives::Lock pending_requests_lock_;
};

/**
Expand Down
13 changes: 7 additions & 6 deletions src/components/application_manager/src/request_info.cc
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ bool RequestInfoSet::Add(RequestInfoPtr request_info) {
logger_,
"Add request app_id = " << request_info->app_id()
<< "; corr_id = " << request_info->requestId());
sync_primitives::AutoLock lock(this_lock_);
sync_primitives::AutoLock lock(pending_requests_lock_);
CheckSetSizes();
const std::pair<HashSortedRequestInfoSet::iterator, bool>& insert_resilt =
hash_sorted_pending_requests_.insert(request_info);
Expand Down Expand Up @@ -153,7 +153,7 @@ RequestInfoPtr RequestInfoSet::Find(const uint32_t connection_key,
std::shared_ptr<FakeRequestInfo> request_info_for_search(
new FakeRequestInfo(connection_key, correlation_id));

sync_primitives::AutoLock lock(this_lock_);
sync_primitives::AutoLock lock(pending_requests_lock_);
HashSortedRequestInfoSet::iterator it =
hash_sorted_pending_requests_.find(request_info_for_search);
if (it != hash_sorted_pending_requests_.end()) {
Expand All @@ -165,7 +165,7 @@ RequestInfoPtr RequestInfoSet::Find(const uint32_t connection_key,
RequestInfoPtr RequestInfoSet::Front() {
RequestInfoPtr result;

sync_primitives::AutoLock lock(this_lock_);
sync_primitives::AutoLock lock(pending_requests_lock_);
TimeSortedRequestInfoSet::iterator it = time_sorted_pending_requests_.begin();
if (it != time_sorted_pending_requests_.end()) {
result = *it;
Expand All @@ -175,7 +175,7 @@ RequestInfoPtr RequestInfoSet::Front() {

RequestInfoPtr RequestInfoSet::FrontWithNotNullTimeout() {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(this_lock_);
sync_primitives::AutoLock lock(pending_requests_lock_);
RequestInfoPtr result;
TimeSortedRequestInfoSet::iterator it = time_sorted_pending_requests_.begin();
while (it != time_sorted_pending_requests_.end()) {
Expand Down Expand Up @@ -219,7 +219,7 @@ bool RequestInfoSet::Erase(const RequestInfoPtr request_info) {
}

bool RequestInfoSet::RemoveRequest(const RequestInfoPtr request_info) {
sync_primitives::AutoLock lock(this_lock_);
sync_primitives::AutoLock lock(pending_requests_lock_);
return Erase(request_info);
}

Expand All @@ -228,7 +228,7 @@ uint32_t RequestInfoSet::RemoveRequests(
LOG4CXX_AUTO_TRACE(logger_);
uint32_t erased = 0;

sync_primitives::AutoLock lock(this_lock_);
sync_primitives::AutoLock lock(pending_requests_lock_);
HashSortedRequestInfoSet::iterator it =
std::find_if(hash_sorted_pending_requests_.begin(),
hash_sorted_pending_requests_.end(),
Expand Down Expand Up @@ -256,6 +256,7 @@ uint32_t RequestInfoSet::RemoveMobileRequests() {
}

const size_t RequestInfoSet::Size() {
sync_primitives::AutoLock lock(pending_requests_lock_);
CheckSetSizes();
return time_sorted_pending_requests_.size();
}
Expand Down

0 comments on commit c969797

Please sign in to comment.