[Armadillo:03185] semtimedopの使用方法について

Takenoshita Koyo email@hidden
2008年 7月 26日 (土) 20:10:18 JST


semtimedop()の挙動を調べてみたところ、

semtimedop()
  -> sys_ipc()
    -> sys_semtimedop()
という順番でシステムコールが呼ばれていました。

sys_ipc()に入った直後で各引数の値を確認したところ、
6番めの引数(timeout)の値が、
semtimedop()に渡した値とは異なっており、
正しいアドレスになっていなかったため、
EFAULTが発生していました。

linux-2.6.12では、6個の引数を取るシステムコールは、
上手く扱えないものがあるようです。
(linux-2.6.18では修正されています。)

この問題を修正するpatchを添付いたしますので、
お試し下さい。

2008-07-25 (金) の 14:28 +0900 に 相田 仁 さんは書きました:
> お世話になります。
> 
> semopを使用した場合は、問題なく処理できたのですが
> semtimedopを使用した場合は
> 	errno=14
> 	semaphore: Bad address
> が、表示されてしまいました。
> 
> どのようにすれば、semtimedopを利用できるのかご教授願います。
> 
> 
> --- ソースコード抜粋 ---
> 
> {
>   struct sembuf sem_b;
>   sem_b.sem_num = 0;
>   sem_b.sem_op = -1;
>   sem_b.sem_flg = SEM_UNDO;
>   int res;
> #if 0
>   res = semtimedop(m_semaphore, &sem_b, 1, NULL);
> #else
>   res = semop(m_semaphore, &sem_b, 1);
> #endif
>   if (res == -1) {
>     printf("\nerrno=%d\n", errno);
>     perror("semaphore");
>   }
> }
> 
> --- END ---
> 
> 開発環境は
>  ・Armadillo-9
>  ・atmark-dist-20070727
>  ・linux-2.6.12.3-a9-13
> 
> 
> 以上、よろしくお願いいたします。
> 
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo
-- 
Takenoshita Koyo
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: fix_sys_call.patch
型:         text/x-patch
サイズ:     842 バイト
説明:       無し
URL:        <http://lists.atmark-techno.com/pipermail/armadillo/attachments/20080726/d6cb83a6/attachment.bin>


armadillo メーリングリストの案内