我对代码做了一个修改,感觉代码的确有点问题。在x86下跑倒是没出问题,但是在我的ARM
板子上跑就出错了。
--- kbs_bbs/libBBS/stuff.c (revision 11780)
+++ kbs_bbs/libBBS/stuff.c (working copy)
@@ -760,10 +760,10 @@
if (publicshm != NULL)
shmdt((void *)publicshm);
if (readonly)
- publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 1, publicshm);
+ publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 1, NULL);
else
- publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 0, publicshm);
+ publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 0, NULL);
return (publicshm == NULL);
}
主要问题应该是出在attach_shm1这个函数里面对shmat的调用,shmat的第二个参数为NULL
的话,系统会分配共享内存的位置,但是如果是原来的publicshm的话,系统可能会分配
内存失败,我是调试时查到errno=EINVAL时,查了下manpage发现的。
--
FROM 124.205.77.*