weel 1.99.116 → 1.99.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/weel.rb +28 -16
  3. data/weel.gemspec +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4179daff04f9e6d8e955eeec5538cd100673aeb2941c8445a88639d321f828b2
4
- data.tar.gz: 5fe7cde1bf8ab2bed9e6a0a6a71e9ee19910a118e9ea00bbd99efcd88ffcf40f
3
+ metadata.gz: b5bc42f10a93d8960c022e4b48fe7eaeee25912bb7b9245b2ed4fd20159ed89f
4
+ data.tar.gz: c55e8d55c288a759a10eee35dfb84d93e414c9e534c8a9c1df47b5ad03a58d3f
5
5
  SHA512:
6
- metadata.gz: 95bda8281dd834bc7d2f1dcb63b135f162b4ddf45847c22de8835d091fc2d920ec7a6104849be59447b379d22bbd71e230610cbe22f751cc6a50a0ebb7d5008e
7
- data.tar.gz: 9b06b7677afe6f1449c6fd8dfcd64de06607d36d659e80c9c8a016652a0cfac66533ee760245fa39e1b2726b50a83e000483fb9ed846a19744f758a2f225c4d1
6
+ metadata.gz: 4a67a6c207b00bb5e124391f41b83d6ad98d4c8de3e986c9376e1d78772e9ef157e4c642c5739b0b49daa29c108ebd903e3914a06344e12893bbad55ffedcc82
7
+ data.tar.gz: ef5ed955f4ce61abe1a4be7924a2faf66a9c296bb11e7cb1fcc3e5b8fce05b0246950bd8fea7f21f4c57c3ccb775928184b74c86b6cde9a4afe4d45cdc034926
data/lib/weel.rb CHANGED
@@ -523,14 +523,12 @@ class WEEL
523
523
  cw.join_branches(Thread.current[:branch_traces])
524
524
 
525
525
  unless self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped
526
- # first set all to no_longer_neccessary
526
+ # first set all to no_longer_neccessary, just in case, but this should not be necessary
527
527
  Thread.current[:branches].each do |thread|
528
- if thread.alive? && thread[:branch_wait_count_cancel_active] == false
529
- thread[:nolongernecessary] = true
530
- __weel_recursive_continue(thread)
531
- end
528
+ thread[:nolongernecessary] = true
529
+ __weel_recursive_continue(thread)
532
530
  end
533
- # wait for all
531
+ # wait for all, they should not even exist at this point
534
532
  Thread.current[:branches].each do |thread|
535
533
  __weel_recursive_join(thread)
536
534
  end
@@ -549,7 +547,7 @@ class WEEL
549
547
 
550
548
  branch_parent[:branches] << Thread.new(*vars) do |*local|
551
549
  Thread.current.abort_on_exception = true
552
- Thread.current[:branch_status] = false
550
+ Thread.current[:branch_search] = @__weel_search_positions.any?
553
551
  Thread.current[:branch_parent] = branch_parent
554
552
  Thread.current[:start_event] = Continue.new
555
553
  Thread.current[:local] = local
@@ -584,10 +582,20 @@ class WEEL
584
582
  __weel_sim_stop(:parallel_branch,connectionwrapper,current_branch_sim_pos) if __weel_sim
585
583
 
586
584
  branch_parent[:mutex].synchronize do
587
- Thread.current[:branch_status] = true
588
585
  branch_parent[:branch_finished_count] += 1
589
586
 
590
- if branch_parent[:branch_finished_count] == branch_parent[:branch_wait_count] && self.__weel_state != :stopping && self.__weel_state != :finishing
587
+ if branch_parent[:branch_wait_count_cancel_condition] == :last
588
+ if branch_parent[:branch_finished_count] == branch_parent[:branch_wait_count] && self.__weel_state != :stopping && self.__weel_state != :finishing
589
+ branch_parent[:branches].each do |thread|
590
+ if thread.alive? && thread[:branch_wait_count_cancel_active] == false
591
+ thread[:nolongernecessary] = true
592
+ __weel_recursive_continue(thread)
593
+ end
594
+ end
595
+ end
596
+ end
597
+
598
+ if branch_parent[:branch_finished_count] == branch_parent[:branches].length && self.__weel_state != :stopping && self.__weel_state != :finishing
591
599
  branch_parent[:branch_event].continue
592
600
  end
593
601
  end
@@ -636,7 +644,9 @@ class WEEL
636
644
  end
637
645
  Thread.current[:alternative_executed][-1] = true if condition
638
646
  end
639
- __weel_protect_yield(&block) if __weel_is_in_search_mode || __weel_sim || condition
647
+ searchmode = __weel_is_in_search_mode
648
+ __weel_protect_yield(&block) if searchmode || __weel_sim || condition
649
+ Thread.current[:alternative_executed][-1] = true if __weel_is_in_search_mode != searchmode # we swiched from searchmode true to false, thus branch has been executed which is as good as evaling the condition to true
640
650
  __weel_sim_stop(:alternative,hw,pos,args.merge(:mode => Thread.current[:alternative_mode].last, :condition => ((condition.is_a?(String) || condition.is_a?(Proc)) ? condition : nil))) if __weel_sim
641
651
  end # }}}
642
652
  def otherwise(args={},&block) # {{{
@@ -824,9 +834,9 @@ class WEEL
824
834
 
825
835
  def __weel_activity(position, type, endpoint, parameters, finalize=nil, update=nil, prepare=nil, salvage=nil)# {{{
826
836
  position = __weel_position_test position
837
+ searchmode = __weel_is_in_search_mode(position)
838
+ return if searchmode == true
827
839
  begin
828
- searchmode = __weel_is_in_search_mode(position)
829
- return if searchmode == true
830
840
  return if self.__weel_state == :stopping || self.__weel_state == :finishing || self.__weel_state == :stopped || Thread.current[:nolongernecessary]
831
841
 
832
842
  Thread.current[:continue] = Continue.new
@@ -996,7 +1006,7 @@ class WEEL
996
1006
  Thread.current[:branch_wait_count_cancel_active] = true
997
1007
  Thread.current[:branch_parent][:branch_wait_count_cancel] += 1
998
1008
  end
999
- if Thread.current[:branch_parent][:branch_wait_count_cancel] == Thread.current[:branch_parent][:branch_wait_count] && self.__weel_state != :stopping && self.__weel_state != :finishing
1009
+ if Thread.current[:branch_parent][:branch_wait_count_cancel] == Thread.current[:branch_parent][:branch_wait_count] && self.__weel_state != :stopping && self.__weel_state != :finishing
1000
1010
  Thread.current[:branch_parent][:branches].each do |thread|
1001
1011
  if thread.alive? && thread[:branch_wait_count_cancel_active] == false
1002
1012
  thread[:nolongernecessary] = true
@@ -1057,9 +1067,10 @@ class WEEL
1057
1067
 
1058
1068
  def __weel_is_in_search_mode(position = nil)# {{{
1059
1069
  branch = Thread.current
1060
- return false if @__weel_search_positions.empty? || branch[:branch_search] == false
1061
1070
 
1062
- if position && @__weel_search_positions.include?(position) # matching searchpos => start execution from here
1071
+ return false unless branch[:branch_search]
1072
+
1073
+ if position && branch[:branch_search] && @__weel_search_positions.include?(position) # matching searchpos => start execution from here
1063
1074
  branch[:branch_search] = false # execute all activities in THIS branch (thread) after this point
1064
1075
  branch[:branch_search_now] = true # just now did we switch the search mode
1065
1076
  while branch.key?(:branch_parent) # also all parent branches should execute activities after this point, additional branches spawned by parent branches should still be in search mode
@@ -1069,7 +1080,7 @@ class WEEL
1069
1080
  end
1070
1081
  @__weel_search_positions[position].detail == :after
1071
1082
  else
1072
- branch[:branch_search] = true
1083
+ true
1073
1084
  end
1074
1085
  end # }}}
1075
1086
 
@@ -1252,6 +1263,7 @@ public
1252
1263
  def start # {{{
1253
1264
  return nil if @dslr.__weel_state != :ready && @dslr.__weel_state != :stopped
1254
1265
  @dslr.__weel_main = Thread.new do
1266
+ Thread.current[:branch_search] = true if @dslr.__weel_search_positions.any?
1255
1267
  begin
1256
1268
  __weel_control_flow(:running)
1257
1269
  rescue => e
data/weel.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "weel"
3
- s.version = "1.99.116"
3
+ s.version = "1.99.118"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
6
6
  s.summary = "Workflow Execution Engine Library (WEEL)"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.99.116
4
+ version: 1.99.118
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler