消息队列使用的 msg_buf_t 结构体里面的 mtype 是长整型的!

今天下午弄了好久总算把 pure-ftpd with libantixunlei 部署到64位系统上去了。期间调教了好久。
首先想起来长整型(long)在64位系统上是8字节,而在32位系统上是4字节。于是就出现了一些数据结构对齐的问题,这个问题弄下来以后,偶索性把所有的long都替换成了int,然后编译安装,一切顺利。
但是运行的时候,却发现主进程的消息处理线程阻塞死了,根据调试信息,子进程明明已经把消息发送出去了,但是消息处理线程硬是收不到,一直阻塞在msgrcv函数那里。
于是又折腾了好久,后来才想到,会不会是这个msg_buf_t里面用来标识消息类型的mtype是长整型的,如果这样的话,刚才我把所有的long替换成int,肯定影响到这里了。之前偶在网上看消息函数的时候,有些文章定义这个结构体的时候用的是整型,而有些文章用的是长整型,哎呀真是不严谨啊。
于是把这个结构体里面的 int mtype 改成 long mtype,编译安装运行,正常了……
所以说long和int一定要慎用啊……

本文发表于 技术向,并添加了 , , 标记。保存永久链接到书签。

发表评论

邮箱地址不会被公开。