fix: 进程退出前自己回收vmspace中的所有region
背景: 父进程fork一个子进程,调用waitpid等待子进程结束。 子进程dlopen一个文件a.so,并退出。当守护进程正在 1核回收子进程资源时,父进程在0核运行从waitpid返 回后,同时remove a.so概率失败。 Close #I4CKQC Signed-off-by: zhushengle <zhushengle@huawei.com> Change-Id: Ie7940e7c931ced10ee357cf9aa7c64355effed49
This commit is contained in:
@@ -342,6 +342,12 @@ LITE_OS_SEC_TEXT VOID OsProcessResourcesToFree(LosProcessCB *processCB)
|
||||
OsCurrProcessGet()->processID, processCB->processID);
|
||||
}
|
||||
|
||||
#ifdef LOSCFG_KERNEL_VM
|
||||
if (OsProcessIsUserMode(processCB)) {
|
||||
(VOID)OsVmSpaceRegionFree(processCB->vmSpace);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LOSCFG_FS_VFS
|
||||
if (OsProcessIsUserMode(processCB)) {
|
||||
delete_files(processCB->files);
|
||||
@@ -546,11 +552,11 @@ LITE_OS_SEC_TEXT VOID OsProcessCBRecycleToFree(VOID)
|
||||
/* Clear the bottom 4 bits of process status */
|
||||
OsInsertPCBToFreeList(processCB);
|
||||
}
|
||||
SCHEDULER_UNLOCK(intSave);
|
||||
#ifdef LOSCFG_KERNEL_VM
|
||||
SCHEDULER_UNLOCK(intSave);
|
||||
(VOID)LOS_VmSpaceFree(space);
|
||||
#endif
|
||||
SCHEDULER_LOCK(intSave);
|
||||
#endif
|
||||
}
|
||||
|
||||
SCHEDULER_UNLOCK(intSave);
|
||||
|
||||
Reference in New Issue
Block a user