From: "IƱaki Baz Castillo" Date: 2011-01-12T11:04:21+09:00 Subject: [ruby-core:34399] [Ruby 1.9-Bug#4272][Open] rb_enc_str_new() causes segmentfault when using threads in parallel --mimepart_4d2d0c2125a69_1f2bb0f1cec4476 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Bug #4272: rb_enc_str_new() causes segmentfault when using threads in par= allel http://redmine.ruby-lang.org/issues/show/4272 Author: I=C3=B1aki Baz Castillo Status: Open, Priority: Normal Category: core ruby -v: 1.9.2-p136 Hi, I attach a custom C extension which shows how rb_enc_str_new() causes= segmentfault when running multiple threads. The bug is reproducible in 1= .9.2-p0, 1.9.2-p136 and 1.9 today's snapshot (2011-01-12). In order to test the bug compile the extension and use the included test_= bug.rb script passing a long number (iterations) as argument (1000, 10000= ...). ~# ruby extconf.rb && make && ruby test_bug.rb 5000 The provided C extension is very simple and just contains two methods: TestEncoding::Tester#test_rb_str_new =3D> returns a string encoded in A= SCII-8BIT (generated with "rb_str_new"). TestEncoding::Tester#test_rb_enc_str_new =3D> returns a string encoded = in UTF-8 (generated with "rb_enc_str_new"). When running threads in parallel with the second method, after some itera= tions Ruby crashses (as the provided test_bug.rb shows). ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d2d0c2125a69_1f2bb0f1cec4476 Content-Type: text/x-csrc; name=test_encoding.c Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=test_encoding.c I2luY2x1ZGUgInJ1YnkuaCINCiNpbmNsdWRlIDxzdHJpbmcuaD4NCg0KDQpz dGF0aWMgVkFMVUUgbVRlc3RFbmNvZGluZzsNCnN0YXRpYyBWQUxVRSBjVGVz dEVuY29kaW5nVGVzdGVyOw0KDQpWQUxVRSBUZXN0RW5jb2RpbmdUZXN0ZXJf aW5pdChWQUxVRSBzZWxmKQ0Kew0KICByZXR1cm4gc2VsZjsNCn0NCg0KDQpW QUxVRSBUZXN0RW5jb2RpbmdUZXN0ZXJfdGVzdF9yYl9zdHJfbmV3KCkNCnsN CiAgY2hhciBzdHJpbmdbMTAwXSA9ICJ0ZXN0aW5nIHJiX3N0cl9uZXcgKMOh w6nDrcOzw7opLi4uIjsNCg0KICBWQUxVRSB2ID0gcmJfc3RyX25ldyhzdHJp bmcsIHN0cmxlbihzdHJpbmcpKTsNCiAgcmV0dXJuIHY7DQp9DQoNCg0KVkFM VUUgVGVzdEVuY29kaW5nVGVzdGVyX3Rlc3RfcmJfZW5jX3N0cl9uZXcoKQ0K ew0KICBjaGFyIHN0cmluZ1sxMDBdID0gInRlc3RpbmcgcmJfZW5jX3N0cl9u ZXcgKMOhw6nDrcOzw7opLi4uIjsNCg0KICBWQUxVRSB2ID0gcmJfZW5jX3N0 cl9uZXcoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSwgcmJfdXRmOF9lbmNvZGlu ZygpKTsNCiAgcmV0dXJuIHY7DQp9DQoNCg0Kdm9pZCBJbml0X3Rlc3RfZW5j b2RpbmcoKQ0Kew0KICBtVGVzdEVuY29kaW5nID0gcmJfZGVmaW5lX21vZHVs ZSgiVGVzdEVuY29kaW5nIik7DQogIGNUZXN0RW5jb2RpbmdUZXN0ZXIgPSBy Yl9kZWZpbmVfY2xhc3NfdW5kZXIobVRlc3RFbmNvZGluZywgIlRlc3RlciIs IHJiX2NPYmplY3QpOw0KICANCiAgcmJfZGVmaW5lX21ldGhvZChjVGVzdEVu Y29kaW5nVGVzdGVyLCAiaW5pdGlhbGl6ZSIsIFRlc3RFbmNvZGluZ1Rlc3Rl cl9pbml0LDApOw0KICByYl9kZWZpbmVfbWV0aG9kKGNUZXN0RW5jb2RpbmdU ZXN0ZXIsICJ0ZXN0X3JiX3N0cl9uZXciLCBUZXN0RW5jb2RpbmdUZXN0ZXJf dGVzdF9yYl9zdHJfbmV3LDApOw0KICByYl9kZWZpbmVfbWV0aG9kKGNUZXN0 RW5jb2RpbmdUZXN0ZXIsICJ0ZXN0X3JiX2VuY19zdHJfbmV3IiwgVGVzdEVu Y29kaW5nVGVzdGVyX3Rlc3RfcmJfZW5jX3N0cl9uZXcsMCk7DQp9DQo= --mimepart_4d2d0c2125a69_1f2bb0f1cec4476 Content-Type: application/x-ruby; name=extconf.rb Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=extconf.rb cmVxdWlyZSAibWttZiINCg0KZGlyX2NvbmZpZygidGVzdF9lbmNvZGluZyIp DQpoYXZlX2xpYnJhcnkoImMiLCAibWFpbiIpDQpjcmVhdGVfbWFrZWZpbGUo InRlc3RfZW5jb2RpbmciKQ0K --mimepart_4d2d0c2125a69_1f2bb0f1cec4476 Content-Type: application/x-ruby; name=test_bug.rb Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=test_bug.rb cmVxdWlyZSAiLi90ZXN0X2VuY29kaW5nIgoKCnRpbWVzID0gKCAoIEFSR1Zb MF0gYW5kIEFSR1ZbMF0udG9faSA+IDAgKSA/IEFSR1ZbMF0udG9faSA6IDUw MDAgKQpUaHJlYWQuYWJvcnRfb25fZXhjZXB0aW9uID0gdHJ1ZQp0aHJlYWRz ID0gW10KCgp0PVRlc3RFbmNvZGluZzo6VGVzdGVyLm5ldwp0ZXN0ZXIgPSBU ZXN0RW5jb2Rpbmc6OlRlc3Rlci5uZXcKCnRpbWVzLnRpbWVzIGRvIHxudW18 CiAgcHV0cyAiaXRlcmF0aW9uIFsje251bX1dIgogIHB1dHMgdGVzdGVyLnRl c3RfcmJfc3RyX25ldy5lbmNvZGluZwogIHRocmVhZHMgPDwgVGhyZWFkLm5l dyB7IH0KZW5kCnRocmVhZHMuZWFjaCB7fHR8IHQuam9pbn0KCnRpbWVzLnRp bWVzIGRvIHxudW18CiAgcHV0cyAiaXRlcmF0aW9uIFsje251bX1dIgogIHB1 dHMgdGVzdGVyLnRlc3RfcmJfZW5jX3N0cl9uZXcKICB0aHJlYWRzIDw8IFRo cmVhZC5uZXcgeyB9CmVuZAp0aHJlYWRzLmVhY2gge3x0fCB0LmpvaW59Cgpw dXRzICJPSyI= --mimepart_4d2d0c2125a69_1f2bb0f1cec4476--