[Armadillo:08723] Re: msgsndでEINVALになることがある
Yamamoto
email@hidden
2013年 4月 9日 (火) 17:47:49 JST
Yamamotoです。
有難う御座いました。
先ほど原因が判明しました。
> if (mtype < 1)
> return -EINVAL;
mtypeに何も設定していなかったので、デフォルトで0が入っている時にエラーになってい
ました。
お騒がせしました。
On Tue, 09 Apr 2013 17:38:23 +0900
Yasushi SHOJI <email@hidden> wrote:
> At Tue, 09 Apr 2013 10:02:17 +0900,
> Yamamoto wrote:
> >
> > 処理中でプロセンス間の通信用にメッセージキューを使用しようとしているのですが、時
> > 々msgsndで-1エラーでerrno=EINVALになってしまうことがあります。
> >
> > 確認用の単独動作の確認もしているのですが、上手く動作する時はまったくエラー発生せ
> > ず。
> > エラーが発生すると以降、ずっとエラーになります。
>
> linux/ipc/msg.c::do_msgsnd() を見ると、
>
> long do_msgsnd(int msqid, long mtype, void __user *mtext,
> size_t msgsz, int msgflg)
> {
> struct msg_queue *msq;
> struct msg_msg *msg;
> int err;
> struct ipc_namespace *ns;
>
> ns = current->nsproxy->ipc_ns;
>
> if (msgsz > ns->msg_ctlmax || (long) msgsz < 0 || msqid < 0)
> return -EINVAL;
> if (mtype < 1)
> return -EINVAL;
>
> msg = load_msg(mtext, msgsz);
> if (IS_ERR(msg))
> return PTR_ERR(msg);
>
> msg->m_type = mtype;
> msg->m_ts = msgsz;
>
> msq = msg_lock_check(ns, msqid);
> if (IS_ERR(msq)) {
> err = PTR_ERR(msq);
> goto out_free;
> }
> :
> :
>
> こんな感じでエラーにしています。man page に書いてあるのとあまり変らない
> ですね...。
>
> ここからは、勘ですが queue が別プロセスで消されているってことはないです
> か? msgsnd() に失敗したときに、msgctl() を使って IPC_INFOや、MSG_INFO、
> MSG_STAT を試すと、どうなります?
> --
> yashi
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
armadillo メーリングリストの案内