客服琐记
客户用我们提供的API时居然出现了程序死循环。
我们的API用户已经使用了快一年了,还从没遇到这种情况,多半应该是用户使用上的问题。所以我下楼去看看。
客户的问题很容易重现,但是我写了个一样的例子,却没有这个问题。
“我的例子跟你代码几乎一样啊”我问。
“是啊......不对,有点不一样,你是多进程,我是多线程的,你们的API里用到了read,而且还判断了errno是吧,errno在多线程下岂不是互相影响?”
他这么一说我还真有点怀疑了,虽然API已经被用了一年,但大多数人都是用的多进程(unix的优秀习惯,噢),这可能是大家都没发现这一问题的原因。
我跑去问架构师,说了一下我的怀疑。
“不会吧,linux上系统调用都有可能影响errno,那任何一个多线程程序岂不是都有这个问题?”
“对啊。。。”
我这个人很动摇,两头都在说我就两头都在晃。
架构师查了查errno的man,确实,errno是“thread local”的,一个线程一个errno,不会互相干扰。
干脆回去把我的例子改成多线程的,依然不能重现,这下就不是多线程的问题了。
最后用户突然想起他们有个线程比较特殊,它@X%X%@#¥%……&*,还是API使用上的问题。我松口气。
相关文章
- 多线程并非万金油 - 07 13, 2010
- [compiler] gcc下的errno冲突 - 01 21, 2010
- fedora 9 小集 - 01 05, 2009
果然是客户第一
客服比开发累