ふるた技工所(てっこうしょ)

ふるた技工所(てっこうしょ)

PR

キーワードサーチ

▼キーワード検索

プロフィール

Aちゃん22

Aちゃん22

フリーページ

2017.02.08
XML
カテゴリ: ソフト開発日誌
Free Pascal 3.0.0 向けに書いたソースを実行していたら sem_trywait() が -1 を返した。セマフォを即時で獲得できないことは有る。-1 を返すことは想定できる事態だ。

この時 C 言語で言う(厳密には libc) の errno を調べる関数 fpgeterrno を呼び出し、帰ってきた値が ENOTTY "Inappropriate ioctl for device" だった。「は?何が起きているのか?」

Free Pascal RTL(Run Time Libraries) の sem_trywait() 関数は直接 libc (glibc) の sem_trywait() を呼び出すように作ってある。glibc の実装を見る限り、sem_trywait() が -1 を返すときは errno は EAGAIN になる。なんだな、sem 引数のチェックはしていないのか...

何か複雑なことが起きている?この事象を見るのは 2 回目だ。1 回目は sem_trywait() が EAGAIN 以外を返した事だけ確定していた。

sem_trywait() の実装は何かの間違いが起きるような複雑さは無い。だとすると、fpgeterrno が怪しい。単純化したコードを実装してみて、逆アセンブルと Free Pascal の RTL ソースコードを眺めてみる。

fpgeterrno の実装を見てみると errno を格納している変数を指すポインタを返す __errno_location() を使っていない様に見える。なんだか怪しいな。

Free Pascal の sem_t 構造体の定義も、メンバーは十分なサイズとアラインメントを確保するだけのダミー(ブラックボックス)として扱っていなかったしなぁ...





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2017.02.09 23:20:29
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

カレンダー

サイド自由欄

コメント新着

Aちゃん22 @ Re[1]:秋月八潮店 カラーつまみ詰め放題 300 円 - 46 個入った(05/10) クマノフさん、こんにちは、 あぁ、高さバ…
クマノフ@ Re:秋月八潮店 カラーつまみ詰め放題 300 円 - 46 個入った(05/10) こんにちは 確か使用上の注意が出ていたと…
Aちゃん22 @ Re[7]:ようやく転職エージェントに会うも - 3 分で終了(04/01) ご無沙汰してますさん、こんにちは、 反応…
ご無沙汰してます@ Re[6]:ようやく転職エージェントに会うも - 3 分で終了(04/01) Aちゃん22さんへ 調べて頂いて恐縮です。…
Aちゃん22 @ Re[5]:ようやく転職エージェントに会うも - 3 分で終了(04/01) ご無沙汰してますさん、こんにちは。 思い…

© Rakuten Group, Inc.
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: