@@ -57,7 +57,7 @@ static VALUE rb_hash_dup(VALUE other) {
57
57
58
58
/*
59
59
* used to pass all arguments to mysql_real_connect while inside
60
- * rb_thread_blocking_region
60
+ * rb_thread_call_without_gvl
61
61
*/
62
62
struct nogvl_connect_args {
63
63
MYSQL * mysql ;
@@ -72,7 +72,7 @@ struct nogvl_connect_args {
72
72
73
73
/*
74
74
* used to pass all arguments to mysql_send_query while inside
75
- * rb_thread_blocking_region
75
+ * rb_thread_call_without_gvl
76
76
*/
77
77
struct nogvl_send_query_args {
78
78
MYSQL * mysql ;
@@ -84,7 +84,7 @@ struct nogvl_send_query_args {
84
84
85
85
/*
86
86
* used to pass all arguments to mysql_select_db while inside
87
- * rb_thread_blocking_region
87
+ * rb_thread_call_without_gvl
88
88
*/
89
89
struct nogvl_select_db_args {
90
90
MYSQL * mysql ;
@@ -124,6 +124,7 @@ static void rb_mysql_client_mark(void * wrapper) {
124
124
static VALUE rb_raise_mysql2_error (mysql_client_wrapper * wrapper ) {
125
125
VALUE rb_error_msg = rb_str_new2 (mysql_error (wrapper -> client ));
126
126
VALUE rb_sql_state = rb_tainted_str_new2 (mysql_sqlstate (wrapper -> client ));
127
+ VALUE e ;
127
128
#ifdef HAVE_RUBY_ENCODING_H
128
129
rb_encoding * default_internal_enc = rb_default_internal_encoding ();
129
130
rb_encoding * conn_enc = rb_to_encoding (wrapper -> encoding );
@@ -136,22 +137,22 @@ static VALUE rb_raise_mysql2_error(mysql_client_wrapper *wrapper) {
136
137
}
137
138
#endif
138
139
139
- VALUE e = rb_exc_new3 (cMysql2Error , rb_error_msg );
140
+ e = rb_exc_new3 (cMysql2Error , rb_error_msg );
140
141
rb_funcall (e , intern_error_number_eql , 1 , UINT2NUM (mysql_errno (wrapper -> client )));
141
142
rb_funcall (e , intern_sql_state_eql , 1 , rb_sql_state );
142
143
rb_exc_raise (e );
143
144
return Qnil ;
144
145
}
145
146
146
- static VALUE nogvl_init (void * ptr ) {
147
+ static void * nogvl_init (void * ptr ) {
147
148
MYSQL * client ;
148
149
149
150
/* may initialize embedded server and read /etc/services off disk */
150
151
client = mysql_init ((MYSQL * )ptr );
151
- return client ? Qtrue : Qfalse ;
152
+ return ( void * )( client ? Qtrue : Qfalse ) ;
152
153
}
153
154
154
- static VALUE nogvl_connect (void * ptr ) {
155
+ static void * nogvl_connect (void * ptr ) {
155
156
struct nogvl_connect_args * args = ptr ;
156
157
MYSQL * client ;
157
158
@@ -160,10 +161,10 @@ static VALUE nogvl_connect(void *ptr) {
160
161
args -> db , args -> port , args -> unix_socket ,
161
162
args -> client_flag );
162
163
163
- return client ? Qtrue : Qfalse ;
164
+ return ( void * )( client ? Qtrue : Qfalse ) ;
164
165
}
165
166
166
- static VALUE nogvl_close (void * ptr ) {
167
+ static void * nogvl_close (void * ptr ) {
167
168
mysql_client_wrapper * wrapper ;
168
169
#ifndef _WIN32
169
170
int flags ;
@@ -190,7 +191,7 @@ static VALUE nogvl_close(void *ptr) {
190
191
mysql_close (wrapper -> client );
191
192
}
192
193
193
- return Qnil ;
194
+ return NULL ;
194
195
}
195
196
196
197
static void rb_mysql_client_free (void * ptr ) {
@@ -292,11 +293,11 @@ static VALUE rb_connect(VALUE self, VALUE user, VALUE pass, VALUE host, VALUE po
292
293
args .mysql = wrapper -> client ;
293
294
args .client_flag = NUM2ULONG (flags );
294
295
295
- rv = rb_thread_blocking_region (nogvl_connect , & args , RUBY_UBF_IO , 0 );
296
+ rv = ( VALUE ) rb_thread_call_without_gvl (nogvl_connect , & args , RUBY_UBF_IO , 0 );
296
297
if (rv == Qfalse ) {
297
298
while (rv == Qfalse && errno == EINTR && !mysql_errno (wrapper -> client )) {
298
299
errno = 0 ;
299
- rv = rb_thread_blocking_region (nogvl_connect , & args , RUBY_UBF_IO , 0 );
300
+ rv = ( VALUE ) rb_thread_call_without_gvl (nogvl_connect , & args , RUBY_UBF_IO , 0 );
300
301
}
301
302
if (rv == Qfalse )
302
303
return rb_raise_mysql2_error (wrapper );
@@ -316,7 +317,7 @@ static VALUE rb_mysql_client_close(VALUE self) {
316
317
GET_CLIENT (self );
317
318
318
319
if (wrapper -> connected ) {
319
- rb_thread_blocking_region (nogvl_close , wrapper , RUBY_UBF_IO , 0 );
320
+ rb_thread_call_without_gvl (nogvl_close , wrapper , RUBY_UBF_IO , 0 );
320
321
}
321
322
322
323
return Qnil ;
@@ -327,19 +328,19 @@ static VALUE rb_mysql_client_close(VALUE self) {
327
328
* enough to fit in a socket buffer, but sometimes large UPDATE and
328
329
* INSERTs will cause the process to block
329
330
*/
330
- static VALUE nogvl_send_query (void * ptr ) {
331
+ static void * nogvl_send_query (void * ptr ) {
331
332
struct nogvl_send_query_args * args = ptr ;
332
333
int rv ;
333
334
334
335
rv = mysql_send_query (args -> mysql , args -> sql_ptr , args -> sql_len );
335
336
336
- return rv == 0 ? Qtrue : Qfalse ;
337
+ return ( void * )( rv == 0 ? Qtrue : Qfalse ) ;
337
338
}
338
339
339
340
static VALUE do_send_query (void * args ) {
340
341
struct nogvl_send_query_args * query_args = args ;
341
342
mysql_client_wrapper * wrapper = query_args -> wrapper ;
342
- if (rb_thread_blocking_region (nogvl_send_query , args , RUBY_UBF_IO , 0 ) == Qfalse ) {
343
+ if (( VALUE ) rb_thread_call_without_gvl (nogvl_send_query , args , RUBY_UBF_IO , 0 ) == Qfalse ) {
343
344
/* an error occurred, we're not active anymore */
344
345
MARK_CONN_INACTIVE (self );
345
346
return rb_raise_mysql2_error (wrapper );
@@ -352,14 +353,14 @@ static VALUE do_send_query(void *args) {
352
353
* response can overflow the socket buffers and cause us to eventually
353
354
* block while calling mysql_read_query_result
354
355
*/
355
- static VALUE nogvl_read_query_result (void * ptr ) {
356
+ static void * nogvl_read_query_result (void * ptr ) {
356
357
MYSQL * client = ptr ;
357
358
my_bool res = mysql_read_query_result (client );
358
359
359
- return res == 0 ? Qtrue : Qfalse ;
360
+ return ( void * )( res == 0 ? Qtrue : Qfalse ) ;
360
361
}
361
362
362
- static VALUE nogvl_do_result (void * ptr , char use_result ) {
363
+ static void * nogvl_do_result (void * ptr , char use_result ) {
363
364
mysql_client_wrapper * wrapper ;
364
365
MYSQL_RES * result ;
365
366
@@ -374,15 +375,15 @@ static VALUE nogvl_do_result(void *ptr, char use_result) {
374
375
ready for another command to be issued */
375
376
wrapper -> active_thread = Qnil ;
376
377
377
- return ( VALUE ) result ;
378
+ return result ;
378
379
}
379
380
380
381
/* mysql_store_result may (unlikely) read rows off the socket */
381
- static VALUE nogvl_store_result (void * ptr ) {
382
+ static void * nogvl_store_result (void * ptr ) {
382
383
return nogvl_do_result (ptr , 0 );
383
384
}
384
385
385
- static VALUE nogvl_use_result (void * ptr ) {
386
+ static void * nogvl_use_result (void * ptr ) {
386
387
return nogvl_do_result (ptr , 1 );
387
388
}
388
389
@@ -402,17 +403,17 @@ static VALUE rb_mysql_client_async_result(VALUE self) {
402
403
return Qnil ;
403
404
404
405
REQUIRE_CONNECTED (wrapper );
405
- if (rb_thread_blocking_region (nogvl_read_query_result , wrapper -> client , RUBY_UBF_IO , 0 ) == Qfalse ) {
406
+ if (( VALUE ) rb_thread_call_without_gvl (nogvl_read_query_result , wrapper -> client , RUBY_UBF_IO , 0 ) == Qfalse ) {
406
407
/* an error occurred, mark this connection inactive */
407
408
MARK_CONN_INACTIVE (self );
408
409
return rb_raise_mysql2_error (wrapper );
409
410
}
410
411
411
412
is_streaming = rb_hash_aref (rb_iv_get (self , "@current_query_options" ), sym_stream );
412
413
if (is_streaming == Qtrue ) {
413
- result = (MYSQL_RES * )rb_thread_blocking_region (nogvl_use_result , wrapper , RUBY_UBF_IO , 0 );
414
+ result = (MYSQL_RES * )rb_thread_call_without_gvl (nogvl_use_result , wrapper , RUBY_UBF_IO , 0 );
414
415
} else {
415
- result = (MYSQL_RES * )rb_thread_blocking_region (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
416
+ result = (MYSQL_RES * )rb_thread_call_without_gvl (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
416
417
}
417
418
418
419
if (result == NULL ) {
@@ -511,7 +512,7 @@ static VALUE finish_and_mark_inactive(void *args) {
511
512
/* if we got here, the result hasn't been read off the wire yet
512
513
so lets do that and then throw it away because we have no way
513
514
of getting it back up to the caller from here */
514
- result = (MYSQL_RES * )rb_thread_blocking_region (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
515
+ result = (MYSQL_RES * )rb_thread_call_without_gvl (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
515
516
mysql_free_result (result );
516
517
517
518
wrapper -> active_thread = Qnil ;
@@ -530,18 +531,18 @@ static VALUE finish_and_mark_inactive(void *args) {
530
531
* again.
531
532
*/
532
533
static VALUE rb_mysql_client_abandon_results (VALUE self ) {
533
- GET_CLIENT (self );
534
-
535
534
MYSQL_RES * result ;
536
535
int ret ;
537
536
537
+ GET_CLIENT (self );
538
+
538
539
while (mysql_more_results (wrapper -> client ) == 1 ) {
539
540
ret = mysql_next_result (wrapper -> client );
540
541
if (ret > 0 ) {
541
542
rb_raise_mysql2_error (wrapper );
542
543
}
543
544
544
- result = (MYSQL_RES * )rb_thread_blocking_region (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
545
+ result = (MYSQL_RES * )rb_thread_call_without_gvl (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
545
546
546
547
if (result != NULL ) {
547
548
mysql_free_result (result );
@@ -749,8 +750,8 @@ static VALUE rb_mysql_client_info(VALUE self) {
749
750
#ifdef HAVE_RUBY_ENCODING_H
750
751
rb_encoding * default_internal_enc ;
751
752
rb_encoding * conn_enc ;
752
- #endif
753
753
GET_CLIENT (self );
754
+ #endif
754
755
version = rb_hash_new ();
755
756
756
757
#ifdef HAVE_RUBY_ENCODING_H
@@ -810,9 +811,12 @@ static VALUE rb_mysql_client_server_info(VALUE self) {
810
811
static VALUE rb_mysql_client_socket (VALUE self ) {
811
812
GET_CLIENT (self );
812
813
#ifndef _WIN32
813
- REQUIRE_CONNECTED (wrapper );
814
- int fd_set_fd = wrapper -> client -> net .fd ;
815
- return INT2NUM (fd_set_fd );
814
+ {
815
+ int fd_set_fd ;
816
+ REQUIRE_CONNECTED (wrapper );
817
+ fd_set_fd = wrapper -> client -> net .fd ;
818
+ return INT2NUM (fd_set_fd );
819
+ }
816
820
#else
817
821
rb_raise (cMysql2Error , "Raw access to the mysql file descriptor isn't supported on Windows" );
818
822
#endif
@@ -862,13 +866,13 @@ static VALUE rb_mysql_client_thread_id(VALUE self) {
862
866
return ULL2NUM (retVal );
863
867
}
864
868
865
- static VALUE nogvl_select_db (void * ptr ) {
869
+ static void * nogvl_select_db (void * ptr ) {
866
870
struct nogvl_select_db_args * args = ptr ;
867
871
868
872
if (mysql_select_db (args -> mysql , args -> db ) == 0 )
869
- return Qtrue ;
873
+ return ( void * ) Qtrue ;
870
874
else
871
- return Qfalse ;
875
+ return ( void * ) Qfalse ;
872
876
}
873
877
874
878
/* call-seq:
@@ -887,16 +891,16 @@ static VALUE rb_mysql_client_select_db(VALUE self, VALUE db)
887
891
args .mysql = wrapper -> client ;
888
892
args .db = StringValuePtr (db );
889
893
890
- if (rb_thread_blocking_region (nogvl_select_db , & args , RUBY_UBF_IO , 0 ) == Qfalse )
894
+ if (rb_thread_call_without_gvl (nogvl_select_db , & args , RUBY_UBF_IO , 0 ) == Qfalse )
891
895
rb_raise_mysql2_error (wrapper );
892
896
893
897
return db ;
894
898
}
895
899
896
- static VALUE nogvl_ping (void * ptr ) {
900
+ static void * nogvl_ping (void * ptr ) {
897
901
MYSQL * client = ptr ;
898
902
899
- return mysql_ping (client ) == 0 ? Qtrue : Qfalse ;
903
+ return ( void * )( mysql_ping (client ) == 0 ? Qtrue : Qfalse ) ;
900
904
}
901
905
902
906
/* call-seq:
@@ -913,7 +917,7 @@ static VALUE rb_mysql_client_ping(VALUE self) {
913
917
if (!wrapper -> connected ) {
914
918
return Qfalse ;
915
919
} else {
916
- return rb_thread_blocking_region (nogvl_ping , wrapper -> client , RUBY_UBF_IO , 0 );
920
+ return ( VALUE ) rb_thread_call_without_gvl (nogvl_ping , wrapper -> client , RUBY_UBF_IO , 0 );
917
921
}
918
922
}
919
923
@@ -939,8 +943,8 @@ static VALUE rb_mysql_client_more_results(VALUE self)
939
943
*/
940
944
static VALUE rb_mysql_client_next_result (VALUE self )
941
945
{
942
- GET_CLIENT (self );
943
946
int ret ;
947
+ GET_CLIENT (self );
944
948
ret = mysql_next_result (wrapper -> client );
945
949
if (ret > 0 ) {
946
950
rb_raise_mysql2_error (wrapper );
@@ -965,7 +969,7 @@ static VALUE rb_mysql_client_store_result(VALUE self)
965
969
VALUE current ;
966
970
GET_CLIENT (self );
967
971
968
- result = (MYSQL_RES * )rb_thread_blocking_region (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
972
+ result = (MYSQL_RES * )rb_thread_call_without_gvl (nogvl_store_result , wrapper , RUBY_UBF_IO , 0 );
969
973
970
974
if (result == NULL ) {
971
975
if (mysql_errno (wrapper -> client ) != 0 ) {
@@ -1046,18 +1050,18 @@ static VALUE set_write_timeout(VALUE self, VALUE value) {
1046
1050
1047
1051
static VALUE set_charset_name (VALUE self , VALUE value ) {
1048
1052
char * charset_name ;
1053
+ #ifdef HAVE_RUBY_ENCODING_H
1049
1054
size_t charset_name_len ;
1050
1055
const struct mysql2_mysql_enc_name_to_rb_map * mysql2rb ;
1051
- #ifdef HAVE_RUBY_ENCODING_H
1052
1056
rb_encoding * enc ;
1053
1057
VALUE rb_enc ;
1054
1058
#endif
1055
1059
GET_CLIENT (self );
1056
1060
1057
1061
charset_name = RSTRING_PTR (value );
1058
- charset_name_len = RSTRING_LEN (value );
1059
1062
1060
1063
#ifdef HAVE_RUBY_ENCODING_H
1064
+ charset_name_len = RSTRING_LEN (value );
1061
1065
mysql2rb = mysql2_mysql_enc_name_to_rb (charset_name , charset_name_len );
1062
1066
if (mysql2rb == NULL || mysql2rb -> rb_name == NULL ) {
1063
1067
VALUE inspect = rb_inspect (value );
@@ -1097,7 +1101,7 @@ static VALUE set_secure_auth(VALUE self, VALUE value) {
1097
1101
static VALUE initialize_ext (VALUE self ) {
1098
1102
GET_CLIENT (self );
1099
1103
1100
- if (rb_thread_blocking_region (nogvl_init , wrapper -> client , RUBY_UBF_IO , 0 ) == Qfalse ) {
1104
+ if (( VALUE ) rb_thread_call_without_gvl (nogvl_init , wrapper -> client , RUBY_UBF_IO , 0 ) == Qfalse ) {
1101
1105
/* TODO: warning - not enough memory? */
1102
1106
return rb_raise_mysql2_error (wrapper );
1103
1107
}
0 commit comments