Perl Guru's,

I am having a wierd problem connecting to a MS SQLServer 2000 database from
Perl on an NT/2000 box.  The symptoms are as follows:

I'm using DBI and DBD::ODBC to connect to a MS SQLServer 2000 database.
After all code is done executing, and the program is ready to exit, a
system error occurs.  A pop-up box with the following message appers:
  The instruction at "0x1f9cdb6a" referenced memory at "0x1f9cdb6a".  The
memory could not be "read"
  Click on OK to terminate the application
  Click on CANCEL to debug the application

If I click CANCEL and debug the process using VisualStudio.NET, I can view
the stack trace.  The stack looks like this:

     1f9cdb88()
     odbc32.dll!1f7b7e7b()
     odbc32.dll!1f7b7d79()
     ODBC.dll!01f43db7()
     DBI.dll!100027d6()
     perl56.dll!2803bafe()
     perl56.dll!2801f042()
     perl56.dll!28058027()
     perl56.dll!28058539()
     perl56.dll!28058539()
     perl56.dll!28058539()
     perl56.dll!280534f1()

A have a whole collection of scripts that use DBI and DBD::ODBC, some of
which fail on exit while others don't.  And the ones that do fail on exit
are very flaky..by adding a print statement or commenting out code I can
make the scripts fail or not fail (of course it's all trial and error,
since I never know what changes will affect the failure).  Incidentally, I
do a finish on all my statement handles, and a disconnect from all my
database connections.  However, not doing a finish or a disconnect does not
affect the crashing.

I've tried swapping out every part of the system I can think of with no
results.  Here are some of the configs I've tried:

OS:
  Windows NT    (one machine)
  Windows 2000 (a different machine)
Perl
  ActivePerl v5.6.1 build 631
  IndigoPerl v5.6.1 build 626
DBI
  1.13
  1.21 (compiled myself from CPAN)
DBD::ODBC
  0.28 (binary distribution from ActiveState and IndigoStar)
  0.41 (compiled myself from CPAN)
MS SQLServer ODBC Driver
  2000.81.7713.0
  2000.81.9001.0

Something to note is that the error message changes slightly when I use my
self-compiled versions of DBI and DBD::ODBC.  The first line of the message
changes to:
  The instruction at "0x1f9cdb88" referenced memory at "0x1f9cdb88".

I've also turned on ODBC tracing and it appear to never return from
SQLFreeStmt at the end of the script:

[ lots of stuff snipped ]
perl contactInf 17c-177  ENTER SQLDisconnect
          HDBC                01F61520

perl contactInf 17c-177  EXIT  SQLDisconnect  with return code 0
(SQL_SUCCESS)
          HDBC                01F61520

perl contactInf 17c-177  ENTER SQLFreeConnect
          HDBC                01F61520

perl contactInf 17c-177  EXIT  SQLFreeConnect  with return code 0
(SQL_SUCCESS)
          HDBC                01F61520

perl contactInf 17c-177  ENTER SQLFreeEnv
          HENV                01F61478

perl contactInf 17c-177  EXIT  SQLFreeEnv  with return code 0 (SQL_SUCCESS)
          HENV                01F61478

perl contactInf 17c-177  ENTER SQLFreeStmt
          HSTMT               01F61C40
          UWORD                        1 <SQL_DROP>


I've checked through numerous other resources (usenet groups, ActiveState
bug database), and this appears to be happening to other people as well.
But since the problem is so transient, and I assume hard to replicate on
other systems, nobody ever responds with thoughts about what might actually
fix the problem.  The only solution I found was one person who stopped
using the File::Basename package, which I belive just masked the problem in
his specific script.

You can find other documentation of similar problems at the ActiveState bug
datbase, ticket numbers 17439, 15905, and 15682.    Also the usenet article
at the following link:
http://groups.google.com/groups?hl=en&th=9ce70b8940eef854&seekm=VA.00000008.001c92c0%40fox-europe.com&frame=off

Thanks in advance for any help/suggestions you can provide.  If there is
more information you would like to see, just let me know, and I'd be happy
to provide it.

Ryan Hope
Systems Engineer
Arris Systems, Inc.

Reply via email to