@@ -245,31 +245,21 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA
245
245
static MYSQLND_PFC *
246
246
MYSQLND_METHOD (mysqlnd_object_factory , get_pfc )(const zend_bool persistent , MYSQLND_STATS * stats , MYSQLND_ERROR_INFO * error_info )
247
247
{
248
- size_t pfc_alloc_size = sizeof (MYSQLND_PFC ) + mysqlnd_plugin_count () * sizeof (void * );
248
+ size_t pfc_alloc_size = ZEND_MM_ALIGNED_SIZE ( sizeof (MYSQLND_PFC ) + mysqlnd_plugin_count () * sizeof (void * ) );
249
249
size_t pfc_data_alloc_size = sizeof (MYSQLND_PFC_DATA ) + mysqlnd_plugin_count () * sizeof (void * );
250
- MYSQLND_PFC * pfc = mnd_pecalloc (1 , pfc_alloc_size , persistent );
251
- MYSQLND_PFC_DATA * pfc_data = mnd_pecalloc (1 , pfc_data_alloc_size , persistent );
250
+ MYSQLND_PFC * pfc = mnd_pecalloc (1 , pfc_alloc_size + pfc_data_alloc_size , persistent );
252
251
253
252
DBG_ENTER ("mysqlnd_object_factory::get_pfc" );
254
253
DBG_INF_FMT ("persistent=%u" , persistent );
255
- if (pfc && pfc_data ) {
256
- pfc -> data = pfc_data ;
254
+ if (pfc ) {
255
+ pfc -> data = ( MYSQLND_PFC_DATA * )(( char * ) pfc + pfc_alloc_size ) ;
257
256
pfc -> persistent = pfc -> data -> persistent = persistent ;
258
257
pfc -> data -> m = * mysqlnd_pfc_get_methods ();
259
258
260
259
if (PASS != pfc -> data -> m .init (pfc , stats , error_info )) {
261
260
pfc -> data -> m .dtor (pfc , stats , error_info );
262
261
pfc = NULL ;
263
262
}
264
- } else {
265
- if (pfc_data ) {
266
- mnd_pefree (pfc_data , persistent );
267
- pfc_data = NULL ;
268
- }
269
- if (pfc ) {
270
- mnd_pefree (pfc , persistent );
271
- pfc = NULL ;
272
- }
273
263
}
274
264
DBG_RETURN (pfc );
275
265
}
@@ -280,31 +270,21 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_pfc)(const zend_bool persistent, MYSQ
280
270
static MYSQLND_VIO *
281
271
MYSQLND_METHOD (mysqlnd_object_factory , get_vio )(const zend_bool persistent , MYSQLND_STATS * stats , MYSQLND_ERROR_INFO * error_info )
282
272
{
283
- size_t vio_alloc_size = sizeof (MYSQLND_VIO ) + mysqlnd_plugin_count () * sizeof (void * );
273
+ size_t vio_alloc_size = ZEND_MM_ALIGNED_SIZE ( sizeof (MYSQLND_VIO ) + mysqlnd_plugin_count () * sizeof (void * ) );
284
274
size_t vio_data_alloc_size = sizeof (MYSQLND_VIO_DATA ) + mysqlnd_plugin_count () * sizeof (void * );
285
- MYSQLND_VIO * vio = mnd_pecalloc (1 , vio_alloc_size , persistent );
286
- MYSQLND_VIO_DATA * vio_data = mnd_pecalloc (1 , vio_data_alloc_size , persistent );
275
+ MYSQLND_VIO * vio = mnd_pecalloc (1 , vio_alloc_size + vio_data_alloc_size , persistent );
287
276
288
277
DBG_ENTER ("mysqlnd_object_factory::get_vio" );
289
278
DBG_INF_FMT ("persistent=%u" , persistent );
290
- if (vio && vio_data ) {
291
- vio -> data = vio_data ;
279
+ if (vio ) {
280
+ vio -> data = ( MYSQLND_VIO_DATA * )(( char * ) vio + vio_alloc_size ) ;
292
281
vio -> persistent = vio -> data -> persistent = persistent ;
293
282
vio -> data -> m = * mysqlnd_vio_get_methods ();
294
283
295
284
if (PASS != vio -> data -> m .init (vio , stats , error_info )) {
296
285
vio -> data -> m .dtor (vio , stats , error_info );
297
286
vio = NULL ;
298
287
}
299
- } else {
300
- if (vio_data ) {
301
- mnd_pefree (vio_data , persistent );
302
- vio_data = NULL ;
303
- }
304
- if (vio ) {
305
- mnd_pefree (vio , persistent );
306
- vio = NULL ;
307
- }
308
288
}
309
289
DBG_RETURN (vio );
310
290
}
0 commit comments