1

I had a classic ASP working site on Windows 2012. Everything worked ok. Since I moved it to 2016 machine (same DB, same files), w3wp.exe is crashing every few minutes ;-(

I did the dump and there seems to be this 2 errors every time there is a crash:

In w3wp__xxx.net(domain)(pool)__PID__8764__Date__06_06_2017__Time_05_57_31PM__204__Second_Chance_Exception_C0000374.dmp the assembly instruction at ntdll!RtlReportCriticalFailure+89 in C:\Windows\System32\ntdll.dll from Microsoft Corporation has caused a corrupted heap exception (0xC0000374) when trying to perform an unknown operation on memory location 0x00000000 on thread 48 Current NTGlobalFlags value: 0x0

The second one

A COM+ STA Activity Pileup has been detected in w3wp__xxx.net(domain)(pool)__PID__8764__Date__06_06_2017__Time_05_57_31PM__204__Second_Chance_Exception_C0000374.dmp. There is more than one activity bound to every COM+ STA ThreadPool thread.

I think the first one is the problem one, if I look at the thread under it:

Thread 48 - System ID 9056

Entry point msvcrt!_threadstartex Create time 6.6.2017 17:53:57 Time spent in user mode 0 Days 00:00:00.359 Time spent in kernel mode 0 Days 00:00:00.343

This thread is making a database operation using ADO.

The call to MSADO15!CCONNECTION::EXECUTE originated from vbscript!IDispatchInvoke2+76

ntdll!RtlReportCriticalFailure+89 ntdll!RtlpReportHeapFailure+32 ntdll!RtlpLogHeapFailure+9f ntdll!RtlFreeHeap+ac AcLayers!NS_FaultTolerantHeap::APIHook_RtlFreeHeap+3f70 msvcr120!free+1a msvcr120!__freetlocinfo+13e msvcr120!_updatetlocinfoEx_nolock+40 msvcr120!__updatetlocinfo+5f msvcr120!_LocaleUpdate::_LocaleUpdate+3e msvcr120!_input_l+10f msvcr120!vscan_fn+6a msvcr120!sscanf+19 myodbc5w!SQLGetCursorNameW+22887 myodbc5w!SQLGetCursorNameW+23c13 myodbc5w!SQLGetCursorNameW+169f0 myodbc5w!SQLGetCursorNameW+16399 odbc32!SetStmtAttr+5d1 odbc32!SQLSetStmtAttrW+91 msdasql!CKagRowsetProps::SetODBCOptions+1cd msdasql!CKagRowsetProps::FindCapableCC+575 msdasql!CImpICommandText::Execute+ddd msado15!CConnection::Execute+b1 msado15!_ExecuteAsync+1da msado15!ExecuteAsync+59 msado15!CQuery::Execute+fae msado15!CCommand::_Execute+18a msado15!CConnection::OpenRecordset+df msado15!CConnection::ExecuteWithModeFlag+622 msado15!CConnection::Execute+67 msado15!CConnection::Invoke+de2d vbscript!IDispatchInvoke2+76 vbscript!InvokeDispatch+4fa vbscript!CScriptRuntime::RunNoEH+f79 vbscript!CScriptRuntime::Run+dc vbscript!CScriptEntryPoint::Call+f3 vbscript!CSession::Execute+3a0 vbscript!COleScript::ExecutePendingScripts+14b vbscript!COleScript::SetScriptState+62 asp!CActiveScriptEngine::TryCall+2e asp!CActiveScriptEngine::Call+3d asp!CallScriptFunctionOfEngine+58 asp!ExecuteRequest+159 asp!Execute+237 asp!CHitObj::ViperAsyncCallback+425 asp!CViperAsyncRequest::OnCall+7e comsvcs!CSTAActivityWork::STAActivityWorkHelper+50 combase!EnterForCallback+142 combase!SwitchForCallback+1c6 combase!PerformCallback+b0 combase!CObjectContext::InternalContextCallback+10d combase!CObjectContext::DoCallback+31 comsvcs!CSTAActivityWork::DoWork+175 comsvcs!CSTAThread::ProcessQueueWork+68 comsvcs!CSTAThread::WorkerLoop+173 msvcrt!_callthreadstartex+25 msvcrt!_threadstartex+61 kernel32!BaseThreadInitThunk+24 ntdll!__RtlUserThreadStart+2f ntdll!_RtlUserThreadStart+1b

I can not figure out what does this mean... I use mysql 5.7 and myODBC, it is the same as on the old windows 2012.

It seems that ADo is failing or what? But not every time, as I have connections every second and the w3wp.exe is failing every few minutes, sometimes 3 times in a row, sometimes 20 minute without fail.

Can anybody share some ideas please, I'll have to go back to old server and I am quite desperate. Can the msado15.dll be broken on windows 2016? The files are ok, I checked with the windows shell file checker.

Is it possible to get a support from MS somehow? Free or payed...

Thanx

2 Answers 2

2

I have found the problem, thanx for the help. It wasn't my code... Oracle's myODBC since 5.3.4 is severly corrupted with heap memory problems ;-( Confirmed in a bug report from someone but Oracle doesn't fix it...

5.3.6 and up version produce this kind of problems, reverting to 2014 5.3.4 version and everything is OK again...

0

Clearly you're dealing with a null pointer being passed to ADO. You need to look at the places your code calls ADO and make sure none of the parameters are null:

set rs=Server.CreateObject("ADODB.recordset")
If rs is Nothing then
  Response.Write("We have a problem with rs")
  Exit Sub
endif
If conn is Nothing then
  Response.Write("We have a problem with conn")
  Exit Sub
endif
rs.Open "Customers", conn

It's not too difficult to move apps from ASP to ASP.net if the apps don't generate a lot of dynamic HTML. Contact me directly and I can discuss this with you.

4
  • Thank you for your response. I have a huge 220 pages site and I call ADO at like 400 times ;-( Porting it to ASP.NET would be like 1 year of rewrite ;-(
    – Jerry2
    Jun 6, 2017 at 23:51
  • Sorry what does it mean, null pointer passed to ADO? I use Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Driver={MySQL ODBC 5.3 Unicode Driver};server=localhost;uid=xxx;pwd=xxx;database=xxx;OPTION=16384;" and then I use: stmt="select..." and Set RS = Conn.Execute(SQLStmt). This works 100 times a second but once every few minutes it crashes ;-( It worked on windows 2012 though.
    – Jerry2
    Jun 6, 2017 at 23:56
  • Do such "null pointers" passed to ADO accumulate over time and make crash? As most of the requests from users seem to work, site has like 100 users at a time and DB is used heavily...
    – Jerry2
    Jun 6, 2017 at 23:57
  • 1
    One thing you might check on - this has bitten me before - is that you are cleaning up your resources after you've used them. for instance make sure when you have a "Set RS=Conn.Execute..." that you have a corresponding "RS.Close" after you're done with the data.
    – nutcase
    Jun 8, 2017 at 21:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .