调用CacheFactory.GetCache时引发LockRecursionException

本文关键字:LockRecursionException CacheFactory GetCache 调用 | 更新日期: 2023-09-27 18:22:28

我遇到了一个非常烦人的问题。我正在尝试编写一个简单的WinForm应用程序来显示Oracle Coherence缓存的内容。

由于某种原因,当我调用CacheFactory.GetCache("cacheName")时会抛出LockRecursionException

在保持读取锁定的情况下,可能无法获取写入锁定。这种模式容易出现死锁。在获取写锁定之前,请确保已释放读锁定。如果需要升级,请使用升级锁代替读取锁。

堆栈跟踪为:

at System.Threading.ReaderWriterLockSlim.TryEnterWriteLockCore(Int32 millisecondsTimeout)   
at System.Threading.ReaderWriterLockSlim.TryEnterWriteLock(Int32 millisecondsTimeout)  
at Tangosol.Util.ThreadGateSlim.Close(Int64 millis) in c:'hudson'workspace'Coh-NET-3.7.1'dev'release.net'coherence-net-v3.7.1'src'Coherence'Util'ThreadGateSlim.cs:line 26

我已经在表单构造函数中放置了以下代码,以及一个按钮单击事件处理程序,但仍然会引发异常。之前未调用任何其他内容:

using (var cache = CacheFactory.GetCache("cacheName"))
{
    ...get data from cache
}

以前有人见过这个吗?我使用的是.Net 4.0和Coherence 3.7.1.5。同样的代码在一个单独的(更复杂的项目)中运行良好,所以我有点不确定出了什么问题。

调用CacheFactory.GetCache时引发LockRecursionException

我建议在出现这种情况时查看所有线程。例如,我想知道在调用表单构造函数的线程中,是否有什么东西在更深层次调用Coherence。

--更新--

Patrick Fry(该功能区的首席工程师):

Coherence+.NET 4.0问题已在Coherence for.NET中解决3.7.1.7通过对COH-8044的修复JIRA没有具体提到锁定问题,但有一个专门针对这个问题提交的错误问题,它被复制为COH-8044。

https://bug.oraclecorp.com/pls/bug/webbug_print.show?c_rptno=14732333

我们应该在3.7.1.7的补丁自述中提到特定的问题也得到了解决。

相关文章:
  • 没有找到相关文章