我通过预加载库来重载"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编辑器中使用这个库时,我在相同的位置也得到了一个总线错误。
请帮帮我。
谢谢
发布于 2012-04-16 18:46:26
你确定程序会被getenv()调用卡住吗?我对互斥锁更加怀疑:如果另一个线程持有互斥锁,pthread_mutex_lock(&fgPTMutex);将阻塞
https://stackoverflow.com/questions/10172548
复制相似问题