程序卡在getenv()

时间:2012-04-16 10:38:01

标签: malloc environment-variables preloading getenv

我通过预加载库来重载“malloc”。在这个自定义“malloc”中,我使用环境变量来区分我的程序,以使用我从一般“malloc”中定制的“malloc”。

问题是,在几个“mallocs”之后,程序卡在getenv()调用中。我无法弄清楚为什么程序会陷入其中。

代码如下:

void* PerfTrackMallocInterposition::Malloc(size_t size) {
    // Malloc with statistics
    pthread_mutex_lock(&fgPTMutex);


    char *checkCDBEnd=NULL;
    static const char* CDBEndEnv = "checkCDBEnd";
    checkCDBEnd = getenv(CDBEndEnv);   //program gets stuck here

    if(checkCDBEnd!=NULL)
    {
        if(checkCDBEnd[0]=='1')
        {
            if(size>1024)
            {
                void *result = Alloc(size);   //Call to custom malloc
                pthread_mutex_unlock(&fgPTMutex);
                return result;
            }
        }
    }


    void* result = (*fPMalloc)(size);    //call to normal malloc
    pthread_mutex_unlock(&fgPTMutex);


    return result;
}

在使用vim编辑器的库时,我也在同一位置出现总线错误。

请帮帮我。

谢谢

1 个答案:

答案 0 :(得分:0)

确定该程序卡在getenv()电话上?我会更加怀疑互斥锁:如果另一个线程持有互斥锁,pthread_mutex_lock(&fgPTMutex);将阻塞