Uploaded image for project: 'Commons SCXML'
  1. Commons SCXML
  2. SCXML-112

Wrong behavior if event is triggered from EventDispatcher

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 2.0
    • None

    Description

      Method SCMLExecutor#triggerEvents is synchronized which is too naive way to ensure that events are processed in order they arrive.

      Since the callback to EventDispatcher is made by thread that holds lock on SCMLExecutor triggering event from the dispatcher allows this thread to re-enter the event handling.

      Note: This has nothing to do with multi-threading since there is only one thread.

      Simple queue might e sufficient but in multi-threaded application would make the first thread to enter #triggerEvents process events from other threads queued while the method is running.

      Another approach might be to call EventDispatcher in separate thread,but it has it's drawbacks too:
      a) changes single-threaded application into-multithreaded which might break assumtions made by unaware user
      b) might start too many threads
      c) Java does not guarantee that threads waiting for lock will get it in same order as they arrive => might result in non-deterministic behavior of SCXML interpretation

      Possible solutions would be:

      1) add queue and allow the "first" thread server all events - might be just fine since multi-threaded applications might create dedicate thread just for SCXML imterpretation
      2) add queue and block threads after they queue event - so they "wait" until execute their event become first in queue
      3) factor out the queue event queue management and allow for "pluggable" strategy

      Attachments

        1. Dispatcher.java
          0.8 kB
          Ales Dolecek
        2. test1.xml
          0.6 kB
          Ales Dolecek
        3. test2.xml
          0.6 kB
          Ales Dolecek

        Activity

          People

            ate Ate Douma
            alesd Ales Dolecek
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: