Comments (4)
Thank you for reporting this, I will definitely take a look. I didn't intend this to be a feature, if anything, I wanted to ensure that instances of FM are threadsafe but independent of each other. You should be able to create a system of state machines that cooperate to solve a task, this deadlock is a bug, not a feature. Let's fix it!
from finite_machine.
@domokos Thank you for the code, it was super helpful in zeroing in on the problem! I have added a simpler version of your code as a integration test case to keep this bug at bay for the future.
Turns out the issue was to do with how state machines trigger and emit callback events, more precisely, how threads acquire an exclusive lock to be able to issue and observe events. My thoery is that the mutex has become a global mutex for the whole state machine, meaning, once thread triggered the event it also got to have a lock for the observer to emit callbacks and hence locking up any other thread from responding to events from any callbacks. Hence I think triggering an event from a different thread helped to fix the issue as a new mutex was created and hence new lock could be acquired. Long story short, this should be fixed now as both observer and event triggering should have separate locks. I will let you know once released, all is in master if you want to checkout.
from finite_machine.
Released v0.11.2
that includes the fix, would you mind trying it out?
from finite_machine.
@peter-murach Thank you for resolving this so fast.
I installed version 0.11.2 and can confirm that this version does not have this bug any more. It works as expected.
This issue can be closed.
from finite_machine.
Related Issues (20)
- Remove on_transition callback HOT 5
- Cancelling inside callbacks HOT 3
- Consider removing the conversion of event names into methods. HOT 1
- Repo description url is broken HOT 1
- Website for the gem is not working HOT 1
- Terminal state HOT 4
- When an error occurs on transition the current state is not "rollback" HOT 2
- https://travis-ci.org/minad/moneta
- Ruby 2.6.0 support (ruby-2.6.0-preview3) HOT 1
- Defining helper methods on machine, not on target HOT 2
- Setting target that responds to to_hash HOT 1
- v0.12.1 missing sync dependency HOT 4
- Java::JavaUtilConcurrent::RejectedExecutionException on jruby HOT 1
- Message Queue Spec sometimes hangs on jruby HOT 2
- alias_target doesn't seem to work HOT 2
- [ Feature Request ] Handling For Multiple State Machines HOT 3
- Unable to define constructors on custom classes HOT 4
- Base class events are not overrided in subclass.
- Errors with Ruby 3.1.2 HOT 2
- Transition does not happen if any_state is used in the definition. HOT 1
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 finite_machine.