--- BDB/BDB.xs 2008/07/29 03:33:16 1.48 +++ BDB/BDB.xs 2008/09/25 12:28:49 1.49 @@ -1,3 +1,6 @@ +#include +#include + #define X_STACKSIZE 1024 * 128 + sizeof (long) * 64 * 1024 / 4 #include "xthread.h" @@ -134,10 +137,11 @@ if (sv) { SvREADONLY_off (sv); - sv_setpvn_mg (sv, dbt->data, dbt->size); + sv_setsv_mg (sv, dbt->data ? newSVpvn (dbt->data, dbt->size) : &PL_sv_undef); SvREFCNT_dec (sv); } + //assert (dbt->flags & DBT_MALLOC || !dbt->data); free (dbt->data); } @@ -528,6 +532,7 @@ PUSHMARK (SP); PUTBACK; call_sv (cb, G_DISCARD | G_EVAL); + SPAGAIN; } // synthesize callback if none given @@ -545,7 +550,6 @@ croak ("prepare callback must return exactly two values\n"); wait_callback = POPs; - SvREFCNT_dec (req->callback); req->callback = SvREFCNT_inc (POPs); } @@ -756,7 +760,7 @@ --nready; X_UNLOCK (reqlock); - + switch (req->type) { case REQ_QUIT: