Comments (3)
This is addressed as of version 1.4
from distributedlock.
Hi @oliverhanappi thank you for your interest in the library.
I'm curious whether you've ever seen the deadlock exit code returned. I remember trying to force this a while back and not seeing it.
Provided we can create a test case where this is actually returned, this suggestion makes sense and would be an easy enhancement. For backwards compat, the new exception should extend InvalidOperationException
.
from distributedlock.
It is actually pretty easy. You just need to acquire multiple locks within the same connection or transaction such that two connections/transactions are waiting on each other. Here is a simple repro:
using System;
using System.Data.SqlClient;
using System.Threading;
using System.Threading.Tasks;
using Medallion.Threading.Sql;
namespace SqlDistributedLockDeadlock
{
public static class Program
{
public static void Main ()
{
using (var barrier = new Barrier (2))
{
var task1 = Task.Run (() => WithTransaction((connection, transaction) =>
{
new SqlDistributedLock ("test1", transaction).Acquire();
barrier.SignalAndWait();
new SqlDistributedLock ("test2", transaction).Acquire();
}));
var task2 = Task.Run (() => WithTransaction((connection, transaction) =>
{
new SqlDistributedLock ("test2", transaction).Acquire();
barrier.SignalAndWait();
new SqlDistributedLock ("test1", transaction).Acquire();
}));
Task.WaitAll (task1, task2);
}
}
private static void WithTransaction (Action<SqlConnection, SqlTransaction> action)
{
const string connectionString = "Server=localhost;Database=Playground;Integrated Security=True";
using (var connection = new SqlConnection (connectionString))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
action.Invoke (connection, transaction);
connection.Close();
}
}
}
}
from distributedlock.
Related Issues (20)
- Increase in lost lock after upgrading to .NET 7, EF Core 7 and Microsoft.Data.SqlClient 5.0.1 HOT 21
- Add custom data to AzureBlobLeaseDistributedLock HOT 10
- Redis: RedisScript (LuaScript) execution error - CultureInfo problem HOT 7
- DistributedLock.Azure: Remove MaxNonInfiniteLeaseDuration HOT 2
- Use Distributed lock to manage multiple calls to the same Azure function HOT 2
- Postgres distributed lock using PgBouncer connection pooler HOT 8
- About Distribute Locking System using Redis HOT 2
- RobiniaDocs API Explorer HOT 8
- Postgres - Multiple threads successfully acquire the same lock HOT 3
- Concurrency with Redis Semaphore HOT 2
- Error acquiring lock on PostgreSQL when using Npgsql 8.0 HOT 5
- PostgreSQL — Exception while using "AcquireAsync" or "TryAcquireAsync" multiple times HOT 3
- DistributedLock.Azure is updated but not released to NuGet HOT 1
- Document Support for Key Prefixes in RedisDistributedLock HOT 3
- Adopt central package management HOT 2
- Add build checks for AOT compat HOT 2
- Update from vulnerable versions of SQL server packages (dependabot PRs)
- Consider updating Azure.Storage.Blobs to latest once linked issue is resolved
- Rename CopyPackageToPublishDirectory.targets to Directory.Build.targets
- Using UseTransaction for SqlServer locks requires explicitly disabling UseMultiplexing
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from distributedlock.