From 42fdaffe76f2233c2fd349954f3bf34826947adf Mon Sep 17 00:00:00 2001 From: Haryslee Date: Thu, 23 Sep 2021 21:04:36 +0800 Subject: [PATCH] =?UTF-8?q?fixed=209fdb80f=20from=20https://gitee.com/hary?= =?UTF-8?q?lee/kernel=5Fliteos=5Fa/pulls/628=20fix:=20=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=E5=86=85=E5=AD=98=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haryslee 背景:父进程移除共享内存并标记SHM_SEG_REMOVE,当子进程资源回收时在 ShmFindSeg接口中判断该共享内存具有SHM_SEG_REMOVE时返回空,但是此时 seg->ds.shm_nattch不为0,不应返回空。 方案:ShmFindSeg接口中增加seg->ds.shm_nattch为0的判断。 close #I47X2Z Change-Id: I8735cd11ac237b17fa745c50313da0fd0649bb9f --- kernel/base/vm/shm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/base/vm/shm.c b/kernel/base/vm/shm.c index 035a456f..b5b4d12f 100644 --- a/kernel/base/vm/shm.c +++ b/kernel/base/vm/shm.c @@ -304,7 +304,7 @@ STATIC struct shmIDSource *ShmFindSeg(int shmid) } seg = &g_shmSegs[shmid]; - if ((seg->status & SHM_SEG_FREE) || (seg->status & SHM_SEG_REMOVE)) { + if ((seg->status & SHM_SEG_FREE) || ((seg->ds.shm_nattch == 0) && (seg->status & SHM_SEG_REMOVE))) { set_errno(EIDRM); return NULL; } -- GitLab