RE: [dbi] Segmentation fault on RHEL4
Search this list for similar issue I previously replied to. You are probably getting this because you have mixed Perl, unixODBC, MySQL where some were built with -pthread and some were not. What seems to happen is that some internal structure used by dlopen/dlclose is different when built threaded or not (on some Linuxes/glibcs). Try adding DontDLClose = 1 to the driver entry in odbcinst.ini. Try rebuilding unixODBC and MySQL with -pthread to make them all the same. Martin -- Martin J. Evans Easysoft Ltd, UK Development On 16-May-2005 Stephen More wrote: I have compiled DBD-ODBC-1.13 on RedHat Enterprise Linux 4. Failed 2/9 test scripts, 77.78% okay. 6/137 subtests failed, 95.62% okay. Good enough for me so I installed it. I am using unixODBC-2.2.9-. connecting with isql is fine: $isql mysql1 root Yet a simple perl script: #!/usr/bin/perl -w use strict; use DBD::ODBC; DBI-trace( 1000 ); my( $dbh ) = DBI-connect( dbi:ODBC:mysql1, root ); creates a Segmentation fault... $ ./odbc.pl DBI 1.40-ithread dispatch trace level set to 1000 (in pid 9488) - DBI-connect(dbi:ODBC:mysql1, root, ) - DBI-install_driver(ODBC) for linux perl=5.008005 pid=9488 ruid=501 euid=501 install_driver: DBD::ODBC version 1.13 loaded from /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/DBD/ODBC.pm New DBI::dr (for DBD::ODBC::dr, parent=, id=) dbih_setup_handle(DBI::dr=HASH(0x8d95808)=DBI::dr=HASH(0x8df7e78), DBD::ODBC::dr, 0, Null!) dbih_make_com(Null!, 0, DBD::ODBC::dr, 92, 0) thr#8c99008 dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), Err, Null!) SCALAR(0x8cb4a14) (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), State, Null!) SCALAR(0x8cba338) (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), Errstr, Null!) SCALAR(0x8cba314) (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), TraceLevel, Null!) 0 (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), FetchHashKeyName, Null!) 'NAME' (already defined) - install_driver= DBI::dr=HASH(0x8d95808) default_user DISPATCH (DBI::dr=HASH(0x8d95808) rc1/3 @4 g1 ima1 pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 572 via ./odbc2.pl line 9 - default_user in DBD::_::dr for DBD::ODBC::dr (DBI::dr=HASH(0x8d95808)~0x8df7e78 'root' undef HASH(0x8d610a0)) thr#8c99008 - default_user= ( 'root' undef ) [2 items] at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 572 via ./odbc2.pl line 9 connect DISPATCH (DBI::dr=HASH(0x8d95808) rc2/3 @5 g0 ima1 pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 590 - connect for DBD::ODBC::dr (DBI::dr=HASH(0x8d95808)~0x8df7e78 'mysql1' 'root' HASH(0x8df9084)) thr#8c99008 New DBI::db (for DBD::ODBC::db, parent=DBI::dr=HASH(0x8df7e78), id=) dbih_setup_handle(DBI::db=HASH(0x8df7e3c)=DBI::db=HASH(0x8df90d8), DBD::ODBC::db, 8d92f38, Null!) dbih_make_com(DBI::dr=HASH(0x8df7e78), 8df8460, DBD::ODBC::db, 224, 0) thr#8c99008 dbih_setup_attrib(DBI::db=HASH(0x8df90d8), Err, DBI::dr=HASH(0x8df7e78)) SCALAR(0x8d99280) (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), State, DBI::dr=HASH(0x8df7e78)) SCALAR(0x8d992e0) (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), Errstr, DBI::dr=HASH(0x8df7e78)) SCALAR(0x8d992b0) (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), TraceLevel, DBI::dr=HASH(0x8df7e78)) 0 (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), FetchHashKeyName, DBI::dr=HASH(0x8df7e78)) 'NAME' (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), HandleError, DBI::dr=HASH(0x8df7e78)) undef (not defined) Driver connect 'mysql1', 'root', '' SQLDriverConnect failed: SQLConnect 'mysql1', 'root' Connected to: MySQL SQLGetFunctions - SQL_MoreResults supported: 1 - connect= DBI::db=HASH(0x8df7e3c) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 590 STORE DISPATCH (DBI::db=HASH(0x8df90d8) rc2/1 @3 g0 ima41c pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 633 - STORE for DBD::ODBC::db (DBI::db=HASH(0x8df90d8)~INNER 'PrintError' 1) thr#8c99008 DBD::ODBC unsupported attribute passed (PrintError) STORE DBI::db=HASH(0x8df90d8) 'PrintError' = 1 - STORE= 1 at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 633 STORE DISPATCH (DBI::db=HASH(0x8df90d8) rc2/1 @3 g0 ima41c pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 633 - STORE for DBD::ODBC::db (DBI::db=HASH(0x8df90d8)~INNER 'AutoCommit' 1) thr#8c99008 - STORE= 1 at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 633 STORE DISPATCH (DBI::db=HASH(0x8df90d8) rc2/1 @3 g0 ima41c pid#9488) at
Re: [dbi] Segmentation fault on RHEL4
You are probably getting this because you have mixed Perl, unixODBC, MySQL where some were built with -pthread and some were not. Can this be proven with ldd ? It looks like all are linked with libpthread.so.0 $ ldd /usr/bin/perl | grep -i pthread libpthread.so.0 = /lib/tls/libpthread.so.0 (0x00a65000) $ ldd /usr/lib/libodbc.so.1.0.0 | grep -i thread libpthread.so.0 = /lib/tls/libpthread.so.0 (0x00a65000) $ ldd /usr/lib/libmyodbc3.so | grep -i pthread libpthread.so.0 = /lib/tls/libpthread.so.0 (0x00dd3000) $ ldd /opt/ibm/iSeriesAccess/lib/libcwbodbc.so | grep -i pthread libpthread.so.0 = /lib/tls/libpthread.so.0 (0x005f4000) $ ldd /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/ODBC/ODBC.so | grep -i pthread libpthread.so.0 = /lib/tls/libpthread.so.0 (0x00c27000) What seems to happen is that some internal structure used by dlopen/dlclose is different when built threaded or not (on some Linuxes/glibcs). Try adding DontDLClose = 1 to the driver entry in odbcinst.ini. This did not seem to help. Try rebuilding unixODBC and MySQL with -pthread to make them all the same. I'll give that a shot. -Steve More On 16-May-2005 Stephen More wrote: I have compiled DBD-ODBC-1.13 on RedHat Enterprise Linux 4. Failed 2/9 test scripts, 77.78% okay. 6/137 subtests failed, 95.62% okay. Good enough for me so I installed it. I am using unixODBC-2.2.9-. connecting with isql is fine: $isql mysql1 root Yet a simple perl script: #!/usr/bin/perl -w use strict; use DBD::ODBC; DBI-trace( 1000 ); my( $dbh ) = DBI-connect( dbi:ODBC:mysql1, root ); creates a Segmentation fault... $ ./odbc.pl DBI 1.40-ithread dispatch trace level set to 1000 (in pid 9488) - DBI-connect(dbi:ODBC:mysql1, root, ) - DBI-install_driver(ODBC) for linux perl=5.008005 pid=9488 ruid=501 euid=501 install_driver: DBD::ODBC version 1.13 loaded from /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/DBD/ODBC.pm New DBI::dr (for DBD::ODBC::dr, parent=, id=) dbih_setup_handle(DBI::dr=HASH(0x8d95808)=DBI::dr=HASH(0x8df7e78), DBD::ODBC::dr, 0, Null!) dbih_make_com(Null!, 0, DBD::ODBC::dr, 92, 0) thr#8c99008 dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), Err, Null!) SCALAR(0x8cb4a14) (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), State, Null!) SCALAR(0x8cba338) (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), Errstr, Null!) SCALAR(0x8cba314) (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), TraceLevel, Null!) 0 (already defined) dbih_setup_attrib(DBI::dr=HASH(0x8df7e78), FetchHashKeyName, Null!) 'NAME' (already defined) - install_driver= DBI::dr=HASH(0x8d95808) default_user DISPATCH (DBI::dr=HASH(0x8d95808) rc1/3 @4 g1 ima1 pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 572 via ./odbc2.pl line 9 - default_user in DBD::_::dr for DBD::ODBC::dr (DBI::dr=HASH(0x8d95808)~0x8df7e78 'root' undef HASH(0x8d610a0)) thr#8c99008 - default_user= ( 'root' undef ) [2 items] at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 572 via ./odbc2.pl line 9 connect DISPATCH (DBI::dr=HASH(0x8d95808) rc2/3 @5 g0 ima1 pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 590 - connect for DBD::ODBC::dr (DBI::dr=HASH(0x8d95808)~0x8df7e78 'mysql1' 'root' HASH(0x8df9084)) thr#8c99008 New DBI::db (for DBD::ODBC::db, parent=DBI::dr=HASH(0x8df7e78), id=) dbih_setup_handle(DBI::db=HASH(0x8df7e3c)=DBI::db=HASH(0x8df90d8), DBD::ODBC::db, 8d92f38, Null!) dbih_make_com(DBI::dr=HASH(0x8df7e78), 8df8460, DBD::ODBC::db, 224, 0) thr#8c99008 dbih_setup_attrib(DBI::db=HASH(0x8df90d8), Err, DBI::dr=HASH(0x8df7e78)) SCALAR(0x8d99280) (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), State, DBI::dr=HASH(0x8df7e78)) SCALAR(0x8d992e0) (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), Errstr, DBI::dr=HASH(0x8df7e78)) SCALAR(0x8d992b0) (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), TraceLevel, DBI::dr=HASH(0x8df7e78)) 0 (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), FetchHashKeyName, DBI::dr=HASH(0x8df7e78)) 'NAME' (already defined) dbih_setup_attrib(DBI::db=HASH(0x8df90d8), HandleError, DBI::dr=HASH(0x8df7e78)) undef (not defined) Driver connect 'mysql1', 'root', '' SQLDriverConnect failed: SQLConnect 'mysql1', 'root' Connected to: MySQL SQLGetFunctions - SQL_MoreResults supported: 1 - connect= DBI::db=HASH(0x8df7e3c) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 590 STORE DISPATCH (DBI::db=HASH(0x8df90d8) rc2/1 @3 g0 ima41c pid#9488) at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 633 -