最近发现第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(); }