[DBD-SQLite] load_extension("perlvtab.so")
Brian Duggan
bduggan at matatu.org
Fri Oct 30 00:50:54 GMT 2009
On Thursday, October 29, Tim Bunce wrote:
> What does "print *imp_xxh->com.std.dbistate" show in gdb?
(gdb) print *imp_xxh->com.std.dbistate
$1 = {check_version = 0xae79c0 <check_version>, version = 94, size = 108, xs_version = 93, spare_pad = 0,
debug = 0, logfp = 0x95bac94, neat_svpv = 0xaebd40 <neatsvpv>, getcom = 0xaf5b70 <dbih_getcom>,
clearcom = 0xaf4fa0 <dbih_clearcom>, event = 0xae7b10 <dbih_event>, set_attr_k = 0xaf2de0 <dbih_set_attr_k>,
get_attr_k = 0xaf1840 <dbih_get_attr_k>, get_fbav = 0xaef8e0 <dbih_get_fbav>,
make_fdsv = 0xaff320 <dbih_make_fdsv>, bind_as_num = 0xae77e0 <quote_type>, hash = 0xaea140 <dbi_hash>,
preparse = 0, neatsvpvlen = 0x95f8ac0, thr_owner = 0x959c008, logmsg = 0xaeab90 <dbih_logmsg>,
set_err_sv = 0xaee450 <set_err_sv>, set_err_char = 0xaef6e0 <set_err_char>,
bind_col = 0xaedf40 <dbih_sth_bind_col>, logfp_ref = 0x0, pad2 = {0x0, 0x0, 0x0, 0x0}}
> This may help, or it may just shift or hide the underlying problem:
>
> --- DBI.xs (revision 13337)
> +++ DBI.xs (working copy)
> @@ -1436,7 +1436,7 @@
> dPERINTERP;
> dTHR;
> int dump = FALSE;
> - int debug = DBIS_TRACE_LEVEL;
> + int debug = DBIc_TRACE_LEVEL(imp_xxh);
> int auto_dump = (debug >= 6);
> imp_xxh_t * const parent_xxh = DBIc_PARENT_COM(imp_xxh);
> /* Note that we're very much on our own here. DBIc_MY_H(imp_xxh) almost */
I applied that to DBI-1.609, and re-ran the test. Here's the output :
~$ perl test.pl
Segmentation fault (core dumped)
~$ gdb -c core perl
[..]
Core was generated by `perl test.pl'.
Program terminated with signal 11, Segmentation fault.
#0 0x00e3e001 in dbih_clearcom (imp_xxh=0x843e388) at DBI.xs:1429
1429 dPERINTERP;
(gdb) where
#0 0x00e3e001 in dbih_clearcom (imp_xxh=0x843e388) at DBI.xs:1429
#1 0x00e3095d in XS_DBD___mem__common_DESTROY (my_perl=0x82f3008, cv=0x8359978) at DBI.xs:5135
#2 0x080b12c0 in Perl_pp_entersub (my_perl=0x82f3008) at pp_hot.c:2866
#3 0x080ad2f2 in Perl_call_sv (my_perl=0x82f3008, sv=0x8359978, flags=150) at perl.c:2653
#4 0x080c3293 in Perl_sv_clear (my_perl=0x82f3008, sv=0x8450720) at sv.c:5122
#5 0x080c398a in Perl_sv_free2 (my_perl=0x82f3008, sv=0x8450720) at sv.c:5368
#6 0x08098d86 in Perl_mg_free (my_perl=0x82f3008, sv=0x8450680) at mg.c:498
#7 0x080c349e in Perl_sv_clear (my_perl=0x82f3008, sv=0x8450680) at sv.c:5159
#8 0x080c398a in Perl_sv_free2 (my_perl=0x82f3008, sv=0x8450680) at sv.c:5368
#9 0x080b8b19 in S_visit (my_perl=<value optimized out>, f=<value optimized out>, flags=2048, mask=2048)
at sv.c:387
#10 0x080b8b79 in Perl_sv_clean_objs (my_perl=0x82f3008) at sv.c:495
#11 0x080af3c7 in perl_destruct (my_perl=0x82f3008) at perl.c:799
#12 0x08063fa5 in main (argc=2, argv=0xbff415d4, env=0xbff415e0) at perlmain.c:115
(gdb) print *imp_xxh->com.std.dbistate
$1 = {check_version = 0xe309c0 <check_version>, version = 94, size = 108, xs_version = 93, spare_pad = 0,
debug = 0, logfp = 0x8311c44, neat_svpv = 0xe34d40 <neatsvpv>, getcom = 0xe3eb80 <dbih_getcom>,
clearcom = 0xe3dfa0 <dbih_clearcom>, event = 0xe30b10 <dbih_event>, set_attr_k = 0xe3bde0 <dbih_set_attr_k>,
get_attr_k = 0xe3a840 <dbih_get_attr_k>, get_fbav = 0xe388e0 <dbih_get_fbav>,
make_fdsv = 0xe48330 <dbih_make_fdsv>, bind_as_num = 0xe307e0 <quote_type>, hash = 0xe33140 <dbi_hash>,
preparse = 0, neatsvpvlen = 0x834f9c8, thr_owner = 0x82f3008, logmsg = 0xe33b90 <dbih_logmsg>,
set_err_sv = 0xe37450 <set_err_sv>, set_err_char = 0xe386e0 <set_err_char>,
bind_col = 0xe36f40 <dbih_sth_bind_col>, logfp_ref = 0x0, pad2 = {0x0, 0x0, 0x0, 0x0}}
-Brian
More information about the DBD-SQLite
mailing list