今天遇到一个问题:守护进程第一次执行某个功能没问题,第二次执行总出错。
1. 二分法注释掉多余的功能,逐步调试
2. 发现当执行gsource的timer后cpu会达到九十多,近100.因此导致第二次执行同样功能不正常
3. 发现源码中只是使用了g_timeout_add_seconds,但是并没有将该timer attach到某一个context中去(context属于某个mainloop)
4. 尝试attach,结果还是不行,思考是否没有释放
5. 尝试使用后释放该timer,最终可行(注意unref的次数,底层代码没有深究,个人推测应该和智能smart pointer的计数指针类似)
6. 尝试使用其他的timer,最终也可行。