diff --git a/frameworks/ability_lite/include/ability_scheduler.h b/frameworks/ability_lite/include/ability_scheduler.h index 7cd4be6887e25ffda11cdfb65fa6bc1d5554e612..2fa87af32e02eb67f926cb8459af2c41b560fbcd 100755 --- a/frameworks/ability_lite/include/ability_scheduler.h +++ b/frameworks/ability_lite/include/ability_scheduler.h @@ -25,6 +25,7 @@ #include "want.h" namespace OHOS { +const int32_t DEFAULT_IPC_SIZE = 200; class Scheduler { public: virtual ~Scheduler() = default; diff --git a/frameworks/ability_lite/src/ability_event_handler.cpp b/frameworks/ability_lite/src/ability_event_handler.cpp index 87b8477f499880c4a52bfb5ad6c32f72ba7549ff..ae548a4a7af775acf5b2c1b26523a1a39c4abb30 100644 --- a/frameworks/ability_lite/src/ability_event_handler.cpp +++ b/frameworks/ability_lite/src/ability_event_handler.cpp @@ -37,8 +37,8 @@ AbilityEventHandler::~AbilityEventHandler() void AbilityEventHandler::Run() { + (void) pthread_mutex_lock(&queueMutex_); while (!quit_) { - (void) pthread_mutex_lock(&queueMutex_); if (taskQueue_.empty()) { (void) pthread_cond_wait(&pthreadCond_, &queueMutex_); } @@ -46,16 +46,18 @@ void AbilityEventHandler::Run() taskQueue_.pop(); (void) pthread_mutex_unlock(&queueMutex_); task(); + (void) pthread_mutex_lock(&queueMutex_); } + (void) pthread_mutex_unlock(&queueMutex_); } void AbilityEventHandler::PostTask(const Task& task) { (void) pthread_mutex_lock(&queueMutex_); taskQueue_.push(task); - (void) pthread_mutex_unlock(&queueMutex_); (void) pthread_cond_signal(&pthreadCond_); + (void) pthread_mutex_unlock(&queueMutex_); } void AbilityEventHandler::PostQuit() diff --git a/frameworks/ability_lite/src/ability_scheduler.cpp b/frameworks/ability_lite/src/ability_scheduler.cpp index 536ccfda096c0d5ddc27775b77f05bf8be14e82e..c273e87f5deaf85d2195f1d2f4eafb0b8d5e1eca 100644 --- a/frameworks/ability_lite/src/ability_scheduler.cpp +++ b/frameworks/ability_lite/src/ability_scheduler.cpp @@ -77,6 +77,11 @@ int32_t AbilityScheduler::AmsCallback(const IpcContext* context, void *ipcMsg, I } } scheduler->PerformAppInit(appInfo); + IpcIo reply; + uint8_t tmpData[DEFAULT_IPC_SIZE]; + IpcIoInit(&reply, tmpData, DEFAULT_IPC_SIZE, 1); + IpcIoPushInt32(&reply, 0); + SendReply(nullptr, ipcMsg, &reply); break; } case SCHEDULER_ABILITY_LIFECYCLE: { diff --git a/services/abilitymgr_lite/src/client/ability_thread_client.cpp b/services/abilitymgr_lite/src/client/ability_thread_client.cpp index 4d01aaa3c4a71d46dd630bc529480134b6c42361..25143f739bd4cfc9d5eefd3ea120122f57ee3ac1 100644 --- a/services/abilitymgr_lite/src/client/ability_thread_client.cpp +++ b/services/abilitymgr_lite/src/client/ability_thread_client.cpp @@ -127,9 +127,10 @@ AbilityMsStatus AbilityThreadClient::AppInitTransaction(const BundleInfo &bundle IpcIoPushString(&req, bundleInfo.moduleInfos[i].moduleName); } } + IpcIo reply; uintptr_t ptr; if (Transact(nullptr, svcIdentity_, SCHEDULER_APP_INIT, &req, - nullptr, LITEIPC_FLAG_DEFAULT, &ptr) != LITEIPC_OK) { + &reply, LITEIPC_FLAG_DEFAULT, &ptr) != LITEIPC_OK) { return AbilityMsStatus::AppTransanctStatus("app init ipc error"); } FreeBuffer(nullptr, reinterpret_cast(ptr));