客服琐记

客户用我们提供的API时居然出现了程序死循环。

我们的API用户已经使用了快一年了,还从没遇到这种情况,多半应该是用户使用上的问题。所以我下楼去看看。

客户的问题很容易重现,但是我写了个一样的例子,却没有这个问题。

“我的例子跟你代码几乎一样啊”我问。

“是啊......不对,有点不一样,你是多进程,我是多线程的,你们的API里用到了read,而且还判断了errno是吧,errno在多线程下岂不是互相影响?”

他这么一说我还真有点怀疑了,虽然API已经被用了一年,但大多数人都是用的多进程(unix的优秀习惯,噢),这可能是大家都没发现这一问题的原因。

我跑去问架构师,说了一下我的怀疑。

“不会吧,linux上系统调用都有可能影响errno,那任何一个多线程程序岂不是都有这个问题?”

“对啊。。。”

我这个人很动摇,两头都在说我就两头都在晃。

架构师查了查errno的man,确实,errno是“thread local”的,一个线程一个errno,不会互相干扰。

干脆回去把我的例子改成多线程的,依然不能重现,这下就不是多线程的问题了。


最后用户突然想起他们有个线程比较特殊,它@X%X%@#¥%……&*,还是API使用上的问题。我松口气。


相关文章

分类

2 Comments

lee said:

果然是客户第一

DongHao Author Profile Page said:

客服比开发累

留言:

关于文章

This page contains a single entry by DongHao published on 08 12, 2010 5:05 PM.

[kernel] 内核缓冲的锁 was the previous entry in this blog.

蜂蜜 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.