DevArt and OCI - deadlock (DevArt 9.4.326.0)
Posted: Fri 08 Sep 2017 14:13
We have seen in production (if DevArt is used together with OCI) we run into deadlocks.
Timeouts in DevArt are not taken into account and reasoned by that application is getting completly stuck.

Most of the time we are stuck in:
OciCall.dll!OciDynamicType.OCIDescriptorFree(System.Runtime.InteropServices.HandleRef value, int value)
Devart.Data.Oracle.dll!Devart.Data.Oracle.o.j()
and/or
OciCall.dll!OciDynamicType.OCITransRollback(System.Runtime.InteropServices.HandleRef value, System.Runtime.InteropServices.HandleRef value, uint value)
Devart.Data.Oracle.dll!Devart.Data.Oracle.dd.l()
If direct mode is used the problem does not appear (but we cannot because of Oracle RAC).
We have created a reproduce here:
https://goo.gl/zfXnXj (create schema with the provided sql script, , run the console application)
We also noticed that all other connection are blocked if that happens in getting
Devart.Data.Oracle.dll!Devart.Common.DbConnectionPoolGroup.a(Devart.Common.DbConnectionPool A_0)
Devart.Data.Oracle.dll!Devart.Common.DbConnectionPoolGroup.a(object A_0)
and
Devart.Data.Oracle.dll!Devart.Common.DbConnectionPool.GetObject(Devart.Common.DbConnectionBase owningConnection)
Devart.Data.Oracle.dll!Devart.Common.DbConnectionFactory.b(Devart.Common.DbConnectionBase A_0)Devart.Data.Oracle.dll!Devart.Common.DbConnectionClosed.Open(Devart.Common.DbConnectionBase outerConnection)
The big issue is that we have no way to recover from our end in that situation. Help would be highly appreciated.
Timeouts in DevArt are not taken into account and reasoned by that application is getting completly stuck.

Most of the time we are stuck in:
OciCall.dll!OciDynamicType.OCIDescriptorFree(System.Runtime.InteropServices.HandleRef value, int value)
Devart.Data.Oracle.dll!Devart.Data.Oracle.o.j()
and/or
OciCall.dll!OciDynamicType.OCITransRollback(System.Runtime.InteropServices.HandleRef value, System.Runtime.InteropServices.HandleRef value, uint value)
Devart.Data.Oracle.dll!Devart.Data.Oracle.dd.l()
If direct mode is used the problem does not appear (but we cannot because of Oracle RAC).
We have created a reproduce here:
https://goo.gl/zfXnXj (create schema with the provided sql script, , run the console application)
We also noticed that all other connection are blocked if that happens in getting
Devart.Data.Oracle.dll!Devart.Common.DbConnectionPoolGroup.a(Devart.Common.DbConnectionPool A_0)
Devart.Data.Oracle.dll!Devart.Common.DbConnectionPoolGroup.a(object A_0)
and
Devart.Data.Oracle.dll!Devart.Common.DbConnectionPool.GetObject(Devart.Common.DbConnectionBase owningConnection)
Devart.Data.Oracle.dll!Devart.Common.DbConnectionFactory.b(Devart.Common.DbConnectionBase A_0)Devart.Data.Oracle.dll!Devart.Common.DbConnectionClosed.Open(Devart.Common.DbConnectionBase outerConnection)
The big issue is that we have no way to recover from our end in that situation. Help would be highly appreciated.