RE: [dbi] Segmentation fault on RHEL4

2005-05-17 Thread Martin J. Evans
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

2005-05-17 Thread Stephen More
 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
  -