--- Coro-Mysql/Mysql.xs 2013/08/02 04:08:56 1.10 +++ Coro-Mysql/Mysql.xs 2014/06/03 03:08:34 1.13 @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -37,6 +37,9 @@ ev_io rw, ww; #endif char buf[VIO_READ_BUFFER_SIZE]; + size_t (*old_read)(Vio*, uchar *, size_t); + size_t (*old_write)(Vio*, const uchar *, size_t); + int (*old_vioclose)(Vio*); } ourdata; #if DESC_IS_PTR @@ -180,9 +183,9 @@ Safefree (our); - vio->read = vio_read; - vio->write = vio_write; - vio->vioclose = vio_close; + vio->vioclose = our->old_vioclose; + vio->write = our->old_write; + vio->read = our->old_read; vio->vioclose (vio); } @@ -243,7 +246,7 @@ if (fd != vio->sd) croak ("DBD::mysql fd and vio-sd disagree - library mismatch, unsupported transport or API changes?"); - +#if MYSQL_VERSION_ID < 100010 && !defined(MARIADB_BASE_VERSION) if (vio->vioclose != vio_close) croak ("vio.vioclose has unexpected content - library mismatch, unsupported transport or API changes?"); @@ -253,6 +256,7 @@ if (vio->read != vio_read && vio->read != vio_read_buff) croak ("vio.read has unexpected content - library mismatch, unsupported transport or API changes?"); +#endif Newz (0, our, 1, ourdata); our->magic = CoMy_MAGIC; @@ -274,6 +278,10 @@ #endif OURDATAPTR = our; + our->old_vioclose = vio->vioclose; + our->old_write = vio->write; + our->old_read = vio->read; + vio->vioclose = our_close; vio->write = our_write; vio->read = our_read;