From: Yukihiro Matsumoto Date: 2004-12-05T02:04:38+09:00 Subject: [ruby-dev:25050] Re: temporal locking already locked string on simultaneous write まつもと ゆきひろです In message "Re: [ruby-dev:25049] Re: temporal locking already locked string on simultaneous write" on Sun, 5 Dec 2004 01:19:40 +0900, Tanaka Akira writes: |[ruby-dev:24441] と似ているのはたしかなのですが、rb_str_shared_replace |を使うと、もともとの文字列が空になってしまうため、ひとつの write があ |る文字列を使っているときに他の write がその文字列を参照すると、空の文 |字列を参照するはめになるように思います。 | |試してないんで勘違いしてるかも知れませんが。 あ、そうでしたね。そうか、これから変更する文字列は書き換わっ てもかまわないんだけど、単に参照するだけものは書き換えてはい けませんね。 で、io.cを見てみたらlocktmpを使っている読み込みを行う関数は io_fwriteだけのようです。あと、socket.cにsock_connect。これ だけなら書き換えてしまってもかまわない気がしてきました。 [ruby-dev:25043]にある |ひとつは、dup&freeze&klass=0 した文字列オブジェクトを使うものです。 | |もうひとつは、実際に書き込むところまで文字列オブジェクトで渡していくと |いうものです。 の方針のうち、io_fwrite()は後者、sock_connectは前者で対応し ようと思います。