0

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

1

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.

  • 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 '17 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 '17 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 '17 at 23:57
  • 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 '17 at 21:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.