--- Coro-Mysql/Mysql.xs 2009/06/16 17:28:00 1.2 +++ Coro-Mysql/Mysql.xs 2009/06/20 20:43:44 1.3 @@ -8,6 +8,8 @@ #include "perl.h" #include "XSUB.h" +#define IN_DESTRUCT PL_dirty + typedef U16 uint16; /* cached function gv's */ @@ -151,24 +153,27 @@ void _unpatch (IV sock) CODE: -{ - MYSQL *my = (MYSQL *)sock; - Vio *vio = my->net.vio; - my_bool dummy; + if (IN_DESTRUCT) + { + /* we currently leak data during global destruction */ + /* perl makes it extremely hard to do otherwise, though */ + MYSQL *my = (MYSQL *)sock; + Vio *vio = my->net.vio; + my_bool dummy; + + if (vio->read != our_read) + croak ("vio.read has unexpected content during unpatch - wtf?"); + + if (vio->write != our_write) + croak ("vio.write has unexpected content during unpatch - wtf?"); - if (vio->read != our_read) - croak ("vio.read has unexpected content during unpatch - wtf?"); + SvREFCNT_dec (OURDATAPTR->corosocket); - if (vio->write != our_write) - croak ("vio.write has unexpected content during unpatch - wtf?"); + Safefree (OURDATAPTR); - SvREFCNT_dec (OURDATAPTR->corosocket); - - Safefree (OURDATAPTR); - - vio->read = vio_read; - vio->write = vio_write; -} + vio->read = vio_read; + vio->write = vio_write; + }