今天实现如下代码:
struct info_t {
uint32_t id;
uint32_t count;
};
void use_timer(uint32_t uid)
{
//...
info_t* info = reinterpret_cast<info_t*>(g_slice_alloc0(sizeof(info_t)));
info->id = uid;
info->count = 10;
timer_handler(info);
}
int timer_handler(void* data)
{
//business process
//Timer
if ( info->count == 0 ) {
g_slice_free1(sizeof(*info), info);
} else {
info->count--;
//下一个定时器, 此处不便透露实现机制
const timeval* tv = get_now_tv();
ADD_TIMER_EVENT(timer_handler, info, tv->tv_sec + info->interval);
}
return 0;
}
看似没什么问题,内存正常分配,也在定时器中正常删除,但是细细一想,如果删除定时器时info->count还大于0呢?内存就无法删除了,这是个日常比较容易忽略的一个问题。