|
/* un endroit pour stocker la table de fonction originale */ struct st_mysqlnd_conn_methods org_methods; void minit_register_hooks(TSRMLS_D) { /* table de fonction active */ struct st_mysqlnd_conn_methods * current_methods = mysqlnd_conn_get_methods(); /* sauvegarde de la table de fonction originale */ memcpy(&org_methods, current_methods, sizeof(struct st_mysqlnd_conn_methods); /* installation des nouvelles méthodes */ current_methods->query = MYSQLND_METHOD(my_conn_class, query); }
|
|
/* a place to store original function table */ struct st_mysqlnd_conn_methods org_methods; void minit_register_hooks(TSRMLS_D) { /* active function table */ struct st_mysqlnd_conn_methods * current_methods = mysqlnd_conn_get_methods(); /* backup original function table */ memcpy(&org_methods, current_methods, sizeof(struct st_mysqlnd_conn_methods); /* install new methods */ current_methods->query = MYSQLND_METHOD(my_conn_class, query); }
|
|
La manipulación de la tabla de funciones de conexión debe hacerse durante la Inicialización de Módulos (MINIT). La tabla de funciones es un recurso global compartido. En un entorno multihilo, con un TSRM construido, la manipulación de un recurso global compartido durante el proceso de peticiones resultará en conflictos casi con toda seguridad.
|
|
/* хранилище оригинальной таблицы */ struct st_mysqlnd_conn_methods org_methods; void minit_register_hooks(TSRMLS_D) { /* активная таблица функций */ struct st_mysqlnd_conn_methods * current_methods = mysqlnd_conn_get_methods(); /* бэкап оригинальной таблицы */ memcpy(&org_methods, current_methods, sizeof(struct st_mysqlnd_conn_methods); /* установка новых методов */ current_methods->query = MYSQLND_METHOD(my_conn_class, query); }
|