[#45341] 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...>

 ささだです.

28 messages 2012/03/11
[#45816] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

 ささだです.

[#45817] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月25日 18:26 SASADA Koichi <[email protected]>:

[#45819] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

 ささだです.

[#45820] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月25日 19:39 SASADA Koichi <[email protected]>:

[#45827] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

(2012/06/25 20:32), Tanaka Akira wrote:

[#45841] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月26日 3:40 SASADA Koichi <[email protected]>:

[#45844] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

(2012/06/26 5:07), Tanaka Akira wrote:

[#45372] Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

14 messages 2012/03/16
[#45376] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — Yukihiro Matsumoto <matz@...> 2012/03/17

まつもと ゆきひろです

[#45377] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (石塚圭樹) 2012/03/17

けいじゅ@いしつかです.

[#45381] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — Yukihiro Matsumoto <matz@...> 2012/03/17

まつもと ゆきひろです

[#45399] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (石塚圭樹) 2012/03/18

けいじゅ@いしつかです.

[#45412] [ruby-trunk - Feature #6177][Open] array.cのrb_ary_equal()の高速化 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

13 messages 2012/03/20

[#45471] [ruby-trunk - Bug #6230][Open] [WEBrick] WEBrick::HTTPResponse#body の IO オブジェクトの読み込みに read メソッドを使っているため必要以上にブロックされる — "nobuoka (yu nobuoka)" <nobuoka@...>

7 messages 2012/03/30

[ruby-dev:45315] [ruby-trunk - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合

From: Makoto Kishimoto <redmine@...>
Date: 2012-03-07 01:13:29 UTC
List: ruby-dev #45315
Issue #5429 has been updated by Makoto Kishimoto.


たいして長くないので添付じゃなくインラインにしますが、

 SNDCTL_DSP_SPEED = 0xc0045002 - 0x1_0000_0000
 SNDCTL_DSP_STEREO = 0xc0045003 - 0x1_0000_0000
 SNDCTL_DSP_SETFMT = 0xc0045005 - 0x1_0000_0000
 
 AFMT_S16_LE = 0x00000010
 
 open("/dev/dsp", "w:ASCII-8BIT"){|dsp|
   ioarg = [AFMT_S16_LE].pack "i!"
   dsp.ioctl SNDCTL_DSP_SETFMT, ioarg
   ioarg = [44100].pack "i!"
   dsp.ioctl SNDCTL_DSP_SPEED, ioarg
   ioarg = [1].pack "i!"
   dsp.ioctl SNDCTL_DSP_STEREO, ioarg
 
   loop {
     buf = STDIN.read 4
     break unless buf
     buf.force_encoding "ASCII-8BIT"
     dsp.write buf
   }
 }

こんな感じです。CDからリップした、

 > track01.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz

こんな感じのwavを標準入力から食わせると音が出ます。
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Closed
Priority: Normal
Assignee: Makoto Kishimoto
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


-- 
http://bugs.ruby-lang.org/

In This Thread