File tree Expand file tree Collapse file tree 3 files changed +9
-2
lines changed Expand file tree Collapse file tree 3 files changed +9
-2
lines changed Original file line number Diff line number Diff line change @@ -185,9 +185,10 @@ static VALUE nogvl_close(void *ptr) {
185
185
static void rb_mysql_client_free (void * ptr ) {
186
186
mysql_client_wrapper * wrapper = (mysql_client_wrapper * )ptr ;
187
187
188
- if ( wrapper -> refcount == 0 ) {
189
- nogvl_close (wrapper );
188
+ wrapper -> freed = 1 ;
189
+ nogvl_close (wrapper );
190
190
191
+ if (wrapper -> refcount == 0 ) {
191
192
xfree (wrapper -> client );
192
193
xfree (ptr );
193
194
}
@@ -203,6 +204,7 @@ static VALUE allocate(VALUE klass) {
203
204
wrapper -> connected = 0 ; /* means that a database connection is open */
204
205
wrapper -> initialized = 0 ; /* means that that the wrapper is initialized */
205
206
wrapper -> refcount = 0 ;
207
+ wrapper -> freed = 0 ;
206
208
wrapper -> client = (MYSQL * )xmalloc (sizeof (MYSQL ));
207
209
return obj ;
208
210
}
Original file line number Diff line number Diff line change @@ -39,6 +39,7 @@ typedef struct {
39
39
int connected ;
40
40
int initialized ;
41
41
int refcount ;
42
+ int freed ;
42
43
MYSQL * client ;
43
44
} mysql_client_wrapper ;
44
45
Original file line number Diff line number Diff line change @@ -73,6 +73,10 @@ static void rb_mysql_result_free_result(mysql2_result_wrapper * wrapper) {
73
73
mysql_free_result (wrapper -> result );
74
74
wrapper -> resultFreed = 1 ;
75
75
wrapper -> client_wrapper -> refcount -- ;
76
+ if (wrapper -> client_wrapper -> refcount == 0 && wrapper -> client_wrapper -> freed ) {
77
+ xfree (wrapper -> client_wrapper -> client );
78
+ xfree (wrapper -> client_wrapper );
79
+ }
76
80
}
77
81
}
78
82
You can’t perform that action at this time.
0 commit comments