不要相信 errno 可靠

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值