diff --git a/perl/MessagePack.c b/perl/MessagePack.c index 3b33fee1..e5835268 100644 --- a/perl/MessagePack.c +++ b/perl/MessagePack.c @@ -18,6 +18,7 @@ XS(xs_unpacker_execute_limit); XS(xs_unpacker_is_finished); XS(xs_unpacker_data); XS(xs_unpacker_reset); +XS(xs_unpacker_destroy); XS(boot_Data__MessagePack) { dXSARGS; @@ -35,6 +36,6 @@ XS(boot_Data__MessagePack) { newXS("Data::MessagePack::Unpacker::is_finished", xs_unpacker_is_finished, __FILE__); newXS("Data::MessagePack::Unpacker::data", xs_unpacker_data, __FILE__); newXS("Data::MessagePack::Unpacker::reset", xs_unpacker_reset, __FILE__); - + newXS("Data::MessagePack::Unpacker::DESTROY", xs_unpacker_destroy, __FILE__); } diff --git a/perl/unpack.c b/perl/unpack.c index c2e32dd8..5a28fef9 100644 --- a/perl/unpack.c +++ b/perl/unpack.c @@ -288,3 +288,14 @@ XS(xs_unpacker_reset) { XSRETURN(0); } +XS(xs_unpacker_destroy) { + dXSARGS; + if (items != 1) { + Perl_croak(aTHX_ "Usage: $unpacker->DESTROY()"); + } + + UNPACKER(ST(0), mp); + Safefree(mp); + + XSRETURN(0); +}