From c7642dca5f4bc58329341fa40102027ff422be71 Mon Sep 17 00:00:00 2001 From: Kevin Tang Date: Fri, 22 Sep 2017 17:28:58 -0700 Subject: locAPIRemoveGeofences now notify the result inmediately locAPIRemoveGeofences is no longer waiting for the request response, instead it will always notify his callbacks with LOCATION_ERROR_SUCCESS if the provided id is found, or LOCATION_ERROR_ID_UNKNOWN if not. Change-Id: I602ad43bee894e85fde1e80210e6477b628e4a39 CRs-fixed: 2099450 --- location/LocationAPIClientBase.cpp | 44 +++++++++++--------------------------- 1 file changed, 12 insertions(+), 32 deletions(-) (limited to 'location/LocationAPIClientBase.cpp') diff --git a/location/LocationAPIClientBase.cpp b/location/LocationAPIClientBase.cpp index 070c585..4aa1ccb 100644 --- a/location/LocationAPIClientBase.cpp +++ b/location/LocationAPIClientBase.cpp @@ -613,12 +613,22 @@ void LocationAPIClientBase::locAPIRemoveGeofences(size_t count, uint32_t* ids) if (mRequestQueues[REQUEST_GEOFENCE].getSession() == GEOFENCE_SESSION_ID) { size_t j = 0; + uint32_t id_cb; + LocationError err; for (size_t i = 0; i < count; i++) { sessions[j] = mGeofenceBiDict.getSession(ids[i]); + id_cb = ids[i]; if (sessions[j] > 0) { + mGeofenceBiDict.rmBySession(sessions[j]); + err = LOCATION_ERROR_SUCCESS; + onRemoveGeofencesCb(1, &err, &id_cb); j++; + } else { + err = LOCATION_ERROR_ID_UNKNOWN; + onRemoveGeofencesCb(1, &err, &id_cb); } } + if (j > 0) { mRequestQueues[REQUEST_GEOFENCE].push(new RemoveGeofencesRequest(*this)); mLocationAPI->removeGeofences(j, sessions); @@ -743,38 +753,8 @@ void LocationAPIClientBase::locAPIResumeGeofences( void LocationAPIClientBase::locAPIRemoveAllGeofences() { - pthread_mutex_lock(&mMutex); - if (mLocationAPI) { - std::vector sessionsVec = mGeofenceBiDict.getAllSessions(); - size_t count = sessionsVec.size(); - uint32_t* sessions = (uint32_t*)malloc(sizeof(uint32_t) * count); - if (sessions == NULL) { - LOC_LOGE("%s:%d] Failed to allocate %zu bytes !", - __FUNCTION__, __LINE__, sizeof(uint32_t) * count); - pthread_mutex_unlock(&mMutex); - return; - } - - if (mRequestQueues[REQUEST_GEOFENCE].getSession() == GEOFENCE_SESSION_ID) { - size_t j = 0; - for (size_t i = 0; i < count; i++) { - sessions[j] = sessionsVec[i]; - if (sessions[j] > 0) { - j++; - } - } - if (j > 0) { - mRequestQueues[REQUEST_GEOFENCE].push(new RemoveGeofencesRequest(*this)); - mLocationAPI->removeGeofences(j, sessions); - } - } else { - LOC_LOGE("%s:%d] invalid session: %d.", __FUNCTION__, __LINE__, - mRequestQueues[REQUEST_GEOFENCE].getSession()); - } - - free(sessions); - } - pthread_mutex_unlock(&mMutex); + std::vector sessionsVec = mGeofenceBiDict.getAllSessions(); + locAPIRemoveGeofences(sessionsVec.size(), &sessionsVec[0]); } void LocationAPIClientBase::locAPIGnssNiResponse(uint32_t id, GnssNiResponse response) -- cgit v1.2.3