From e9d40481686a5d1ebc07dbc97a1144cfb69273dc Mon Sep 17 00:00:00 2001 From: Satheesh Jayakumar Date: Fri, 27 Sep 2013 15:14:44 -0700 Subject: [PATCH] Fixes loc_ext and AFW concurrency issues Part of changes so that loc_ext stack gets its own QMI_LOC client. CRs-Fixed: 565281 Change-Id: I7dda3cd8e90e699f11391ea621a785f775978e41 --- loc_api/libloc_api_50001/LocEngAdapter.cpp | 11 +++++++---- loc_api/libloc_api_50001/LocEngAdapter.h | 2 +- loc_api/libloc_api_50001/loc.cpp | 2 +- loc_api/libloc_api_50001/loc_eng.cpp | 5 ++--- loc_api/libloc_api_50001/loc_eng.h | 3 ++- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/loc_api/libloc_api_50001/LocEngAdapter.cpp b/loc_api/libloc_api_50001/LocEngAdapter.cpp index 8b3dbd49..1aef99d3 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.cpp +++ b/loc_api/libloc_api_50001/LocEngAdapter.cpp @@ -67,12 +67,15 @@ void LocInternalAdapter::setUlpProxy(UlpProxyBase* ulp) { } LocEngAdapter::LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask, - void* owner, + void* owner, ContextBase* context, MsgTask::tCreate tCreator) : LocAdapterBase(mask, - LocDualContext::getLocFgContext( - tCreator, - LocDualContext::mLocationHalName)), + //Get the AFW context if VzW context has not already been intialized in + //loc_ext + context == NULL? + LocDualContext::getLocFgContext(tCreator, + LocDualContext::mLocationHalName) + :context), mOwner(owner), mInternalAdapter(new LocInternalAdapter(this)), mUlp(new UlpProxyBase()), mNavigating(false), mAgpsEnabled(false) diff --git a/loc_api/libloc_api_50001/LocEngAdapter.h b/loc_api/libloc_api_50001/LocEngAdapter.h index e7432353..a9a50e68 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.h +++ b/loc_api/libloc_api_50001/LocEngAdapter.h @@ -78,7 +78,7 @@ public: bool mAgpsEnabled; LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask, - void* owner, + void* owner,ContextBase* context, MsgTask::tCreate tCreator); virtual ~LocEngAdapter(); diff --git a/loc_api/libloc_api_50001/loc.cpp b/loc_api/libloc_api_50001/loc.cpp index 9ead486b..7cedb577 100644 --- a/loc_api/libloc_api_50001/loc.cpp +++ b/loc_api/libloc_api_50001/loc.cpp @@ -274,7 +274,7 @@ static int loc_init(GpsCallbacks* callbacks) gps_loc_cb = callbacks->location_cb; gps_sv_cb = callbacks->sv_status_cb; - retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event); + retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, NULL); loc_afw_data.adapter->requestUlp(gps_conf.CAPABILITIES); loc_afw_data.adapter->mAgpsEnabled = !loc_afw_data.adapter->hasAgpsExt(); diff --git a/loc_api/libloc_api_50001/loc_eng.cpp b/loc_api/libloc_api_50001/loc_eng.cpp index 1c2bac5a..8079ada5 100644 --- a/loc_api/libloc_api_50001/loc_eng.cpp +++ b/loc_api/libloc_api_50001/loc_eng.cpp @@ -1455,7 +1455,7 @@ SIDE EFFECTS ===========================================================================*/ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, - LOC_API_ADAPTER_EVENT_MASK_T event) + LOC_API_ADAPTER_EVENT_MASK_T event, ContextBase* context) { int ret_val = 0; @@ -1507,12 +1507,11 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, } loc_eng_data.adapter = - new LocEngAdapter(event, &loc_eng_data, + new LocEngAdapter(event, &loc_eng_data, context, (MsgTask::tCreate)callbacks->create_thread_cb); LOC_LOGD("loc_eng_init created client, id = %p\n", loc_eng_data.adapter); - loc_eng_data.adapter->sendMsg(new LocEngInit(&loc_eng_data)); EXIT_LOG(%d, ret_val); diff --git a/loc_api/libloc_api_50001/loc_eng.h b/loc_api/libloc_api_50001/loc_eng.h index 0c552b55..2dfd50f7 100644 --- a/loc_api/libloc_api_50001/loc_eng.h +++ b/loc_api/libloc_api_50001/loc_eng.h @@ -178,7 +178,8 @@ extern loc_sap_cfg_s_type sap_conf; int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, - LOC_API_ADAPTER_EVENT_MASK_T event); + LOC_API_ADAPTER_EVENT_MASK_T event, + ContextBase* context); int loc_eng_start(loc_eng_data_s_type &loc_eng_data); int loc_eng_stop(loc_eng_data_s_type &loc_eng_data); void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data);