On 6/20/20 1:51 PM, Scott wrote:
More info, this error does not occur with DBD::Oracle 1.76.

DBD::Oracle 1.80 => works with 18c client,  but fails with 19c.
DBD::Oracle 1.76 => works with all client versions.


On 6/19/20 5:48 PM, Scott wrote:
We have run into an issue when we upgraded to Oracle client 19c. Some of the users processes are segfaulting on exit.

#0  0x00007f82ee84ccc0 in pthread_mutex_lock () from /lib64/libpthread.so.0 #1  0x00007f82e6444f43 in kputxabt () from /u01/app/oracle/product/19.3.0.0/lib/libclntsh.so.19.1 #2  0x00007f82e926e6c3 in ora_db_rollback () from /usr/local/perl-5.22.0-thr/lib/site_perl/5.22.0/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so #3  0x00007f82e9266b11 in XS_DBD__Oracle__db_DESTROY () from /usr/local/perl-5.22.0-thr/lib/site_perl/5.22.0/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so #4  0x00007f82ed10291d in XS_DBI_dispatch () from /usr/local/perl-5.22.0-thr/lib/site_perl/5.22.0/x86_64-linux-thread-multi/auto/DBI/DBI.so

I tested the same process on a server still  using the 18c client and the core dump does not happen.  Our DBA is creating ticket with Oracle, but I wanted to see if anyone else has had the same issue.

Thanks,

Scott

I assuming this is the change causing the segfault with 19c client.

 Destroy envhp with last dbh (GH#93, GH#89, Dean Hamstead, CarstenGrohmann)

 diff -w ../DBD-Oracle-1.76/dbdimp.c ./dbdimp.c 1
218,222d217
<       if (imp_drh->envhp) {
<               /* Free cached environment handle. */
<               OCIHandleFree_log_stat(imp_drh, imp_drh->envhp, OCI_HTYPE_ENV, status);
<       }
<
319c314
<       case ORA_XMLTYPE:               /* SQLT_NTY must be carefull here as its value (108) is the same for an embedded object Well realy only XML clobs not embedded objects  */
---
>       case ORA_XMLTYPE:               /* SQLT_NTY must be careful here as its value (108) is the same for an embedded object Well really only XML clobs not embedded objects */
863c858
<                               session_pool_t pool_data = { };
---
>                               session_pool_t pool_data = {0};
1258a1254
>                       /* free session environment handle */
1260a1257,1266
>                               if ( status == OCI_SUCCESS ) {
> imp_dbh->envhp = NULL;
>                               }
>                       /* free global environment handle during destruction of last connection */ >                       } else if ( (imp_dbh->envhp == imp_drh->envhp) && (SvTRUE(perl_get_sv("DBI::PERL_ENDING",0))) ) {
> OCIHandleFree_log_stat(imp_dbh, imp_dbh->envhp, OCI_HTYPE_ENV, status);
>                               if ( status == OCI_SUCCESS ) {
> imp_dbh->envhp = NULL;
> imp_drh->envhp = NULL;
>                               }
3739c3745
<                 as we may have more thatn one exe on a prepare*/
---
>                 as we may have more than one exe on a prepare*/
4779c4785
<     bool can_taf = 0;
---
>     boolean can_taf = 0;

Reply via email to