fixing the SSR recovery race condition
There is a race condition where when startFix is called right at the time when modem or griffon subsystem is down, GPS HAL doesn't get the correct error code, and therefore the right handling. Mapped ENGINE_DOWN to ENGINE_OFFLINE, as they are the same; and modified loc_eng_start_handler to update the state upon the right error code. There is a one problem though. General failure is also handled as SSR. This is because of an unhandled race condition in the kernel, so the error code returned and propagated is not deterministic enough for us to tell if this is SSR. Until that fix is in place, we might have to treat general failure as SSR although the side effect should be none. Only semantically incorrect. Change-Id: If93823f08428275da171bb22d73a06e38365585b CR-Fixed: 692085
This commit is contained in:
parent
c28cb324e7
commit
8977164eee
2 changed files with 6 additions and 3 deletions
|
@ -306,8 +306,9 @@ enum loc_api_adapter_err {
|
|||
LOC_API_ADAPTER_ERR_TIMEOUT = 8,
|
||||
LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT = 9,
|
||||
|
||||
LOC_API_ADAPTER_ERR_ENGINE_DOWN = 100,
|
||||
LOC_API_ADAPTER_ERR_FAILURE,
|
||||
/* equating engine down to phone offline, as they are the same errror */
|
||||
LOC_API_ADAPTER_ERR_ENGINE_DOWN = LOC_API_ADAPTER_ERR_PHONE_OFFLINE,
|
||||
LOC_API_ADAPTER_ERR_FAILURE = 101,
|
||||
LOC_API_ADAPTER_ERR_UNKNOWN
|
||||
};
|
||||
|
||||
|
|
|
@ -1718,7 +1718,9 @@ static int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data)
|
|||
ret_val = loc_eng_data.adapter->startFix();
|
||||
|
||||
if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS ||
|
||||
ret_val == LOC_API_ADAPTER_ERR_ENGINE_DOWN)
|
||||
ret_val == LOC_API_ADAPTER_ERR_ENGINE_DOWN ||
|
||||
ret_val == LOC_API_ADAPTER_ERR_PHONE_OFFLINE ||
|
||||
ret_val == LOC_API_ADAPTER_ERR_GENERAL_FAILURE)
|
||||
{
|
||||
loc_eng_data.adapter->setInSession(TRUE);
|
||||
loc_inform_gps_status(loc_eng_data, GPS_STATUS_SESSION_BEGIN);
|
||||
|
|
Loading…
Reference in a new issue