MengRao/WFMPMC

在shm上发现一个问题,少调用了构造函数

pdkuionline opened this issue · 2 comments

在shm_comm.h中, 函数shmmap()里面,在 ret->shmInit();语句之前,少了一个 调用T构造函数。
'''
T* ret = (T*)mmap(0, sizeof(T), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);

if(ret == MAP_FAILED) 
{
    std::cerr << "mmap failed: " << strerror(errno) << std::endl;
    return nullptr;
}

new(ret) T(); //这一句

ret->shmInit();

'''

会导致一个问题是,mmap的文件如果是存在的,WFMPMC对象在共享内存上没有调用构造函数,导致readidx,wirteidx 没有正确赋值

shmInit里面会自己调用构造函数的。

谢谢,我仔细查了一下问题,其实不是构造函数没调用。而是shmInit函数,要求数据 zero-initialized, 不然,它不会调用构造函数。 后来发现,是因为shm_open了之后,没有shm-unlink, 导致共享内存程序关闭后没有删除,下次再跑程序就会问题。