Package: ruby-mysql2 Severity: important
Hi, Currently, the MySQL library is not properly initialized when the gem is loaded, which can prevent connections from other threads, because of a race condition. This is fixed by an upstream commit which initialized correctly the MySQL library: de48627ee89b9dfd7d966f3ea747e95a48085792 Added call to mysql_library_init during initialization of the gem Reproduced below: -------------------------8<----------------------- Author: Michael Kruglos <mich...@kruglos.com> AuthorDate: Wed Jul 30 22:52:50 2014 +0300 Commit: Michael Kruglos <mich...@kruglos.com> CommitDate: Thu Jul 31 11:26:31 2014 +0300 Added call to mysql_library_init during initialization of the gem This call must be performed before trying to call mysql_init from multiple threads Reference: http://dev.mysql.com/doc/refman/5.1/en/mysql-init.html Minimal reproduction of the problem if mysql_library_init is not called require 'mysql2' def connect Mysql2::Client.new() end threads = [0,1].map { Thread.new { connect } } threads.map(&:join) puts "OK!" --- ext/mysql2/client.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ext/mysql2/client.c b/ext/mysql2/client.c index c22b5b8..71a7a35 100644 --- a/ext/mysql2/client.c +++ b/ext/mysql2/client.c @@ -1235,6 +1235,13 @@ void init_mysql2_client() { } } + /* Initializing mysql library, so different threads could call Client.new */ + /* without race condition in the library */ + if (mysql_library_init(0, NULL, NULL) != 0) { + rb_raise(rb_eRuntimeError, "Could not initialize MySQL client library"); + return; + } + #if 0 mMysql2 = rb_define_module("Mysql2"); Teach RDoc about Mysql2 constant. #endif ----------8<------------------------------ -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (990, 'unstable'), (500, 'testing'), (100, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
signature.asc
Description: Digital signature