最近发现第3方提供的 API, 引起内存不断增大,代码如下:
int retVal = kill(pSharedData->regBuffPids[i],0);
if (retVal == 0)
{
LOGE("Signal Sent Successfully....");
return false;
}
else
{
LOGE("Kill failed....");
}
if (errno == EPERM)
{
LOGE("signal permission failure!");
return false;
}
else if (errno == EINVAL)
{
LOGE("invalide signal");
return false;
}
else if (errno == ESRCH)
{
LOGE("no process found for the specific pid");
release_share_memory();
}
它用 kill(pid,0) 检查进程是否存在,不存在,就释放共享内存。
但其实我们发现运行 LOGE() , errno 期望是3, 但却变成 2 ,原来我们自己改动过的 LOGE() 中调用了 localtime, 它读不到时区文件,所以把 errno 设置成 2
因此不要相信 errno 可靠, 有必要先用临时变量保存。
int retVal = kill(pSharedData->regBuffPids[i],0);
int errnoVal = errno;
if (retVal == 0)
{
LOGE("Signal Sent Successfully....");
return false;
}
else
{
LOGE("Kill failed....");
}
if (errnoVal == EPERM)
{
LOGE("signal permission failure!");
return false;
}
else if (errnoVal == EINVAL)
{
LOGE("invalide signal");
return false;
}
else if (errnoVal == ESRCH)
{
LOGE("no process found for the specific pid");
release_share_memory();
}